@raydium-io/raydium-sdk-v2 0.1.63-alpha → 0.1.64-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 (95) hide show
  1. package/lib/api/api.d.ts +1 -1
  2. package/lib/api/index.d.ts +1 -1
  3. package/lib/api/type.d.ts +1 -1
  4. package/lib/{api-11ffb196.d.ts → api-f242758a.d.ts} +8 -8
  5. package/lib/common/accountInfo.d.ts +1 -1
  6. package/lib/common/bignumber.d.ts +1 -1
  7. package/lib/common/fractionUtil.d.ts +1 -1
  8. package/lib/common/index.d.ts +1 -1
  9. package/lib/common/transfer.d.ts +1 -1
  10. package/lib/common/txTool/txTool.d.ts +1 -1
  11. package/lib/common/txTool/txUtils.d.ts +1 -1
  12. package/lib/common/utility.d.ts +1 -1
  13. package/lib/index.d.ts +3 -3
  14. package/lib/index.js +1 -1
  15. package/lib/index.js.map +1 -1
  16. package/lib/index.mjs +1 -1
  17. package/lib/index.mjs.map +1 -1
  18. package/lib/module/amount.d.ts +1 -1
  19. package/lib/module/fraction.d.ts +1 -1
  20. package/lib/module/index.d.ts +1 -1
  21. package/lib/module/percent.d.ts +1 -1
  22. package/lib/module/price.d.ts +1 -1
  23. package/lib/raydium/account/account.d.ts +3 -3
  24. package/lib/raydium/account/index.d.ts +1 -1
  25. package/lib/raydium/account/instruction.d.ts +1 -1
  26. package/lib/raydium/account/types.d.ts +1 -1
  27. package/lib/raydium/account/util.d.ts +1 -1
  28. package/lib/raydium/clmm/clmm.d.ts +3 -3
  29. package/lib/raydium/clmm/index.d.ts +3 -3
  30. package/lib/raydium/clmm/instrument.d.ts +2 -2
  31. package/lib/raydium/clmm/layout.d.ts +6 -6
  32. package/lib/raydium/clmm/type.d.ts +2 -2
  33. package/lib/raydium/clmm/utils/math.d.ts +2 -2
  34. package/lib/raydium/clmm/utils/pool.d.ts +2 -2
  35. package/lib/raydium/clmm/utils/position.d.ts +2 -2
  36. package/lib/raydium/clmm/utils/tick.d.ts +2 -2
  37. package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
  38. package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
  39. package/lib/raydium/cpmm/cpmm.d.ts +3 -3
  40. package/lib/raydium/cpmm/curve/calculator.d.ts +1 -1
  41. package/lib/raydium/cpmm/curve/constantProduct.d.ts +1 -1
  42. package/lib/raydium/cpmm/index.d.ts +1 -1
  43. package/lib/raydium/cpmm/layout.d.ts +1 -1
  44. package/lib/raydium/cpmm/type.d.ts +1 -1
  45. package/lib/raydium/farm/config.d.ts +1 -1
  46. package/lib/raydium/farm/farm.d.ts +3 -3
  47. package/lib/raydium/farm/index.d.ts +1 -1
  48. package/lib/raydium/farm/instruction.d.ts +1 -1
  49. package/lib/raydium/farm/layout.d.ts +1 -1
  50. package/lib/raydium/farm/type.d.ts +1 -1
  51. package/lib/raydium/farm/util.d.ts +1 -1
  52. package/lib/raydium/ido/ido.d.ts +3 -3
  53. package/lib/raydium/ido/index.d.ts +3 -3
  54. package/lib/raydium/ido/instruction.d.ts +1 -1
  55. package/lib/raydium/ido/type.d.ts +1 -1
  56. package/lib/raydium/index.d.ts +3 -3
  57. package/lib/raydium/index.js +1 -1
  58. package/lib/raydium/index.js.map +1 -1
  59. package/lib/raydium/index.mjs +1 -1
  60. package/lib/raydium/index.mjs.map +1 -1
  61. package/lib/raydium/liquidity/index.d.ts +1 -1
  62. package/lib/raydium/liquidity/instruction.d.ts +1 -1
  63. package/lib/raydium/liquidity/layout.d.ts +6 -6
  64. package/lib/raydium/liquidity/liquidity.d.ts +3 -3
  65. package/lib/raydium/liquidity/type.d.ts +1 -1
  66. package/lib/raydium/liquidity/utils.d.ts +1 -1
  67. package/lib/raydium/marketV2/createMarket.d.ts +3 -3
  68. package/lib/raydium/marketV2/index.d.ts +3 -3
  69. package/lib/raydium/moduleBase.d.ts +3 -3
  70. package/lib/raydium/raydium.d.ts +3 -3
  71. package/lib/raydium/raydium.js +1 -1
  72. package/lib/raydium/raydium.js.map +1 -1
  73. package/lib/raydium/raydium.mjs +1 -1
  74. package/lib/raydium/raydium.mjs.map +1 -1
  75. package/lib/raydium/token/constant.d.ts +1 -1
  76. package/lib/raydium/token/index.d.ts +1 -1
  77. package/lib/raydium/token/token.d.ts +3 -3
  78. package/lib/raydium/token/token.js +1 -1
  79. package/lib/raydium/token/token.js.map +1 -1
  80. package/lib/raydium/token/token.mjs +1 -1
  81. package/lib/raydium/token/token.mjs.map +1 -1
  82. package/lib/raydium/token/type.d.ts +1 -1
  83. package/lib/raydium/token/utils.d.ts +1 -1
  84. package/lib/raydium/tradeV2/index.d.ts +2 -2
  85. package/lib/raydium/tradeV2/instrument.d.ts +2 -2
  86. package/lib/raydium/tradeV2/trade.d.ts +3 -3
  87. package/lib/raydium/tradeV2/type.d.ts +2 -2
  88. package/lib/raydium/type.d.ts +1 -1
  89. package/lib/raydium/utils1216/index.d.ts +3 -3
  90. package/lib/raydium/utils1216/utils1216.d.ts +3 -3
  91. package/lib/{raydium-a023305c.d.ts → raydium-5502e631.d.ts} +3 -3
  92. package/lib/{type-1bf767ed.d.ts → type-b1a9baec.d.ts} +1 -1
  93. package/package.json +1 -1
  94. package/src/raydium/raydium.ts +1 -1
  95. package/src/raydium/token/token.ts +1 -2
@@ -1,3 +1,3 @@
1
- var mc=Object.defineProperty,dc=Object.defineProperties;var pc=Object.getOwnPropertyDescriptors;var Eo=Object.getOwnPropertySymbols;var Cs=Object.prototype.hasOwnProperty,Rs=Object.prototype.propertyIsEnumerable;var Ks=(r,e,t)=>e in r?mc(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,C=(r,e)=>{for(var t in e||(e={}))Cs.call(e,t)&&Ks(r,t,e[t]);if(Eo)for(var t of Eo(e))Rs.call(e,t)&&Ks(r,t,e[t]);return r},E=(r,e)=>dc(r,pc(e));var Re=(r,e)=>{var t={};for(var n in r)Cs.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Eo)for(var n of Eo(r))e.indexOf(n)<0&&Rs.call(r,n)&&(t[n]=r[n]);return t};import{merge as up}from"lodash";import wa from"axios";import{get as Os,set as fc}from"lodash";var Yr=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}},Ls={},yc={};function ue(r){let e=Os(Ls,r);if(!e){let t=Os(yc,r);e=new Yr({name:r,logLevel:t}),fc(Ls,r,e)}return e}import{PublicKey as Il}from"@solana/web3.js";import Bl from"bn.js";import hl from"big.js";import tr from"bn.js";import it from"bn.js";var Bn=9e15,Zt=1e9,jr="0123456789abcdef",Wo="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",qo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Hr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Bn,maxE:Bn,crypto:!1},vs,vt,oe=!0,Go="[DecimalError] ",Ht=Go+"Invalid argument: ",Vs=Go+"Precision limit exceeded",Fs=Go+"crypto unavailable",Es="[object Decimal]",ze=Math.floor,Ne=Math.pow,bc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,gc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Ac=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ds=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,kt=1e7,te=7,wc=9007199254740991,Pc=Wo.length-1,Zr=qo.length-1,_={toStringTag:Es};_.absoluteValue=_.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),Z(r)};_.ceil=function(){return Z(new this.constructor(this),this.e+1,2)};_.clampedTo=_.clamp=function(r,e){var t,n=this,o=n.constructor;if(r=new o(r),e=new o(e),!r.s||!e.s)return new o(NaN);if(r.gt(e))throw Error(Ht+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new o(n)};_.comparedTo=_.cmp=function(r){var e,t,n,o,i=this,s=i.d,a=(r=new i.constructor(r)).d,c=i.s,u=r.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(i.e!==r.e)return i.e>r.e^c<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};_.cosine=_.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+te,n.rounding=1,t=hc(n,Xs(n,t)),n.precision=r,n.rounding=e,Z(vt==2||vt==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};_.cubeRoot=_.cbrt=function(){var r,e,t,n,o,i,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,i=l.s*Ne(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=De(l.d),r=l.e,(i=(r-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Ne(t,1/3),r=ze((r+1)/3)-(r%3==(r<0?-1:2)),i==1/0?t="5e"+r:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(r=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=he(u.plus(l).times(a),u.plus(c),s+2,1),De(a.d).slice(0,s)===(t=De(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(Z(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(Z(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,Z(n,r,m.rounding,e)};_.decimalPlaces=_.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-ze(this.e/te))*te,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};_.dividedBy=_.div=function(r){return he(this,new this.constructor(r))};_.dividedToIntegerBy=_.divToInt=function(r){var e=this,t=e.constructor;return Z(he(e,new t(r),0,1,1),t.precision,t.rounding)};_.equals=_.eq=function(r){return this.cmp(r)===0};_.floor=function(){return Z(new this.constructor(this),this.e+1,3)};_.greaterThan=_.gt=function(r){return this.cmp(r)>0};_.greaterThanOrEqualTo=_.gte=function(r){var e=this.cmp(r);return e==1||e===0};_.hyperbolicCosine=_.cosh=function(){var r,e,t,n,o,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,o=i.d.length,o<32?(r=Math.ceil(o/3),e=(1/zo(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),i=xn(s,1,i.times(e),new s(1),!0);for(var c,u=r,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return Z(i,s.precision=t,s.rounding=n,!0)};_.hyperbolicSine=_.sinh=function(){var r,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=xn(i,2,o,o,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,o=o.times(1/zo(5,r)),o=xn(i,2,o,o,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);r--;)s=o.times(o),o=o.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,Z(o,e,t,!0)};_.hyperbolicTangent=_.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,he(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};_.inverseCosine=_.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?ht(t,o,i):new t(0):new t(NaN):e.isZero()?ht(t,o+4,i).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),r=ht(t,o+4,i).times(.5),t.precision=o,t.rounding=i,r.minus(e))};_.inverseHyperbolicCosine=_.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};_.inverseHyperbolicSine=_.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln())};_.inverseHyperbolicTangent=_.atanh=function(){var r,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):(r=i.precision,e=i.rounding,n=o.sd(),Math.max(n,r)<2*-o.e-1?Z(new i(o),r,e,!0):(i.precision=t=n-o.e,o=he(o.plus(1),new i(1).minus(o),t+r,1),i.precision=r+4,i.rounding=1,o=o.ln(),i.precision=r,i.rounding=e,o.times(.5))):new i(NaN)};_.inverseSine=_.asin=function(){var r,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?(r=ht(i,t+4,n).times(.5),r.s=o.s,r):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)))};_.inverseTangent=_.atan=function(){var r,e,t,n,o,i,s,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<=Zr)return s=ht(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Zr)return s=ht(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/te+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/te),n=1,c=u.times(u),s=new l(u),o=u;r!==-1;)if(o=o.times(c),i=s.minus(o.div(n+=2)),o=o.times(c),s=i.plus(o.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===i.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),oe=!0,Z(s,l.precision=m,l.rounding=d,!0)};_.isFinite=function(){return!!this.d};_.isInteger=_.isInt=function(){return!!this.d&&ze(this.e/te)>this.d.length-2};_.isNaN=function(){return!this.s};_.isNegative=_.isNeg=function(){return this.s<0};_.isPositive=_.isPos=function(){return this.s>0};_.isZero=function(){return!!this.d&&this.d[0]===0};_.lessThan=_.lt=function(r){return this.cmp(r)<0};_.lessThanOrEqualTo=_.lte=function(r){return this.cmp(r)<1};_.logarithm=_.log=function(r){var e,t,n,o,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.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(oe=!1,a=m+p,s=jt(u,a),n=e?Uo(l,a+10):jt(r,a),c=he(s,n,a,1),qn(c.d,o=m,d))do if(a+=10,s=jt(u,a),n=e?Uo(l,a+10):jt(r,a),c=he(s,n,a,1),!i){+De(c.d).slice(o+1,o+15)+1==1e14&&(c=Z(c,m+1,0));break}while(qn(c.d,o+=10,d));return oe=!0,Z(c,m,d)};_.minus=_.sub=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.constructor;if(r=new y(r),!p.d||!r.d)return!p.s||!r.s?r=new y(NaN):p.d?r.s=-r.s:r=new y(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(u=p.d,d=r.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])r.s=-r.s;else if(u[0])r=new y(p);else return new y(c===3?-0:0);return oe?Z(r,a,c):r}if(t=ze(r.e/te),l=ze(p.e/te),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/te),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}i=0}for(m&&(e=u,u=d,d=e,r.s=-r.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>i;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=kt-1;--u[o],u[n]+=kt}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(r.d=u,r.e=Xo(u,t),oe?Z(r,a,c):r):new y(c===3?-0:0)};_.modulo=_.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?Z(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=he(t,r.abs(),0,3,1),e.s*=r.s):e=he(t,r,0,n.modulo,1),e=e.times(r),oe=!0,t.minus(e))};_.naturalExponential=_.exp=function(){return $r(this)};_.naturalLogarithm=_.ln=function(){return jt(this)};_.negated=_.neg=function(){var r=new this.constructor(this);return r.s=-r.s,Z(r)};_.plus=_.add=function(r){var e,t,n,o,i,s,a,c,u,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(u=m.d,l=r.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(r=new d(m)),oe?Z(r,a,c):r;if(i=ze(m.e/te),n=ze(r.e/te),u=u.slice(),o=i-n,o){for(o<0?(t=u,o=-o,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/te),s=i>s?i+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=u.length,o=l.length,s-o<0&&(o=s,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/kt|0,u[o]%=kt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=Xo(u,n),oe?Z(r,a,c):r};_.precision=_.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Ht+r);return t.d?(e=Ws(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};_.round=function(){var r=this,e=r.constructor;return Z(new e(r),r.e+1,e.rounding)};_.sine=_.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+te,n.rounding=1,t=Tc(n,Xs(n,t)),n.precision=r,n.rounding=e,Z(vt>2?t.neg():t,r,e,!0)):new n(NaN)};_.squareRoot=_.sqrt=function(){var r,e,t,n,o,i,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(oe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=De(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=ze((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(he(s,i,t+2,1)).times(.5),De(i.d).slice(0,t)===(e=De(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(Z(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(Z(n,c+1,1),r=!n.times(n).eq(s));break}return oe=!0,Z(n,c,l.rounding,r)};_.tangent=_.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=he(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,Z(vt==2||vt==4?t.neg():t,r,e,!0)):new n(NaN)};_.times=_.mul=function(r){var e,t,n,o,i,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=ze(l.e/te)+ze(r.e/te),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,s=c,c=u,u=s),i=[],s=c+u,n=s;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%kt|0,e=a/kt|0;i[o]=(i[o]+e)%kt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),r.d=i,r.e=Xo(i,t),oe?Z(r,m.precision,m.rounding):r};_.toBinary=function(r,e){return ei(this,2,r,e)};_.toDecimalPlaces=_.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(nt(r,0,Zt),e===void 0?e=n.rounding:nt(e,0,8),Z(t,r+t.e+1,e))};_.toExponential=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Ot(n,!0):(nt(r,0,Zt),e===void 0?e=o.rounding:nt(e,0,8),n=Z(new o(n),r+1,e),t=Ot(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toFixed=function(r,e){var t,n,o=this,i=o.constructor;return r===void 0?t=Ot(o):(nt(r,0,Zt),e===void 0?e=i.rounding:nt(e,0,8),n=Z(new i(o),r+o.e+1,e),t=Ot(n,!1,r+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};_.toFraction=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),i=e.e=Ws(y)-p.e-1,s=i%te,e.d[0]=Ne(10,s<0?te+s:s),r==null)r=i>0?e:u;else{if(a=new f(r),!a.isInt()||a.lt(u))throw Error(Ht+a);r=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(De(y)),l=f.precision,f.precision=i=y.length*te*2;m=he(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(r)!=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=he(r.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=he(u,n,i,1).minus(p).abs().cmp(he(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};_.toHexadecimal=_.toHex=function(r,e){return ei(this,16,r,e)};_.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:nt(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(oe=!1,t=he(t,r,0,e,1).times(r),oe=!0,Z(t)):(r.s=t.s,t=r),t};_.toNumber=function(){return+this};_.toOctal=function(r,e){return ei(this,8,r,e)};_.toPower=_.pow=function(r){var e,t,n,o,i,s,a=this,c=a.constructor,u=+(r=new c(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new c(Ne(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,r.eq(1))return Z(a,n,i);if(e=ze(r.e/te),e>=r.d.length-1&&(t=u<0?-u:u)<=wc)return o=qs(c,a,t,n),r.s<0?new c(1).div(o):Z(o,n,i);if(s=a.s,s<0){if(e<r.d.length-1)return new c(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Ne(+a,u),e=t==0||!isFinite(t)?ze(u*(Math.log("0."+De(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(oe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=$r(r.times(jt(a,n+t)),n),o.d&&(o=Z(o,n+5,1),qn(o.d,n,i)&&(e=n+10,o=Z($r(r.times(jt(a,e+t)),e),e+5,1),+De(o.d).slice(n+1,n+15)+1==1e14&&(o=Z(o,n+1,0)))),o.s=s,oe=!0,c.rounding=i,Z(o,n,i))};_.toPrecision=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Ot(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(nt(r,1,Zt),e===void 0?e=o.rounding:nt(e,0,8),n=Z(new o(n),r,e),t=Ot(n,r<=n.e||n.e<=o.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toSignificantDigits=_.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(nt(r,1,Zt),e===void 0?e=n.rounding:nt(e,0,8)),Z(new n(t),r,e)};_.toString=function(){var r=this,e=r.constructor,t=Ot(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};_.truncated=_.trunc=function(){return Z(new this.constructor(this),this.e+1,1)};_.valueOf=_.toJSON=function(){var r=this,e=r.constructor,t=Ot(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function De(r){var e,t,n,o=r.length-1,i="",s=r[0];if(o>0){for(i+=s,e=1;e<o;e++)n=r[e]+"",t=te-n.length,t&&(i+=Yt(t)),i+=n;s=r[e],n=s+"",t=te-n.length,t&&(i+=Yt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function nt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Ht+r)}function qn(r,e,t,n){var o,i,s,a;for(i=r[0];i>=10;i/=10)--e;return--e<0?(e+=te,o=0):(o=Math.ceil((e+1)/te),e%=te),i=Ne(10,te-e),a=r[o]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==i||t>3&&a+1==i/2)&&(r[o+1]/i/100|0)==Ne(10,e-2)-1||(a==i/2||a==0)&&(r[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),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(r[o+1]/i/1e3|0)==Ne(10,e-3)-1,s}function Do(r,e,t){for(var n,o=[0],i,s=0,a=r.length;s<a;){for(i=o.length;i--;)o[i]*=e;for(o[0]+=jr.indexOf(r.charAt(s++)),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 hc(r,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/zo(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),r.precision+=t,e=xn(r,1,e.times(o),new r(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var he=function(){function r(n,o,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*o+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,o,i,s){var a,c;if(i!=s)c=i>s?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,s){for(var a=0;i--;)n[i]-=a,a=n[i]<o[i]?1:0,n[i]=a*s+n[i]-o[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,i,s,a,c){var u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B,L,D,V=n.constructor,H=n.s==o.s?1:-1,G=n.d,q=o.d;if(!G||!G[0]||!q||!q[0])return new V(!n.s||!o.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?H*0:H/0);for(c?(p=1,l=n.e-o.e):(c=kt,p=te,l=ze(n.e/p)-ze(o.e/p)),L=q.length,R=G.length,g=new V(H),w=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,i==null?(T=i=V.precision,s=V.rounding):a?T=i+(n.e-o.e)+1:T=i,T<0)w.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,q=q[0],T++;(m<R||d)&&T--;m++)S=d*c+(G[m]||0),w[m]=S/q|0,d=S%q|0;y=d||m<R}else{for(d=c/(q[0]+1)|0,d>1&&(q=r(q,d,c),G=r(G,d,c),L=q.length,R=G.length),x=L,A=G.slice(0,L),k=A.length;k<L;)A[k++]=0;D=q.slice(),D.unshift(0),B=q[0],q[1]>=c/2&&++B;do d=0,u=e(q,A,L,k),u<0?(I=A[0],L!=k&&(I=I*c+(A[1]||0)),d=I/B|0,d>1?(d>=c&&(d=c-1),f=r(q,d,c),b=f.length,k=A.length,u=e(f,A,b,k),u==1&&(d--,t(f,L<b?D:q,b,c))):(d==0&&(u=d=1),f=q.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,c),u==-1&&(k=A.length,u=e(q,A,L,k),u<1&&(d++,t(A,L<k?D:q,k,c))),k=A.length):u===0&&(d++,A=[0]),w[m++]=d,u&&A[0]?A[k++]=G[x]||0:(A=[G[x]],k=1);while((x++<R||A[0]!==void 0)&&T--);y=A[0]!==void 0}w[0]||w.shift()}if(p==1)g.e=l,vs=y;else{for(m=1,d=w[0];d>=10;d/=10)m++;g.e=m+l*p-1,Z(g,a?i+g.e+1:i,s,y)}return g}}();function Z(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(o=1,a=m[0];a>=10;a/=10)o++;if(i=e-o,i<0)i+=te,s=e,l=m[d=0],c=l/Ne(10,o-s-1)%10|0;else if(d=Math.ceil((i+1)/te),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,i%=te,s=i-te+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=te,s=i-te+o,c=s<0?0:l/Ne(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Ne(10,o-s-1)),u=t<4?(c||n)&&(t==0||t==(r.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/Ne(10,o-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=r.e+1,m[0]=Ne(10,(te-e%te)%te),r.e=-e||0):m[0]=r.e=0,r;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Ne(10,te-i),m[d]=s>0?(l/Ne(10,o-s)%Ne(10,s)|0)*a:0),u)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(r.e++,m[0]==kt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=kt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function Ot(r,e,t){if(!r.isFinite())return Gs(r);var n,o=r.e,i=De(r.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Yt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(r.e<0?"e":"e+")+r.e):o<0?(i="0."+Yt(-o-1)+i,t&&(n=t-s)>0&&(i+=Yt(n))):o>=s?(i+=Yt(o+1-s),t&&(n=t-o-1)>0&&(i=i+"."+Yt(n))):((n=o+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(i+="."),i+=Yt(n))),i}function Xo(r,e){var t=r[0];for(e*=te;t>=10;t/=10)e++;return e}function Uo(r,e,t){if(e>Pc)throw oe=!0,t&&(r.precision=t),Error(Vs);return Z(new r(Wo),e,1,!0)}function ht(r,e,t){if(e>Zr)throw Error(Vs);return Z(new r(qo),e,t,!0)}function Ws(r){var e=r.length-1,t=e*te+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function Yt(r){for(var e="";r--;)e+="0";return e}function qs(r,e,t,n){var o,i=new r(1),s=Math.ceil(n/te+4);for(oe=!1;;){if(t%2&&(i=i.times(e),Ms(i.d,s)&&(o=!0)),t=ze(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),Ms(e.d,s)}return oe=!0,i}function Ns(r){return r.d[r.d.length-1]&1}function Us(r,e,t){for(var n,o=new r(e[0]),i=0;++i<e.length;)if(n=new r(e[i]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function $r(r,e){var t,n,o,i,s,a,c,u=0,l=0,m=0,d=r.constructor,p=d.rounding,y=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(oe=!1,c=y):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Ne(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=Z(i.times(r),c,1),t=t.times(++l),a=s.plus(he(i,t,c,1)),De(a.d).slice(0,c)===De(s.d).slice(0,c)){for(o=m;o--;)s=Z(s.times(s),c,1);if(e==null)if(u<3&&qn(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return Z(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function jt(r,e){var t,n,o,i,s,a,c,u,l,m,d,p=1,y=10,f=r,b=f.d,g=f.constructor,w=g.rounding,A=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(oe=!1,l=A):l=e,g.precision=l+=y,t=De(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=De(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return u=Uo(g,l+2,A).times(i+""),f=jt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=A,e==null?Z(f,A,w,oe=!0):f;for(m=f,c=s=f=he(f.minus(1),f.plus(1),l,1),d=Z(f.times(f),l,1),o=3;;){if(s=Z(s.times(d),l,1),u=c.plus(he(s,new g(o),l,1)),De(u.d).slice(0,l)===De(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(Uo(g,l+2,A).times(i+""))),c=he(c,new g(p),l,1),e==null)if(qn(c.d,l-y,w,a))g.precision=l+=y,u=s=f=he(m.minus(1),m.plus(1),l,1),d=Z(f.times(f),l,1),o=a=1;else return Z(c,g.precision=A,w,oe=!0);else return g.precision=A,c;c=u,o+=2}}function Gs(r){return String(r.s*r.s/0)}function Jr(r,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,r.e=t=t-n-1,r.d=[],n=(t+1)%te,t<0&&(n+=te),n<o){for(n&&r.d.push(+e.slice(0,n)),o-=te;n<o;)r.d.push(+e.slice(n,n+=te));e=e.slice(n),n=te-e.length}else n-=o;for(;n--;)e+="0";r.d.push(+e),oe&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function kc(r,e){var t,n,o,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ds.test(e))return Jr(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(gc.test(e))t=16,e=e.toLowerCase();else if(bc.test(e))t=2;else if(Ac.test(e))t=8;else throw Error(Ht+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("."),s=i>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,o=qs(n,new n(t),i,i*2)),u=Do(e,t,kt),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(r.s*0):(r.e=Xo(u,l),r.d=u,oe=!1,s&&(r=he(r,o,a*4)),c&&(r=r.times(Math.abs(c)<54?Ne(2,c):Un.pow(2,c))),oe=!0,r)}function Tc(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:xn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/zo(5,t)),e=xn(r,2,e,e);for(var o,i=new r(5),s=new r(16),a=new r(20);t--;)o=e.times(e),e=e.times(i.plus(o.times(s.times(o).minus(a))));return e}function xn(r,e,t,n,o){var i,s,a,c,u=1,l=r.precision,m=Math.ceil(l/te);for(oe=!1,c=t.times(t),a=new r(n);;){if(s=he(a.times(c),new r(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=he(s.times(c),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function zo(r,e){for(var t=r;--e;)t*=r;return t}function Xs(r,e){var t,n=e.s<0,o=ht(r,r.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return vt=n?4:1,e;if(t=e.divToInt(o),t.isZero())vt=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return vt=Ns(t)?n?2:3:n?4:1,e;vt=Ns(t)?n?1:4:n?3:2}return e.minus(o).abs()}function ei(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor,y=t!==void 0;if(y?(nt(t,1,Zt),n===void 0?n=p.rounding:nt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=Gs(r);else{for(l=Ot(r),s=l.indexOf("."),y?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Do(Ot(d),10,o),d.e=d.d.length),m=Do(l,10,o),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(r=new p(r),r.d=m,r.e=i,r=he(r,d,t,n,0,o),m=r.d,i=r.e,u=vs),s=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(r.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(s=0,l="";s<c;s++)l+=jr.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=Do(l,o,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=jr.charAt(m[s])}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 r.s<0?"-"+l:l}function Ms(r,e){if(r.length>e)return r.length=e,!0}function Ic(r){return new this(r).abs()}function Bc(r){return new this(r).acos()}function xc(r){return new this(r).acosh()}function Sc(r,e){return new this(r).plus(e)}function Kc(r){return new this(r).asin()}function Cc(r){return new this(r).asinh()}function Rc(r){return new this(r).atan()}function Oc(r){return new this(r).atanh()}function Lc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,o=this.rounding,i=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=ht(this,i,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?ht(this,n,o):new this(0),t.s=r.s):!r.d||e.isZero()?(t=ht(this,i,1).times(.5),t.s=r.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(he(r,e,i,1)),e=ht(this,i,1),this.precision=n,this.rounding=o,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(he(r,e,i,1)),t}function Nc(r){return new this(r).cbrt()}function Mc(r){return Z(r=new this(r),r.e+1,2)}function _c(r,e,t){return new this(r).clamp(e,t)}function vc(r){if(!r||typeof r!="object")throw Error(Go+"Object expected");var e,t,n,o=r.defaults===!0,i=["precision",1,Zt,"rounding",0,8,"toExpNeg",-Bn,0,"toExpPos",0,Bn,"maxE",0,Bn,"minE",-Bn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=Hr[t]),(n=r[t])!==void 0)if(ze(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Ht+t+": "+n);if(t="crypto",o&&(this[t]=Hr[t]),(n=r[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(Fs);else this[t]=!1;else throw Error(Ht+t+": "+n);return this}function Vc(r){return new this(r).cos()}function Fc(r){return new this(r).cosh()}function zs(r){var e,t,n;function o(i){var s,a,c,u=this;if(!(u instanceof o))return new o(i);if(u.constructor=o,_s(i)){u.s=i.s,oe?!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(s=0,a=i;a>=10;a/=10)s++;oe?s>o.maxE?(u.e=NaN,u.d=null):s<o.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[i]):(u.e=s,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return Jr(u,i.toString())}else if(c!=="string")throw Error(Ht+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Ds.test(i)?Jr(u,i):kc(u,i)}if(o.prototype=_,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=vc,o.clone=zs,o.isDecimal=_s,o.abs=Ic,o.acos=Bc,o.acosh=xc,o.add=Sc,o.asin=Kc,o.asinh=Cc,o.atan=Rc,o.atanh=Oc,o.atan2=Lc,o.cbrt=Nc,o.ceil=Mc,o.clamp=_c,o.cos=Vc,o.cosh=Fc,o.div=Ec,o.exp=Dc,o.floor=Wc,o.hypot=qc,o.ln=Uc,o.log=Gc,o.log10=zc,o.log2=Xc,o.max=Qc,o.min=Yc,o.mod=jc,o.mul=Hc,o.pow=Zc,o.random=$c,o.round=Jc,o.sign=el,o.sin=tl,o.sinh=nl,o.sqrt=ol,o.sub=rl,o.sum=il,o.tan=sl,o.tanh=al,o.trunc=ul,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return o.config(r),o}function Ec(r,e){return new this(r).div(e)}function Dc(r){return new this(r).exp()}function Wc(r){return Z(r=new this(r),r.e+1,3)}function qc(){var r,e,t=new this(0);for(oe=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function _s(r){return r instanceof Un||r&&r.toStringTag===Es||!1}function Uc(r){return new this(r).ln()}function Gc(r,e){return new this(r).log(e)}function Xc(r){return new this(r).log(2)}function zc(r){return new this(r).log(10)}function Qc(){return Us(this,arguments,"lt")}function Yc(){return Us(this,arguments,"gt")}function jc(r,e){return new this(r).mod(e)}function Hc(r,e){return new this(r).mul(e)}function Zc(r,e){return new this(r).pow(e)}function $c(r){var e,t,n,o,i=0,s=new this(1),a=[];if(r===void 0?r=this.precision:nt(r,1,Zt),n=Math.ceil(r/te),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(Fs);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],r%=te,n&&r&&(o=Ne(10,te-r),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-=te)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<te&&(t-=te-n)}return s.e=t,s.d=a,s}function Jc(r){return Z(r=new this(r),r.e+1,this.rounding)}function el(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function tl(r){return new this(r).sin()}function nl(r){return new this(r).sinh()}function ol(r){return new this(r).sqrt()}function rl(r,e){return new this(r).sub(e)}function il(){var r=0,e=arguments,t=new this(e[r]);for(oe=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return oe=!0,Z(t,this.precision,this.rounding)}function sl(r){return new this(r).tan()}function al(r){return new this(r).tanh()}function ul(r){return Z(r=new this(r),r.e+1,1)}_[Symbol.for("nodejs.util.inspect.custom")]=_.toString;_[Symbol.toStringTag]="Decimal";var Un=_.constructor=zs(Hr);Wo=new Un(Wo);qo=new Un(qo);var O=Un;import{PublicKey as ii}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as cl}from"@solana/spl-token";import{PublicKey as Ie,SystemProgram as Qs,SYSVAR_RENT_PUBKEY as ll}from"@solana/web3.js";function P({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var ti=[P({pubkey:cl,isWritable:!1}),P({pubkey:Qs.programId,isWritable:!1}),P({pubkey:ll,isWritable:!1})];function ni({publicKey:r,transformSol:e}){let t=oi(r.toString());if(t instanceof Ie)return e&&t.equals(Me)?Y:t;if(e&&t.toString()===Me.toBase58())return Y;if(typeof t=="string"){if(t===Ie.default.toBase58())return Ie.default;try{return new Ie(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function oi(r){try{return new Ie(r)}catch{return r}}var Qo=new Ie("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Yo=new Ie("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new Ie("SysvarRent111111111111111111111111111111111"),ri=new Ie("SysvarC1ock11111111111111111111111111111111"),Sn=new Ie("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),jo=new Ie("Sysvar1nstructions1111111111111111111111111"),Ho=Qs.programId,bp=new Ie("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),gp=new Ie("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Ap=new Ie("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),wp=new Ie("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Pp=new Ie("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),hp=new Ie("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),kp=new Ie("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Tp=new Ie("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Ip=new Ie("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Bp=new Ie("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),xp=new Ie("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Y=new Ie("So11111111111111111111111111111111111111112"),Me=Ie.default;function lt(r){return ni({publicKey:r,transformSol:!0})}import{PublicKey as ml}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ys}from"@solana/spl-token";var Lt={chainId:101,address:ml.default.toBase58(),programId:Ys.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},_e={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Ys.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};var si=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:s=!1}){if(e===Me.toBase58()||e instanceof ii&&Me.equals(e)){this.decimals=_e.decimals,this.symbol=_e.symbol,this.name=_e.name,this.mint=new ii(_e.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?ii.default:ni({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Be=si;Be.WSOL=new si(E(C({},_e),{mint:_e.address}));import $o from"big.js";import fl from"bn.js";import yl from"decimal.js-light";import dl from"toformat";var pl=dl,Gn=pl;var Zo=ue("module/fraction"),ai=Gn($o),Xn=Gn(yl),bl={[0]:Xn.ROUND_DOWN,[1]:Xn.ROUND_HALF_UP,[2]:Xn.ROUND_UP},gl={[0]:$o.roundDown,[1]:$o.roundHalfUp,[2]:$o.roundUp},pe=class{constructor(e,t=new fl(1)){this.numerator=$(e),this.denominator=$(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new pe(this.denominator,this.numerator)}add(e){let t=e instanceof pe?e:new pe($(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.add(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof pe?e:new pe($(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.sub(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof pe?e:new pe($(e));return new pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof pe?e:new pe($(e));return new pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Zo.logWithError(`${e} is not an integer.`),e<=0&&Zo.logWithError(`${e} is not positive.`),Xn.set({precision:e+1,rounding:bl[n]});let o=new Xn(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)||Zo.logWithError(`${e} is not an integer.`),e<0&&Zo.logWithError(`${e} is negative.`),ai.DP=e,ai.RM=gl[n]||1,new ai(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var wl=ue("Raydium_price"),rt=class extends pe{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=o,this.scalar=new pe(ui(n.decimals),ui(o.decimals))}get raw(){return new pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new rt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&wl.logWithError("mul token not equals");let n=super.mul(t);return new rt({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 ci=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Jo=ci;Jo.SOL=new ci(Lt);import Pl from"bn.js";var js=new pe(new Pl(100)),Qe=class extends pe{toSignificant(e=5,t,n){return this.mul(js).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(js).toFixed(e,t,n)}};var ft=new it(0),Zs=new it(1),Tf=new it(2),If=new it(3),Bf=new it(5),li=new it(10),xf=new it(100),Sf=new it(1e3),Kf=new it(1e4),Hs=9007199254740991;function $(r){let e=ue("Raydium_parseBigNumberish");if(r instanceof it)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new it(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Hs||r<=-Hs)&&e.logWithError(`BigNumberish number overflow: ${r}`),new it(String(r))):typeof r=="bigint"?new it(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new it(0))}function ui(r){return li.pow($(r))}function er(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var kl=ue("Raydium_amount"),Js=Gn(hl);function Tl(r,e){let t="0",n="0";if(r.includes(".")){let o=r.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):kl.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var ge=class extends pe{constructor(t,n,o=!0,i){let s=new tr(0),a=li.pow(new tr(t.decimals));if(o)s=$(n);else{let c=new tr(0),u=new tr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Tl(n.toString(),t.decimals);c=$(l),u=$(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ue(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 ge(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ge(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 Js.DP=this.token.decimals,new Js(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function $s(r){return typeof r=="object"&&r!==null&&![Be,ge,Il,pe,Bl,rt,Qe].some(e=>typeof e=="object"&&r instanceof e)}function ke(r){return typeof r=="string"?oi(r):Array.isArray(r)?r.map(e=>ke(e)):$s(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,ke(t)])):r}import{PublicKey as Yn,sendAndConfirmTransaction as fi,Transaction as jn,TransactionMessage as Hn,VersionedTransaction as Zn}from"@solana/web3.js";import _l from"axios";var F={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",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",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"};import{PublicKey as ta,ComputeBudgetProgram as ea,Transaction as nr,TransactionMessage as xl,Keypair as na,VersionedTransaction as oa}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Sl}from"@solana/spl-token";var Vt=ue("Raydium_txUtil"),ra=1644;function or(r){let e=[],t=[];return r.microLamports&&(e.push(ea.setComputeUnitPrice({microLamports:r.microLamports})),t.push(F.SetComputeUnitPrice)),r.units&&(e.push(ea.setComputeUnitLimit({units:r.units})),t.push(F.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Kn(r,e){var n,o;let t=e!=null?e:"confirmed";try{return((o=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:o.blockhash)||(await r.getRecentBlockhash(t)).blockhash}catch{return(await r.getRecentBlockhash(t)).blockhash}}function rr(r,e){r.length<1&&Vt.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Vt.logWithError(`no signers provided:, ${e.toString()}`);let t=new nr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<ra}catch{return!1}}async function ia(r,e,t,n=!0){let o=new ta("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new nr;s.feePayer=o;for(let u of e)rr([...s.instructions,u],[o])||(i.push(s),s=new nr,s.feePayer=o),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await Kl(r,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Vt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Vt.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Vt.debug("filteredLog:",c),l.length||Vt.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function sa(r,e){let t=r.match(/{["\w:,]+}/g);return!t||t.length!==1?Vt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Ft(r,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(r);return!n||n.length!==2?Vt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ae(r,e){let[t,n]=ta.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}async function Kl(r,e,t){let n=[];if(t){let o=await r.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=o.blockhash,u.lastValidBlockHeight=o.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.map(u=>{let l=r._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await r._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async o=>await(await r.simulateTransaction(o)).value))}catch(o){o instanceof Error&&Vt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:o.message})}return n}function zn({instructions:r,payer:e,signers:t}){return rr(r,[e,...t])}function Qn({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=na.generate().publicKey.toString()}){let i=new xl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new oa(i).serialize()).toString("base64").length<ra}catch{return!1}}var Cl=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r),Rl=r=>{let e=r.serialize({requireAllSignatures:!1,verifySignatures:!1});r instanceof oa&&(e=Cl(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function un(r){let e=[];return r.forEach(t=>{t instanceof nr&&(t.recentBlockhash||(t.recentBlockhash=Sl.toBase58()),t.feePayer||(t.feePayer=na.generate().publicKey)),e.push(Rl(t))}),console.log("simulate tx string:",e),e}import{PublicKey as ua,AddressLookupTableAccount as ir}from"@solana/web3.js";import{PublicKey as aa}from"@solana/web3.js";import{MINT_SIZE as Ol,TOKEN_PROGRAM_ID as Ll,getTransferFeeConfig as Nl,unpackMint as Ml}from"@solana/spl-token";var mi=ue("Raydium_accountInfo_util");async function Tt(r,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=di(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=di(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&mi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&mi.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new aa(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&mi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function ve(r,e,t){let n=await Tt(r,e.map(o=>o.pubkey),t);return e.map((o,i)=>E(C({},o),{accountInfo:n[i]}))}async function Cn({connection:r,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await ve(r,e.map(c=>({pubkey:lt(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Ol){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Ml(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=E(C({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Ll,feeConfig:(a=Nl(u))!=null?a:void 0})}return o[aa.default.toBase58()]=o[Y.toBase58()],o}async function pi({connection:r,address:e}){let t=await Tt(r,[...new Set(e.map(o=>o.toString()))].map(o=>new ua(o))),n={};for(let o=0;o<e.length;o++){let i=t[o],s=e[o];if(!i)continue;let a=new ir({key:s,state:ir.deserialize(i.data)});n[s.toString()]=a,sr[s.toString()]=a}return n}var sr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new ir({key:new ua("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:ir.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};var ar=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.api=e.api}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 _l.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}=or(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!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:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==Yn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;let t=new jn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=o||{},c=i!=null?i:await Kn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),un([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await fi(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[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),s=[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:s,signers:a,instructionTypes:c,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Kn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let w of s){let A=await fi(this.connection,w,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((A,k)=>(A.recentBlockhash=f,a[k].length&&A.sign(...a[k]),A));un(g);let w=await this.signAllTransactions(g);if(m){let A=0,k=[],I=async()=>{if(!w[A])return;let T=await this.connection.sendRawTransaction(w[A].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:w[A]}),d==null||d([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:k.map(T=>T.txId),signedTxs:w}}else{let A=[];for(let k=0;k<w.length;k+=1){let I=await this.connection.sendRawTransaction(w[k].serialize(),{skipPreflight:y});A.push(I)}return{txIds:A,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 f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:i}=y,s=Re(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=C(C({},this.cluster==="devnet"?{}:sr),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Yn(b));let l=await pi({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?Yn.default.toBase58():i!=null?i:await Kn(this.connection,this.blockhashCommitment),d=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new Zn(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var A;let{skipPreflight:g=!0,sendAndConfirm:w}=b||{};if(un([p]),(A=this.owner)!=null&&A.isKeyPair){let k=await this.connection.sendTransaction(p,{skipPreflight:g});if(w){let{lastValidBlockHeight:I,blockhash:T}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:T,lastValidBlockHeight:I,signature:k},"confirmed")}return{txId:k,signedTx:p}}if(this.signAllTransactions){let k=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(k[0],{skipPreflight:g}),signedTx:k[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}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),s=[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)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),un(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let w=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:A,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:A,signature:w},"confirmed"),b.push(w)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,w=[],A=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});w.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...w]),g++,this.connection.onSignature(k,I=>{let T=w.findIndex(S=>S.txId===k);T>-1&&(w[T].status=I.err?"error":"success"),d==null||d([...w]),I.err||A()},"processed"),this.connection.getSignatureStatus(k)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let w=0;w<b.length;w+=1){let A=await this.connection.sendTransaction(b[w],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=Re(u,["computeBudgetConfig"]),o=t?or(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>E(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...o.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Yn(b));if(c.length<12&&zn({instructions:p,payer:this.feePayer,signers:f})||zn({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");zn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new jn().add(...o.instructions,...c)):s.push(new jn().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);zn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new jn().add(...o.instructions,...c)):s.push(new jn().add(...c)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Kn(this.connection,this.blockhashCommitment);if(s.forEach(async(w,A)=>{w.recentBlockhash=b,a[A].length&&w.sign(...a[A])}),un(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let w=[];for(let A of s){let k=await fi(this.connection,A,this.signers.find(I=>I.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});w.push(k)}return{txIds:w,signedTxs:s}}return{txIds:await Promise.all(s.map(async w=>await this.connection.sendRawTransaction(w.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let w=await this.signAllTransactions(s);if(d){let A=0,k=[],I=async()=>{if(!w[A])return;let T=await this.connection.sendRawTransaction(w[A].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:w[A]}),p==null||p([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:k.map(T=>T.txId),signedTxs:w}}else{let A=[];for(let k=0;k<w.length;k+=1){let I=await this.connection.sendRawTransaction(w[k].serialize(),{skipPreflight:f});A.push(I)}return{txIds:A,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:o=[]}=b,i=Re(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:sr),n),a=Array.from(new Set([...this.lookupTableAddress,...o])),c=[];for(let w of a)s[w]===void 0&&c.push(new Yn(w));let u=await pi({connection:this.connection,address:c});for(let[w,A]of Object.entries(u))s[w]=A;let l=t?or(t):{instructions:[],instructionTypes:[]},m=await Kn(this.connection,this.blockhashCommitment),d=this.signers.reduce((w,A)=>E(C({},w),{[A.publicKey.toBase58()]:A}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(w=>{let A=[...f,w],k=t?[...l.instructions,...A]:A;if(f.length<12&&Qn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||Qn({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(w);else{if(f.length===0)throw Error("item ins too big");let I={};for(let T of[...new Set(a)])s[T]!==void 0&&(I[T]=s[T]);if(t&&Qn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Zn(T))}else{let T=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Zn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[w]}}),f.length>0){let A=[...new Set(f.map(k=>k.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&Qn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Zn(k))}else{let k=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Zn(k))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(w=>{w.some(A=>A.publicKey.equals(this.owner.publicKey))||w.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async w=>{var S;let{sequentially:A,onTxUpdate:k,recentBlockHash:I,skipPreflight:T=!0}=w||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),I&&(x.message.recentBlockhash=I)}),un(p),(S=this.owner)!=null&&S.isKeyPair){if(A){let x=[];for(let R of p){let B=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:D}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:D,lastValidBlockHeight:L,signature:B},"confirmed"),x.push(B)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(A){let R=0,B=[],L=async()=>{if(!x[R])return;let D=await this.connection.sendTransaction(x[R],{skipPreflight:T});B.push({txId:D,status:"sent",signedTx:x[R]}),k==null||k([...B]),R++,this.connection.onSignature(D,V=>{let H=B.findIndex(G=>G.txId===D);H>-1&&(B[H].status=V.err?"error":"success"),k==null||k([...B]),V.err||L()},"processed"),this.connection.getSignatureStatus(D)};return L(),{txIds:[],signedTxs:x}}else{let R=[];for(let B=0;B<x.length;B+=1){let L=await this.connection.sendTransaction(x[B],{skipPreflight:T});R.push(L)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var It=class{constructor(e){this._owner=e}get publicKey(){return It.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return It.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return It.isKeyPair(this._owner)}get isPublicKey(){return It.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!It.isKeyPair(e)}};function di(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var ca=r=>typeof r=="number";function la(r,e,t){let n=ca(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()<=n}function ma(r,e,t){let n=ca(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()>n}import{PublicKey as me}from"@solana/web3.js";var da=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),pa=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Jn=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Fy=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Ey=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),yi=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),fa=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Dy=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ya=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ba=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Wy=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),qy=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),vl=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Vl=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Fl=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),El=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),ga=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Uy=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Gy=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Dl=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Wl=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),ql=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),eo={IDO_PROGRAM_ID_V1:vl,IDO_PROGRAM_ID_V2:Vl,IDO_PROGRAM_ID_V3:Fl,IDO_PROGRAM_ID_V4:El};var Xy={SERUM_MARKET:me.default,OPENBOOK_MARKET:new me("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:me.default,FarmV3:new me("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new me("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new me("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new me("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new me("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new me("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new me("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Dl,CREATE_CPMM_POOL_AUTH:Wl,CREATE_CPMM_POOL_FEE_ACC:ql,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Ul}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gl}from"@solana/spl-token";function Ae(r,e,t){return ae([r.toBuffer(),(t!=null?t:Gl).toBuffer(),e.toBuffer()],new Ul("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Bt from"bn.js";var to=1e4;function fe(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let o=E(C({},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,s=new Bt(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===to){let c=new Bt(i.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=$t(r.mul(new Bt(to)),new Bt(to-i.transferFeeBasisPoints)),u=new Bt(i.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=$t(l.mul(new Bt(i.transferFeeBasisPoints)),new Bt(to)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=$t(r.mul(new Bt(i.transferFeeBasisPoints)),new Bt(to)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function xt(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function $t(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Bt(0))?t.add(new Bt(1)):t}var Oe={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://tokens.jup.ag/tokens?tags=lst,community",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}",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",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},gb=C({},Oe);var Aa="ray_tab_hash",bi="ray_req_hash",Xl=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(Aa);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(Aa,r)),r},ur=async n=>{var o=n,{logCount:r=1e3,removeLastLog:e}=o,t=Re(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(bi)||"[]").slice(0,r-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(E(C({},t),{time:Date.now(),session:Xl()}));try{localStorage.setItem(bi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(bi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return ur(E(C({},t),{logCount:r,removeLastLog:!0}))}};var cr=ue("Raydium_Api"),gi=new Map;var lr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=wa.create({baseURL:this.urlConfigs.BASE_HOST||Oe.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return cr.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(cr.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&ur({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),cr.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&ur({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),cr.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Oe.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Oe.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Oe.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await wa.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||Oe.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Oe.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Oe.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Oe.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Oe.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:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Oe.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Oe.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>gi.has(s)?(n.push(gi.get(s)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Oe.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{gi.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&lt(t).toBase58(),n&&n!=="undefined"?lt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Oe.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Oe.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Oe.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Oe.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Oe.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Oe.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Oe.JITO})).data}};var mr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Pa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as Ki,TOKEN_PROGRAM_ID as nn,AccountLayout as Ln,TOKEN_2022_PROGRAM_ID as Pm}from"@solana/spl-token";import{PublicKey as Ar,SystemProgram as hm}from"@solana/web3.js";var Ai=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Se=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ue(t)}createTxBuilder(e){return this.scope.checkOwner(),new ar({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(Ai(e))}logInfo(...e){this.logger.info(Ai(e))}logAndCreateError(...e){let t=Ai(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as fm,createCloseAccountInstruction as ym,createTransferInstruction as bm,TOKEN_PROGRAM_ID as On}from"@solana/spl-token";import{PublicKey as gm,SystemProgram as Am}from"@solana/web3.js";import wm from"bn.js";import{PublicKey as Ma,Keypair as lm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as mm}from"@solana/spl-token";import dm from"bn.js";import{PublicKey as om}from"@solana/web3.js";import Ba,{isBN as xa}from"bn.js";import{bits as zl,BitStructure as $b,blob as Ql,Blob as Jb,cstr as eg,f32 as tg,f32be as ng,f64 as og,f64be as rg,greedy as ig,Layout as Yl,ns64 as sg,ns64be as ag,nu64 as jl,nu64be as ug,offset as cg,s16 as lg,s16be as mg,s24 as dg,s24be as pg,s32 as Hl,s32be as fg,s40 as yg,s40be as bg,s48 as gg,s48be as Ag,s8 as wg,seq as Zl,struct as Pg,Structure as $l,u16 as Jl,u16be as hg,u24 as kg,u24be as Tg,u32 as em,u32be as Ig,u40 as Bg,u40be as xg,u48 as Sg,u48be as Kg,u8 as tm,UInt as nm,union as Cg,Union as Rg,unionLayoutDiscriminator as Og,utf8 as Lg}from"@solana/buffer-layout";var dr=Yl,ha=$l;var wi=nm;var ka=tm,Et=Jl;var Pi=em;var Ta=jl;var We=Hl;var Ia=Zl;var ye=Ql;var hi=zl;var cn=class extends dr{constructor(t,n,o){super(t,o);this.blob=ye(t),this.signed=n}decode(t,n=0){let o=new Ba(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 Ba(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},pr=class extends dr{constructor(t){super(8,t);this._lower=hi(Pi(),!1),this._upper=hi(Pi(),!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 C(C({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function W(r){return new wi(1,r)}function qe(r){return new wi(4,r)}function h(r){return new cn(8,!1,r)}function J(r){return new cn(16,!1,r)}function Sa(r){return new cn(1,!0,r)}function Rn(r){return new cn(8,!0,r)}function Ka(r){return new cn(16,!0,r)}var fr=class extends dr{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 K(r){return new fr(ye(32),e=>new om(e),e=>e.toBuffer(),r)}function Ue(r){return new fr(ka(),rm,im,r)}function rm(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function im(r){return r?1:0}var ki=class extends ha{decode(e,t){return super.decode(e,t)}};function v(r,e,t){return new ki(r,e,t)}function X(r,e,t){let n,o=typeof e=="number"?e:xa(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=xa(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,s)},set(i,s,a){return s==="count"&&(n=a),Reflect.set(i,s,a)}});return Ia(r,o,t)}var Jt=v([K("mint"),K("owner"),h("amount"),qe("delegateOption"),K("delegate"),W("state"),qe("isNativeOption"),h("isNative"),h("delegatedAmount"),qe("closeAuthorityOption"),K("closeAuthority")]);function sm(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Ti(r,...e){if(!sm(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Ii(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Ca(r,e){Ti(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var br=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),St=(r,e)=>r<<32-e|r>>>e;var Qg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function am(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Bi(r){return typeof r=="string"&&(r=am(r)),Ti(r),r}var yr=class{clone(){return this._cloneInto()}},Yg={}.toString;function Ra(r){let e=n=>r().update(Bi(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function um(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,u=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+u,a,n)}var Oa=(r,e,t)=>r&e^~r&t,La=(r,e,t)=>r&e^r&t^e&t,gr=class extends yr{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=br(this.buffer)}update(e){Ii(this);let{view:t,buffer:n,blockLen:o}=this;e=Bi(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=br(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ii(this),Ca(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;um(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=br(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:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var cm=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]),en=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),tn=new Uint32Array(64),xi=class extends gr{constructor(){super(64,32,8,!1),this.A=en[0]|0,this.B=en[1]|0,this.C=en[2]|0,this.D=en[3]|0,this.E=en[4]|0,this.F=en[5]|0,this.G=en[6]|0,this.H=en[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)tn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=tn[m-15],p=tn[m-2],y=St(d,7)^St(d,18)^d>>>3,f=St(p,17)^St(p,19)^p>>>10;tn[m]=f+tn[m-7]+y+tn[m-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=St(a,6)^St(a,11)^St(a,25),p=l+d+Oa(a,c,u)+cm[m]+tn[m]|0,f=(St(n,2)^St(n,13)^St(n,22))+La(n,o,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=o,o=n,n=p+f|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+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,s,a,c,u,l)}roundClean(){tn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Na=Ra(()=>new xi);var mA=ue("Raydium_Util");function _a({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:s}of t.value){let a=Jt.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:Ae(r,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),o.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Ma.default,amount:new dm(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function st({fromPublicKey:r,programId:e=mm}){let t=lm.generate().publicKey.toBase58().slice(0,32);return{publicKey:pm(r,t,e),seed:t}}function pm(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),o=Na(n);return new Ma(o)}function Si(r){let{mint:e,tokenAccount:t,owner:n,programId:o=On}=r;return fm(t,e,n,o)}function Nt(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=On}=r;return ym(e,t,o,n,i)}async function Dt(r){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Jt.span,n),c=$(t).add(new wm(a)),u=st({fromPublicKey:o,programId:On});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[Am.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Jt.span,programId:On}),Si({mint:new gm(_e.address),tokenAccount:u.publicKey,owner:i,programId:On})],instructionTypes:[F.CreateAccount,F.InitAccount],endInstructionTypes:s?[]:[F.CloseAccount],endInstructions:s?[]:[Nt({tokenAccount:u.publicKey,payer:o,owner:i})]}}function no({source:r,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=On}){return bm(r,e,t,BigInt(String(n)),o,i)}var oo=class extends Se{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}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 Ae(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<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:nn},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Pm},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=_a({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=nn,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),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!o||o&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Ar(t.tokenProgram||nn),m=this.getAssociatedTokenAccount(n,new Ar(l)),d=(a?[]:this.tokenAccountRawInfos).filter(w=>w.accountInfo.mint.equals(n)&&(!i||w.pubkey.equals(m))).sort((w,A)=>w.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(o===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let w=Ki(s,m,s,n,l);if(u){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(w),p.instructionTypes.push(F.CreateATA);else if(!(A.owner.equals(l)&&Ln.decode(A.data).mint.equals(n)&&Ln.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(w),p.instructionTypes.push(F.CreateATA);if(n.equals(Y)&&o.amount){let A=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(f=o.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),o.amount&&(p.instructions.push(no({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:nn})),p.instructionTypes.push(F.TransferAmount))}return c||(p.endInstructions.push(Nt({owner:s,payer:o.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(F.CloseAccount)),{account:m,instructionParams:p}}else{let w=st({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(Ln.span),k=hm.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:w.seed,newAccountPubkey:w.publicKey,lamports:A+Number((g=(b=o.amount)==null?void 0:b.toString())!=null?g:0),space:Ln.span,programId:l});return p.instructions.push(k,Si({mint:n,tokenAccount:w.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(F.CreateAccount),p.instructionTypes.push(F.InitAccount),c||(p.endInstructions.push(Nt({owner:s,payer:o.payer||s,tokenAccount:w.publicKey,programId:l})),p.endInstructionTypes.push(F.CloseAccount)),{account:w.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=nn,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,s=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await Ki(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[F.CreateATA],i=u}return o&&Y.toBase58()===t.toBase58()&&(a.endInstructions=[Nt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[F.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:s=nn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new Ar(Y).equals(i)){let p=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=Ki(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(nn)&&Ln.decode(f.data).mint.equals(i)&&Ln.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[F.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=nn,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Ar(Y))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=l,p=Re(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=m,p=Re(m,["tokenAccount"]);c=d,u.addInstruction(p)}return C({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as qm}from"@solana/spl-token";import{PublicKey as be,SystemProgram as Um}from"@solana/web3.js";import{PublicKey as qa}from"@solana/web3.js";var Ci=v([W("instruction")]),Ri=v([W("instruction")]),km=v([h("rewardState"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardLastUpdateTime"),h("totalReward"),h("totalRewardEmissioned"),h("rewardClaimed"),h("rewardPerSecond"),J("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),h("rewardType"),X(h(),15,"padding")]),Tm=v([h("state"),h("nonce"),K("lpVault"),K("rewardVault"),K(),K(),h(),h(),h("totalReward"),J("perShareReward"),h("lastSlot"),h("perSlotReward")]),Im=v([h("state"),h("nonce"),K("lpVault"),K("rewardVaultA"),h("totalRewardA"),J("perShareRewardA"),h("perSlotRewardA"),W("option"),K("rewardVaultB"),ye(7),h("totalRewardB"),J("perShareRewardB"),h("perSlotRewardB"),h("lastSlot"),K()]),Bm=v([h(),h("state"),h("nonce"),h("validRewardTokenNum"),J("rewardMultiplier"),h("rewardPeriodMax"),h("rewardPeriodMin"),h("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(km,5,"rewardInfos"),K("creator"),K(),X(h(),32,"padding")]),va=new Proxy(Tm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(r,e,t)}}),Va=new Proxy(Im,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},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(r,e,t)}}),ro=new Proxy(Bm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var s;return E(C({},i),{rewardType:((s=Object.entries(on).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),xm=v([h("isSet"),h("rewardPerSecond"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardType")]),Oi=v([W("instruction"),h("nonce"),X(xm,5,"rewardTimeInfo")]),Li=v([W("instruction"),h("rewardReopenTime"),h("rewardEndTime"),h("rewardPerSecond")]),Ni=v([W("instruction"),h("isSet"),h("rewardPerSecond"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardType")]),UA=v([h("state"),K("id"),K("owner"),h("deposited"),X(h(),1,"rewardDebts")]),io=v([h("state"),K("id"),K("owner"),h("deposited"),X(J(),1,"rewardDebts"),h(""),h("voteLockedBalance"),X(h(),15)]),GA=v([h("state"),K("id"),K("owner"),h("deposited"),X(h(),2,"rewardDebts")]),Fa=v([h("state"),K("id"),K("owner"),h("deposited"),X(J(),2,"rewardDebts"),X(h(),17)]),Ea=v([h(),h("state"),K("id"),K("owner"),h("deposited"),X(J(),5,"rewardDebts"),X(h(),16)]),Je=v([W("instruction"),h("amount")]),Sm=v([K("mint"),K("grantAuthority"),h("baselineVoteWeightScaledFactor"),h("maxExtraLockupVoteWeightScaledFactor"),h("lockupSaturationSecs"),Sa("digitShift"),X(W(),7,"reserved1"),X(h(),7,"reserved2")]),Da=v([ye(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(W(),32,"reserved1"),X(Sm,4,"votingMints"),Rn("timeOffset"),W("bump"),X(W(),7,"reserved2"),X(h(),11,"reserved3")]),Km=v([Rn("startTime"),Rn("endTime"),W("kind"),X(W(),15,"reserved")]),Cm=v([X(Km,1,"lockup"),h("amountDeposited_native"),h("amountInitiallyLockedNative"),Ue("isUsed"),Ue("allowClawback"),W("votingMintConfigIdx"),X(W(),29,"reserved")]),Wa=v([ye(8),K("voterAuthority"),K("registrar"),X(Cm,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),X(W(),94,"reserved")]);var $A=ue("Raydium_farm_config"),Ua=new qa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ga=new qa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Xa={3:va,5:Va,6:ro},za={3:io,5:Fa,6:Ea},Mi=r=>[3,5,6].indexOf(r)!==-1,_i=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,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(s=i[e])==null?void 0:s.call(i)},on={"Standard SPL":0,"Option tokens":1},yt={[da.toString()]:3,[pa.toString()]:5,[Jn.toString()]:6};import{PublicKey as se,SystemProgram as ln,SYSVAR_RENT_PUBKEY as Lm,SYSVAR_CLOCK_PUBKEY as uo,TransactionInstruction as Fe}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Nm,TOKEN_PROGRAM_ID as mt,ASSOCIATED_TOKEN_PROGRAM_ID as Mm}from"@solana/spl-token";import wr from"bn.js";function vi(r,e,t){return ae([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],r)}function Vi(r,e){return ae([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],r)}function Fi(r,e){return ae([e.toBuffer()],r)}function Ei(r,e,t){return ae([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],r)}function Di(r,e,t){return ae([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],r)}function Wi(r,e,t,n){return ae([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}import at from"bn.js";var so=ue("Raydium.farm.util");function ao({programId:r,poolId:e,mint:t,type:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return o}function Ye({programId:r,poolId:e,owner:t,version:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return o}var Qa=({programId:r,poolId:e})=>ae([e.toBuffer()],r);function Ya(r){return{isSet:new at(1),rewardPerSecond:$(r.perSecond),rewardOpenTime:$(r.openTime),rewardEndTime:$(r.endTime),rewardType:$(on[r.rewardType])}}function qi(r){return $(r.endTime).sub($(r.openTime)).mul($(r.perSecond))}function Nn(r){let e=za[r];return e||so.logWithError("invalid version",r),e}function Rm(r){let e=Xa[r];return e||so.logWithError("invalid version",r),e}function Om(r,e,t,n){if(r.version===3||r.version===5){if(r.lastSlot.gte(new at(t)))return r;let o=new at(t).sub(r.lastSlot);r.lastSlot=new at(t);for(let i of r.rewardInfos){if(e.amount.eq(new at(0)))continue;let s=i.perSlotReward.mul(o);i.perShareReward=i.perShareReward.add(s.mul(new at(10).pow(new at(r.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(r.version===6)for(let o of r.rewardInfos){if(o.rewardState.eq(new at(0)))continue;let i=at.min(new at(n),o.rewardEndTime);if(o.rewardOpenTime.gte(i))continue;let a=i.sub(o.rewardLastUpdateTime).mul(o.rewardPerSecond),c=o.totalReward.sub(o.totalRewardEmissioned);c.lt(a)?(a=c,o.rewardLastUpdateTime=o.rewardLastUpdateTime.add(c.div(o.rewardPerSecond))):o.rewardLastUpdateTime=i,!e.amount.eq(new at(0))&&(o.accRewardPerShare=o.accRewardPerShare.add(a.mul(r.rewardMultiplier).div(e.amount)),o.totalRewardEmissioned=o.totalRewardEmissioned.add(a))}return r}async function yw({connection:r,farmPools:e,owner:t,config:n,chainTime:o}){let i=!1,s=!1,a=new at(10),c=[];for(let d of e){let p=ke(d);p.version===6?s=!0:i=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:Ye({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await ve(r,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=C({},u[g]),y==="state"){let w=Rm(p);(!b||!b.data||b.data.length!==w.span)&&so.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=w.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Jt.span)&&so.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=Jt.decode(b.data);else if(y==="ledger"){let w=Nn(p);b&&b.data&&(b.data.length!==w.span&&so.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=w.decode(b.data))}}let m=s||i?await r.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Om(u[d].state,u[d].lpVault,m,o));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new at(9)):a.pow(new at(15)),b=p.rewardInfos.map((g,w)=>{let A=y.rewardDebts[w];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(A)});u[d].wrapped=E(C({},u[d].wrapped),{pendingRewards:b})}return u}function bw(r,e=Date.now()){if(r.version===6){let t=r.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>la(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ma(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=r.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Ui(r,e,t,n){let o=await r.getAccountInfo(e);if(o===null)throw Error("registrar info check error");let s=Da.decode(o.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await r.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=Wa.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var _m=ue("Raydium_farm_instruction"),co={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 lo(r){let{version:e,id:t,ledger:n,programId:o,owner:i}=r,s={3:9,5:10}[e];s||_m.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Ci.span);Ci.encode({instruction:s},a);let c=[P({pubkey:t}),P({pubkey:n}),P({pubkey:i,isWritable:!1}),P({pubkey:ln.programId,isWritable:!1}),P({pubkey:Lm,isWritable:!1})];return{instruction:new Fe({programId:o,keys:c,data:a}),instructionType:F.FarmV3CreateLedger}}function ja(r){var n;let e=Buffer.alloc(Oi.span);Oi.encode({instruction:0,nonce:new wr(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...ti,P({pubkey:r.farmId}),P({pubkey:r.farmAuthority,isWritable:!1}),P({pubkey:r.lpVault}),P({pubkey:r.lpMint,isWritable:!1}),P({pubkey:r.lockVault}),P({pubkey:r.lockMint,isWritable:!1}),P({pubkey:(n=r.lockUserAccount)!=null?n:Me}),P({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let o of r.rewardInfo)t.push(P({pubkey:o.rewardMint,isWritable:!1}),P({pubkey:o.rewardVault}),P({pubkey:o.userRewardToken}));return{instruction:new Fe({programId:r.programId,keys:t,data:e}),instructionType:F.FarmV6Create}}function Ha(r){let e=Buffer.alloc(Ri.span);Ri.encode({instruction:5},e);let t=[P({pubkey:mt,isWritable:!1}),P({pubkey:r.id}),P({pubkey:r.authority,isWritable:!1}),P({pubkey:r.lpVault,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}),P({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Fe({programId:r.programId,keys:t,data:e}),instructionType:F.FarmV6CreatorWithdraw}}function vm(r,e,t,n,o,i,s,a,c,u,l,m,d){let p=v([W("depositEntryIndex"),h("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:mt,isSigner:!1,isWritable:!1},{pubkey:s,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:!1},{pubkey:jo,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...co.voterStakeRegistryDeposit,...f]);return new Fe({keys:y,programId:r,data:b})}function Vm(r,e,t,n){let o=v([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:ln.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([...co.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Fe({keys:i,programId:r,data:a})}function Fm(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=v([W("depositEntryIndex"),h("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:mt,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:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:jo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let w=Buffer.from([...co.voterStakeRegistryWithdraw,...g]);return new Fe({keys:b,programId:r,data:w})}function Em(r,e,t,n,o,i){let s=v([W("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:ln.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Fe({keys:a,programId:r,data:c})}function Dm(r,e,t,n,o,i,s,a){let c=v([W("voterBump"),W("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:ln.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:jo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...co.voterStakeRegistryCreateVoter,...l]);return new Fe({keys:u,programId:r,data:m})}function Wm(r,e,t,n,o,i,s,a,c,u,l,m){let d=v([W("depositEntryIndex"),W("kind"),W("option"),h("startTs"),qe("periods"),Ue("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:ln.programId,isSigner:!1,isWritable:!1},{pubkey:mt,isSigner:!1,isWritable:!1},{pubkey:Mm,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...co.voterStakeRegistryCreateDepositEntry,...y]);return new Fe({keys:p,programId:r,data:f})}async function Nw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=vi(n,o,i).publicKey,l=Ye({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new wr(0)))throw Error("user do not has new stake amount");let y=Vi(e,a).publicKey,f=Fi(e,a).publicKey,{publicKey:b,nonce:g}=Ei(n,u,s),w=Ae(b,y,c).publicKey,{publicKey:A,nonce:k}=Di(n,u,s),I=Wi(t,o,i,s).publicKey,T=[],S=Ae(s,y,c).publicKey;if(await r.getAccountInfo(S)===null&&T.push(Nm(s,S,s,y)),await r.getAccountInfo(b)===null){let D=Em(t,o,s,i,s,I);T.push(D,Dm(n,u,b,A,s,s,g,k))}let{index:B,isInit:L}=await Ui(r,u,b,y);return L||T.push(Wm(n,u,b,w,s,s,y,B,0,void 0,0,!1)),T.push(vm(n,u,b,w,S,s,l,a,y,f,e,B,p),Vm(n,u,b,A)),T}async function Mw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=vi(n,o,i).publicKey,l=Ye({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data);if(d.voteLockedBalance.eq(new wr(0)))throw Error("user has vote locked balance = 0");let p=Vi(e,a).publicKey,y=Fi(e,a).publicKey,{publicKey:f}=Ei(n,u,s),b=Ae(f,p,c).publicKey,{publicKey:g}=Di(n,u,s),w=Wi(t,o,i,s).publicKey,A=[],{index:k,isInit:I}=await Ui(r,u,f,p);if(!I)throw Error("deposit entry index check error");return A.push(Fm(n,u,f,s,w,g,b,Ae(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),A}function Gi({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(Li.span);Li.encode({instruction:3,rewardReopenTime:$(o.openTime),rewardEndTime:$(o.endTime),rewardPerSecond:$(o.perSecond)},i);let s=[P({pubkey:mt,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:r,isWritable:!1,isSigner:!0})];return new Fe({programId:n.programId,keys:s,data:i})}function Xi({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(Ni.span);Ni.encode({instruction:4,isSet:new wr(1),rewardPerSecond:$(o.perSecond),rewardOpenTime:$(o.openTime),rewardEndTime:$(o.endTime),rewardType:$(on[o.rewardType])},i);let s=[...ti,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:o.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:r,isWritable:!1,isSigner:!0})];return new Fe({programId:t.programId,keys:s,data:i})}function _w(r){let{farmInfo:e,farmKeys:t,version:n,lpAccount:o,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=r,[l,m]=[new se(e.programId),new se(e.id)],d=Ye({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(Je.span);Je.encode({instruction:a,amount:c},p);let y=n===6?[P({pubkey:mt,isWritable:!1}),...u?[P({pubkey:ln.programId,isWritable:!1})]:[],P({pubkey:m}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:new se(t.lpVault)}),P({pubkey:d}),P({pubkey:s,isWritable:!1,isSigner:!0}),P({pubkey:o})]:[P({pubkey:m}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:d}),P({pubkey:s,isWritable:!1,isSigner:!0}),P({pubkey:o}),P({pubkey:new se(t.lpVault)}),P({pubkey:i[0]}),P({pubkey:new se(t.rewardInfos[0].vault)}),P({pubkey:uo,isWritable:!1}),P({pubkey:mt,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(P({pubkey:i[f]})),y.push(P({pubkey:new se(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(P({pubkey:new se(t.rewardInfos[f].vault)})),y.push(P({pubkey:i[f]}));return new Fe({programId:l,keys:y,data:p})}function mo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new se(e.programId),new se(e.id)],u=Ye({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Je.span);Je.encode({instruction:2,amount:$(s)},l);let m=[P({pubkey:mt,isWritable:!1}),P({pubkey:c}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:new se(t.lpVault)}),P({pubkey:u}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new se(t.rewardInfos[d].vault)})),m.push(P({pubkey:o[d]}));return new Fe({programId:a,keys:m,data:l})}function po(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new se(e.programId),new se(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Je.span);Je.encode({instruction:12,amount:$(s)},m);let d=[P({pubkey:u}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new se(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new se(t.rewardInfos[0].vault)}),P({pubkey:uo,isWritable:!1}),P({pubkey:mt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:o[p]})),d.push(P({pubkey:new se(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Fe({programId:c,keys:d,data:m})}function fo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new se(e.programId),new se(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Je.span);Je.encode({instruction:11,amount:$(s)},m);let d=[P({pubkey:u}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new se(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new se(t.rewardInfos[0].vault)}),P({pubkey:uo,isWritable:!1}),P({pubkey:mt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Fe({programId:c,keys:d,data:m})}function Za(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new se(e.programId),new se(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Je.span);Je.encode({instruction:10,amount:$(s)},m);let d=[P({pubkey:u}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new se(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new se(t.rewardInfos[0].vault)}),P({pubkey:uo,isWritable:!1}),P({pubkey:mt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Fe({programId:c,keys:d,data:m})}function $a(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new se(e.programId),new se(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Je.span);Je.encode({instruction:11,amount:$(s)},m);let d=[P({pubkey:u}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new se(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new se(t.rewardInfos[0].vault)}),P({pubkey:uo,isWritable:!1}),P({pubkey:mt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:o[p]})),d.push(P({pubkey:new se(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Fe({programId:c,keys:d,data:m})}function Ja(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new se(e.programId),new se(e.id)],u=Ye({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Je.span);Je.encode({instruction:1,amount:$(s)},l);let m=[P({pubkey:mt,isWritable:!1}),P({pubkey:ln.programId,isWritable:!1}),P({pubkey:c}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:new se(t.lpVault)}),P({pubkey:u}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new se(t.rewardInfos[d].vault)})),m.push(P({pubkey:o[d]}));return new Fe({programId:a,keys:m,data:l})}var yo=class extends Se{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Me)){let n=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:qi(E(C({},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=Jn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new be(e.lpMint.address),lockInfo:{lockMint:Ua,lockVault:Ga},version:6,rewardInfos:t,programId:o},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=st({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(ro.span);c.addInstruction({instructions:[Um.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:ro.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Qa({programId:new be(a.programId),poolId:l.publicKey}),y=ao({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let I of a.rewardInfos){I.openTime>=I.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",I.openTime.toString()),isNaN(on[I.rewardType])&&this.logAndCreateError("rewardType error",I.rewardType),Number(I.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",I.perSecond),f.push(Ya(I));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:I,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=I.mint.equals(Me)?new be(_e.address):I.mint;b.push({rewardMint:x,rewardVault:ao({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({mint:new be(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});w&&c.addInstruction(w),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:k}=ja({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[A],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o}){var b;let i=yt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(Me)?new be(_e.address):n.mint,l=a.rewardInfos.findIndex(g=>new be(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:Me,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Gi({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[F.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o}){var l;let i=yt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Me)?new be(_e.address):m.mint,p=a.rewardInfos.findIndex(A=>new be(A.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Me,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let w=Gi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[w],instructionTypes:[F.FarmV6Restart]})}return u.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i}=e,s=yt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=o.mint.equals(Me)?new be(_e.address):o.mint,m=ao({programId:new be(n.programId),poolId:new be(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:o,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,u.addInstruction({instructions:[Xi({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:o})],instructionTypes:[F.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i}=e,s=yt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of o){let m=l.mint.equals(Me)?new be(_e.address):l.mint,d=ao({programId:new be(n.programId),poolId:new be(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Xi({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:E(C({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[F.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=yt[d];Mi(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new be(n.programId),new be(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=Ye({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),w=this.createTxBuilder();w.addCustomComputeBudget(l);let A={};for(let V of this.scope.account.tokenAccounts)if(a){let H=Ae(this.scope.ownerPubKey,V.mint,V.programId).publicKey;V.publicKey&&H.equals(V.publicKey)&&(A[V.mint.toString()]=V.publicKey)}else A[V.mint.toString()]=V.publicKey;let k=b.lpMint,I=A[k.address];I||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let V of m){let H=s&&V.mint.address===Y.toString(),G=A[V.mint.address];if(!G){let{account:q,instructionParams:$e}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:V.mint.programId,mint:new be(V.mint.address),notUseTokenAccount:H,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!H,associatedOnly:H?!1:a,checkCreateATAOwner:c});G=q,$e&&w.addInstruction($e)}A[V.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Nn(p).decode(x.data)),n.programId!==Jn.toString()&&!S){let{instruction:V,instructionType:H}=lo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[V],instructionTypes:[H]})}let R=_i({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let B={amount:$(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(V=>new be(V))},L=p===6?Ja(B):p===5?$a(B):Za(B),D={3:F.FarmV3Deposit,5:F.FarmV5Deposit,6:F.FarmV6Deposit};return w.addInstruction({instructions:[L],instructionTypes:[D[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=yt[n.programId];Mi(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(c){let B=Ae(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&B.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=Ye({programId:new be(n.programId),poolId:new be(n.id),owner:this.scope.ownerPubKey,version:p}),B=await this.scope.connection.getAccountInfo(R);if(B)Nn(p).decode(B.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:D}=lo({id:new be(y.id),programId:new be(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[D]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:B})}let g=y.lpMint.address,w=s&&g===Y.toString(),A=b[g.toString()];if(!A){let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new be(g),notUseTokenAccount:w,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:w?!1:c,checkCreateATAOwner:u});A=R,B&&f.addInstruction(B)}b[g.toString()]=A;let k=[];for(let R of d){let B=s&&R.mint.address===Y.toString(),L=b[R.mint.address];if(!L){let{account:D,instructionParams:V}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new be(R.mint.address),notUseTokenAccount:B,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!B,associatedOnly:B?!1:c,checkCreateATAOwner:u});L=D,V&&f.addInstruction(V)}b[R.mint.address]=L,k.push(L)}let I=_i({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});I&&this.logAndCreateError(I);let T={amount:$(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new be(R))},S=p===6?mo(T):p===5?po(T):fo(T),x={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let o=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=yt[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Me.toString()?new be(_e.address):t),a=o.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Me,u=this.createTxBuilder(),l;if(t.equals(Me)){let y=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:qi(E(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new O(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[qm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[F.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Ha({programId:o.programId,id:o.id,authority:o.authority,lpVault:o.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=Ae(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>E(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:w}=y,A=yt[f],k=b.address,I=n&&k===Y.toString(),T=m[k];if(!T){let{account:D,instructionParams:V}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new be(k),notUseTokenAccount:I,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:I?!1:i,checkCreateATAOwner:s});T=D,V&&l.addInstruction(V)}m[k.toString()]=T;let S=[];for(let D of g){let V=n&&D.mint.address===Y.toString(),H=m[D.mint.address];if(!H){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new be(D.mint.address),notUseTokenAccount:V,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!V,associatedOnly:V?!1:i,checkCreateATAOwner:s});H=G,q&&l.addInstruction(q)}m[D.mint.address]=H,S.push(H)}let x=p[w],R={amount:ft,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(D=>new be(D))},B=A===6?mo(R):A===5?po(R):fo(R),L={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};l.addInstruction({instructions:[B],instructionTypes:[L[A]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as He}from"@solana/web3.js";import{AccountLayout as Od,NATIVE_MINT as Vu,TOKEN_PROGRAM_ID as Vn}from"@solana/spl-token";var rP=v([qe("mintAuthorityOption"),K("mintAuthority"),h("supply"),W("decimals"),W("isInitialized"),qe("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Gm}from"@solana/web3.js";import{MintLayout as eu,TOKEN_PROGRAM_ID as Xm}from"@solana/spl-token";var fP=async({connection:r,mint:e})=>{let t=await r.getAccountInfo(new Gm(e));return!t||t.data.length!==eu.span?void 0:eu.decode(t.data)},yP=({mint:r,decimals:e,programId:t=Xm,logoURI:n="",priority:o=3})=>{let i=r.toBase58().substring(0,6);return{address:r.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:o}},Pr=r=>new Be({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),bo=o=>{var i=o,{amount:r,isRaw:e,name:t}=i,n=Re(i,["amount","isRaw","name"]);return new ge(new Be({mint:lt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};function bP(r){return r.address===Lt.address?_e:r}function gP(r){return r.address===_e.address?Lt:r}var et=o=>{var i=o,{address:r,programId:e,decimals:t}=i,n=Re(i,["address","programId","decimals"]);return C({chainId:101,address:lt(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},rn=r=>r?E(C({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:E(C({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:E(C({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as vn,ASSOCIATED_TOKEN_PROGRAM_ID as id}from"@solana/spl-token";import{PublicKey as we,TransactionInstruction as Wt,SystemProgram as uu,SYSVAR_RENT_PUBKEY as sd}from"@solana/web3.js";var zi=v([W("instruction"),h("amountIn"),h("minAmountOut")]),Qi=v([W("instruction"),h("maxAmountIn"),h("amountOut")]),CP=v([W("instruction"),W("nonce")]),Yi=v([W("instruction"),W("nonce"),h("startTime")]),go=v([h("status"),h("nonce"),h("maxOrder"),h("depth"),h("baseDecimal"),h("quoteDecimal"),h("state"),h("resetFlag"),h("minSize"),h("volMaxCutRatio"),h("amountWaveRatio"),h("baseLotSize"),h("quoteLotSize"),h("minPriceMultiplier"),h("maxPriceMultiplier"),h("systemDecimalValue"),h("minSeparateNumerator"),h("minSeparateDenominator"),h("tradeFeeNumerator"),h("tradeFeeDenominator"),h("pnlNumerator"),h("pnlDenominator"),h("swapFeeNumerator"),h("swapFeeDenominator"),h("baseNeedTakePnl"),h("quoteNeedTakePnl"),h("quoteTotalPnl"),h("baseTotalPnl"),h("poolOpenTime"),h("punishPcAmount"),h("punishCoinAmount"),h("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),h("swapBase2QuoteFee"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),h("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),h("lpReserve"),X(h(),3,"padding")]),zm=v([h("accountType"),h("status"),h("nonce"),h("maxOrder"),h("depth"),h("baseDecimal"),h("quoteDecimal"),h("state"),h("resetFlag"),h("minSize"),h("volMaxCutRatio"),h("amountWaveRatio"),h("baseLotSize"),h("quoteLotSize"),h("minPriceMultiplier"),h("maxPriceMultiplier"),h("systemDecimalsValue"),h("abortTradeFactor"),h("priceTickMultiplier"),h("priceTick"),h("minSeparateNumerator"),h("minSeparateDenominator"),h("tradeFeeNumerator"),h("tradeFeeDenominator"),h("pnlNumerator"),h("pnlDenominator"),h("swapFeeNumerator"),h("swapFeeDenominator"),h("baseNeedTakePnl"),h("quoteNeedTakePnl"),h("quoteTotalPnl"),h("baseTotalPnl"),h("poolOpenTime"),h("punishPcAmount"),h("punishCoinAmount"),h("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),h("swapQuote2BaseFee"),h("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(h(),64,"padding")]),ji=v([W("instruction"),h("baseAmountIn"),h("quoteAmountIn"),h("fixedSide")]),Hi=v([W("instruction"),h("amountIn")]),RP={4:go,5:zm},tu=v([h("fee")]);import{PublicKey as Qm}from"@solana/web3.js";var _n=new Qm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),dn=5e4,Ym=v([h("x"),h("y"),h("price")]),jm=v([h("accountType"),h("status"),h("multiplier"),h("validDataCount"),X(Ym,dn,"DataElement")]);function Hm(r,e){return[0,dn-2]}function Zm(r){return[0,dn-2]}function $m(r){return[0,dn-2]}function Jm(r,e,t){let[n,o]=Hm(e,t),i=n,s=o,a=0,c=e*r.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=dn-2)return[a,a,!1];let u=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.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)s=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 Zi(r,e,t){let[n,o,i]=Jm(r,e,t);if(!i)return 0;if(n===o){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,c=r.DataElement[o].x,u=r.DataElement[o].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*r.multiplier*l/p}}function mn(r,e,t){return e*r.multiplier/t}function nu(r,e,t){return e*t/r.multiplier}function ed(r,e){let[t,n]=Zm(e),o=t,i=n,s=0,a=e;for(;o<i;){if(s=Math.floor((i+o)/2),s<=0||s>dn-2)return[s,s,!1];let c=r.DataElement[s].x,u=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)i=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];o=s+1}}return[s,s,!1]}function td(r,e){let[t,n]=$m(e),o=t,i=n,s=0,a=e;for(;o<=i;){if(s=Math.floor((i+o)/2),s<=0||s>=dn-2)return[s,s,!1];let c=r.DataElement[s].y,u=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)o=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function ou(r,e,t,n){let o=n?e+t:e-t,[i,s,a]=ed(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(o-c)*r.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-o)*r.multiplier/l),[y,f,!1,a]}}}function nd(r,e,t,n){let o=n?e-t:e+t,[i,s,a]=td(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-o)/r.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(o-p)/r.multiplier),[y,f,!1,a]}}}function od(r,e){let t=ou(r,e,0,!1);return t[3]?t[0]:0}function ru(r,e,t,n){let o=Zi(r,e,t),i=mn(r,e,o),s=mn(r,t,o),a=mn(r,n,o),c=!0,[u,l,m,d]=ou(r,i,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return nu(r,p,o)}}function iu(r,e,t,n){let o=Zi(r,e,t),i=mn(r,e,o),s=mn(r,t,o),a=mn(r,n,o),c=!1,[u,l,m,d]=nd(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=i-l;return nu(r,p,o)}}function rd(r){let e=jm.decode(r);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 su(r,e,t,n){let o=od(r,mn(r,e,Zi(r,e,t)))/r.multiplier;return n?o:1/o}var Mn=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(_n);e&&(this._layoutData=rd(e==null?void 0:e.data))}}};var au=ue("Raydium_liquidity_instruction");function cu(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:s}=r,a=Buffer.alloc(ji.span);ji.encode({instruction:3,baseAmountIn:$(o),quoteAmountIn:$(i),fixedSide:s==="base"?ft:Zs},a);let c=[P({pubkey:vn,isWritable:!1}),P({pubkey:new we(e.id)}),P({pubkey:new we(t.authority),isWritable:!1}),P({pubkey:new we(t.openOrders),isWritable:!1}),P({pubkey:new we(t.targetOrders)}),P({pubkey:new we(e.lpMint.address)}),P({pubkey:new we(t.vault.A)}),P({pubkey:new we(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(P({pubkey:_n})),c.push(P({pubkey:new we(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new we(t.marketEventQueue),isWritable:!1})),new Wt({programId:new we(e.programId),keys:c,data:a})}function $i(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:o}=r,i=ke(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Hi.span);Hi.encode({instruction:4,amountIn:$(o)},a);let c=[P({pubkey:vn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.mintLp.address}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return s===5?c.push(P({pubkey:_n})):(c.push(P({pubkey:i.id})),c.push(P({pubkey:i.id}))),c.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks})),new Wt({programId:i.programId,keys:c,data:a})}return new Wt({programId:i.programId,keys:[]})}function lu({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:w,openTime:A,coinAmount:k,pcAmount:I,ammConfigId:T,feeDestinationId:S}){let x=v([W("instruction"),W("nonce"),h("openTime"),h("pcAmount"),h("coinAmount")]),R=[{pubkey:vn,isSigner:!1,isWritable:!1},{pubkey:id,isSigner:!1,isWritable:!1},{pubkey:uu.programId,isSigner:!1,isWritable:!1},{pubkey:ot,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:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],B=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:w,openTime:A,coinAmount:k,pcAmount:I},B),{instruction:new Wt({keys:R,programId:r,data:B}),instructionType:F.AmmV4CreatePool}}function zP(r){let e=v([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[P({pubkey:new we(r.id),isWritable:!1}),P({pubkey:new we(r.authority),isWritable:!1}),P({pubkey:new we(r.openOrders),isWritable:!1}),P({pubkey:new we(r.vault.A),isWritable:!1}),P({pubkey:new we(r.vault.B),isWritable:!1}),P({pubkey:new we(r.mintLp.address),isWritable:!1}),P({pubkey:new we(r.marketId),isWritable:!1}),P({pubkey:new we(r.marketEventQueue),isWritable:!1})];return new Wt({programId:new we(r.programId),keys:n,data:t})}function ad({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},o){let i=ke(r),s=Buffer.alloc(zi.span);zi.encode({instruction:9,amountIn:$(t),minAmountOut:$(n)},s);let a=[P({pubkey:vn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders})];return o===4&&a.push(P({pubkey:i.targetOrders})),a.push(P({pubkey:i.vault.A}),P({pubkey:i.vault.B})),o===5&&a.push(P({pubkey:_n})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new Wt({programId:i.programId,keys:a,data:s})}function ud({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},o){let i=ke(r),s=Buffer.alloc(Qi.span);Qi.encode({instruction:11,maxAmountIn:$(t),amountOut:$(n)},s);let a=[P({pubkey:vn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return o===5&&a.push(P({pubkey:_n})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Wt({programId:i.programId,keys:a,data:s})}function hr(r){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return ad(E(C({},a),{amountIn:o,minAmountOut:i}),t);if(s==="out")return ud(E(C({},a),{maxAmountIn:o,amountOut:i}),t);au.logWithError("invalid params","params",r)}throw au.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function QP({poolKeys:r,userKeys:e,startTime:t}){let n=Buffer.alloc(Yi.span);Yi.encode({instruction:0,nonce:5,startTime:$(t)},n);let o=ke(r),i=[P({pubkey:vn,isWritable:!1}),P({pubkey:uu.programId,isWritable:!1}),P({pubkey:sd,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.openOrders}),P({pubkey:o.mintLp.address}),P({pubkey:o.mintA.address,isWritable:!1}),P({pubkey:o.mintB.address,isWritable:!1}),P({pubkey:o.vault.A,isWritable:!1}),P({pubkey:o.vault.B,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.targetOrders}),P({pubkey:e.lpTokenAccount}),P({pubkey:o.id,isWritable:!1}),P({pubkey:o.marketProgramId,isWritable:!1}),P({pubkey:o.marketId,isWritable:!1}),P({pubkey:e.payer,isSigner:!0})];return new Wt({programId:o.programId,keys:i,data:n})}function mu({poolKeys:r}){let e=v([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[P({pubkey:new we(r.id),isWritable:!1}),P({pubkey:new we(r.authority),isWritable:!1}),P({pubkey:new we(r.openOrders),isWritable:!1}),P({pubkey:new we(r.vault.A),isWritable:!1}),P({pubkey:new we(r.vault.B),isWritable:!1}),P({pubkey:new we(r.mintLp.address),isWritable:!1}),P({pubkey:new we(r.marketId),isWritable:!1}),P({pubkey:new we(r.marketEventQueue),isWritable:!1})];return{instruction:new Wt({programId:new we(r.programId),keys:n,data:t})}}import{ASSOCIATED_TOKEN_PROGRAM_ID as Ou,TOKEN_2022_PROGRAM_ID as sn,TOKEN_PROGRAM_ID as Ge}from"@solana/spl-token";import{Keypair as ss,PublicKey as U,SystemProgram as Io,TransactionInstruction as Ct}from"@solana/web3.js";import Lu from"bn.js";import Pd from"bn.js";function du(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function jP(r){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,r,!1),new Uint8Array(e)}function HP(r){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,r,!1),new Uint8Array(e)}function kr(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Ji(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function es(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function Ao(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function pu(r,e){return Ao(r,e)?null:Ji(r,e)}function fu(r,e){return Ao(r,e)?null:es(r,e)}var cd=Buffer.from("amm_config","utf8"),ld=Buffer.from("pool","utf8"),md=Buffer.from("pool_vault","utf8"),dd=Buffer.from("pool_reward_vault","utf8"),yu=Buffer.from("position","utf8"),pd=Buffer.from("tick_array","utf8"),fd=Buffer.from("operation","utf8"),yd=Buffer.from("pool_tick_array_bitmap_extension","utf8"),bd=Buffer.from("observation","utf8");function eh(r,e){return ae([cd,du(e)],r)}function bu(r,e,t,n){return ae([ld,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function ts(r,e,t){return ae([md,e.toBuffer(),t.toBuffer()],r)}function gu(r,e,t){return ae([dd,e.toBuffer(),t.toBuffer()],r)}function Pe(r,e,t){return ae([pd,e.toBuffer(),kr(t)],r)}function pn(r,e,t,n){return ae([yu,e.toBuffer(),kr(t),kr(n)],r)}function bt(r,e){return ae([yu,e.toBuffer()],r)}function Tr(r){return ae([Buffer.from("metadata","utf8"),Sn.toBuffer(),r.toBuffer()],Sn)}function wo(r){return ae([fd],r)}function ut(r,e){return ae([yd,e.toBuffer()],r)}function Au(r,e){return ae([bd,e.toBuffer()],r)}import gt from"bn.js";var de=new gt(0),dt=new gt(1),qt=new gt(-1),pt=new gt(1).shln(64),Ir=new gt(1).shln(128),ns=pt.sub(dt),Po=64,wu=Ir.subn(1),je=-443636,tt=-je,At=new gt("4295048016"),wt=new gt("79226673521066979257578248091"),Br=new gt("4295048017"),xr=new gt("79226673521066979257578248090"),Pu=16,hu="59543866431248",ku="184467440737095516",Tu="15793534762490258745",Sr=new gt(10).pow(new gt(6)),gd=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(gd||{}),oh={[500]:10,[3e3]:60,[1e4]:200},rh={version:6,liquidity:de,tickCurrent:0,feeGrowthGlobalX64A:de,feeGrowthGlobalX64B:de,protocolFeesTokenA:de,protocolFeesTokenB:de,swapInAmountTokenA:de,swapOutAmountTokenB:de,swapInAmountTokenB:de,swapOutAmountTokenA:de,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},Iu={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:[]},ih=new gt("18446744073700000000");var Ad=15,le=class{static async getTickArrays(e,t,n,o,i,s,a){let c=[],u=j.getTickArrayStartIndexByTick(o,i),l=j.getInitializedTickArrayInRange(s,a,i,u,Math.floor(Ad/2));for(let p=0;p<l.length;p++){let{publicKey:y}=Pe(t,n,l[p]);c.push(y)}let m=(await Tt(e,c)).map(p=>p!==null?ho.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=E(C({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,i,s),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,s);[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 s=Math.floor(e/le.tickCount(t)),a=n?j.searchLowBitFromStart(o,i,s-1,1,t):j.searchHightBitFromStart(o,i,s+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=Ve-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<Ve;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=Pe(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,s){let a=j.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(s)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<Ve;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=Pe(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(j.checkIsOutOfBoundary(e)){if(e>tt)return!1;let n=j.getTickArrayStartIndexByTick(je,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ve*e}};import ie from"bn.js";import{PublicKey as Kt}from"@solana/web3.js";import Te from"bn.js";var os=14,Ut=class{static maxTickInTickarrayBitmap(e){return e*Ve*fn}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(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=o?t-le.tickCount(n):t+le.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*Ve,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=pu(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=fu(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-le.tickCount(n)}}}},ko=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Ut.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=Ut.maxTickInTickarrayBitmap(e),n=-t;if(tt<=t)throw Error(`extensionTickBoundary check error: ${tt}, ${t}`);if(n<=je)throw Error(`extensionTickBoundary check error: ${n}, ${je}`);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:j.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=le.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:i,maxValue:s}=Ut.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=j.mergeTickArrayBitmap(e).shln(fn-1-a),u=Ao(512,c)?null:Ji(512,c);if(u!==null){let l=t-u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=Ao(512,c)?null:es(512,c);if(u!==null){let l=t+u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-le.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Ut.maxTickInTickarrayBitmap(t),o=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(o=fn-o),o}};import Mt from"bn.js";var To=class{static getfeeGrowthInside(e,t,n){let o=new Mt(0),i=new Mt(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Mt(0),a=new Mt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,pt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,pt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,pt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,pt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,pt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,o){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,pt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new Mt(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Mt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new Mt(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Mt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:i,epochInfo:s}){var b,g,w,A;let a=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),c=ee.getSqrtPriceX64FromTick(t.tickLower),u=ee.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=ce.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[fe(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),fe(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[fe(new Mt(new O(m.amountA.toString()).mul(l).toFixed(0)),(w=e.mintA.extensions)==null?void 0:w.feeConfig,s,!0),fe(new Mt(new O(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Bu}from"@solana/spl-token";var Ke=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,s=!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:y,sqrtPriceX64:f,feeAmount:b}=yn.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,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(qt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=Pe(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=yn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(qt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=Ke.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?ko.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=Pe(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=Pe(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/le.tickCount(e.tickSpacing)),o=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.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=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=Ut.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=ko.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<je||t>tt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,c,u;let s=[];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=E(C({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Kt(d)});if(p.tokenMint.equals(Kt.default))continue;if(n<=p.openTime.toNumber()||o.eq(de)){s.push(p);continue}let y=new Te(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),w=ne.mulDivFloor(f,p.emissionsPerSecondX64,pt),A=p.rewardTotalEmissioned.add(w);s.push(E(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let s=j.getTickArrayStartIndexByTick(i,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;return t>tt&&(t=le.getArrayStartIndex(tt,e)+le.tickCount(e)),n<je&&(n=le.getArrayStartIndex(je,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/le.tickCount(t)*fn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await ve(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of o)s.accountInfo!==null&&(i[s.pubkey.toString()]=Su.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=Pe(c.programId,c.id,m);i.push({pubkey:d}),o[d.toString()]=c.id}}let s=await ve(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=ho.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=E(C({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.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 s)u.push(bt(p,d).publicKey);let l=await Tt(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=Kr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),w=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:k}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,w.tickSqrtPriceX64,p.liquidity,!1),I=1/(1-Math.sqrt(Math.sqrt(g.price.div(w.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:w.price,amountA:A,amountB:k,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=>E(C({},x),{pendingReward:new Te(0)})),leverage:I,tokenFeeAmountA:new Te(0),tokenFeeAmountB:new Te(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await Tt(t,d,{batchRequest:o}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=ho.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let w=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[w].toString()],I=y[m[A].toString()],T=k.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=I.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await To.GetPositionFees(f,g,T,S),B=await To.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Te(0))?x:new Te(0),g.tokenFeeAmountB=R.gte(new Te(0))?R:new Te(0);for(let L=0;L<B.length;L++)g.rewardInfos[L].pendingReward=B[L].gte(new Te(0))?B[L]:new Te(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:s,priceLimit:a=new O(0),catchLiquidityInsufficient:c=!1}){var D;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?At.add(new Te(1)):wt.sub(new Te(1)):u=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=fe(i,m,o,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:w}=Ke.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((D=p.fee)!=null?D:de),u,c),A=fe(f,d,o,!1),k=ee.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),I=l?k:new O(1).div(k),T=f.mul(new Te(Math.floor((1-s)*1e10))).div(new Te(1e10)),S=fe(T,d,o,!1),x=l?e.currentPrice:new O(1).div(e.currentPrice),R=new O(I).sub(x).abs(),B=x,L=new Qe(new O(R).mul(10**15).toFixed(0),new O(B).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:xt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:I,priceImpact:L,fee:w,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Be(E(C({},u),{mint:u.address,isToken2022:u.programId===Bu.toBase58()})),new Be(E(C({},l),{mint:l.address,isToken2022:l.programId===Bu.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:w,executionPrice:A,priceImpact:k,fee:I,remainingAccounts:T,executionPriceX64:S}=Ke.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Kt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=E(C({},y),{amount:new ge(m,y.amount),fee:y.fee===void 0?void 0:new ge(m,y.fee)}),R=E(C({},f),{amount:new ge(d,f.amount),fee:f.fee===void 0?void 0:new ge(d,f.fee)}),B=E(C({},b),{amount:new ge(d,b.amount),fee:b.fee===void 0?void 0:new ge(d,b.fee)}),L=new rt({baseToken:m,denominator:new Te(10).pow(new Te(20+m.decimals)),quoteToken:d,numerator:w.mul(new O(10**(20+d.decimals))).toFixed(0)}),D=new rt({baseToken:m,denominator:new Te(10).pow(new Te(20+m.decimals)),quoteToken:d,numerator:A.mul(new O(10**(20+d.decimals))).toFixed(0)}),V=new ge(m,I);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:B,expirationTime:g,currentPrice:L,executionPrice:D,priceImpact:k,fee:V,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountOut:i,slippage:s,priceLimit:a=new O(0)}){var B;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?wt.sub(new Te(1)):At.add(new Te(1)):l=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=fe(i,u[n.toString()],o,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=Ke.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((B=m.fee)!=null?B:de),l),b=c?e.mintB.address:e.mintA.address,g=fe(d,u[b],o,!1),w=ee.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),A=c?w:new O(1).div(w),k=d.mul(new Te(Math.floor((1+s)*1e10))).div(new Te(1e10)),I=fe(k,u[b],o,!0),T=c?e.currentPrice:new O(1).div(e.currentPrice),S=new O(A).sub(T).abs(),x=T,R=new Qe(new O(S).mul(10**15).toFixed(0),new O(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:I,realAmountOut:m,expirationTime:xt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:R,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var y,f,b;let i=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-s,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:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f: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:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[lt(e.mintA.address).toString()],d=o[lt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),b=ee.getSqrtPriceX64FromTick(s),g=ee.getSqrtPriceX64FromTick(a),{amountSlippageA:w,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:I}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new O(w.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(A.toString()).div(new O(10).pow(y)).mul(d.value)),S=new O(k.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(I.toString()).div(new O(10).pow(y)).mul(d.value)),x=new O(1).div(T.add(S)),B=new O(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),L=3600*24*365,D=e.rewardDefaultInfos.map(V=>{var q,$e;let H=V.mint.decimals,G=o[V.mint.address];return c<((q=V.startTime)!=null?q:0)||c>(($e=V.endTime)!=null?$e:0)||!V.perSecond||!G||H===void 0?0:new O(G.value).mul(new O(V.perSecond).mul(L)).div(new O(10).pow(H)).mul(x).mul(100).toNumber()});return{feeApr:B,rewardsApr:D,apr:B+D.reduce((V,H)=>V+H,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,w;let l=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),m=ee.getSqrtPriceX64FromTick(n),d=ee.getSqrtPriceX64FromTick(o),p=a?1-s:1+s,y=fe(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Te(new O(y.amount.sub((w=y.fee)!=null?w:de).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Te(0);else if(l.lte(d)){let A=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:k}else b=t?new Te(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Ke.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:s,add:a}){var b,g,w,A;let c=ee.getSqrtPriceX64FromTick(n),u=ee.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(ee.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)],[y,f]=[fe(m.amountA.muln(l),(w=t.mintA.extensions)==null?void 0:w.feeConfig,e,!0),fe(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Kt(c.id));(await Tt(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=bn.decode(c.data))});let s=t.map(c=>ut(new Kt(c.programId),new Kt(c.id)).publicKey),a=await Ke.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>E(C({},c),{[u.id]:E(C({},n[u.id]),{id:new Kt(u.id),version:6,programId:new Kt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:E(C({},u.config),{id:new Kt(u.config.id),fundOwner:""}),currentPrice:new O(u.price),exBitmapInfo:a[ut(new Kt(u.programId),new Kt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber()})}),{})}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]}};function Gh({poolInfo:r,tickLower:e,tickUpper:t,amountA:n,amountB:o,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var A,k,I,T;let[u,l,m,d]=e<t?[e,t,n,o]:[t,e,o,n],p=ee.priceToSqrtPriceX64(new O(r.price),r.mintA.decimals,r.mintB.decimals),y=ee.getSqrtPriceX64FromTick(u),f=ee.getSqrtPriceX64FromTick(l),[b,g]=[fe(m,(A=r.mintA.extensions)==null?void 0:A.feeConfig,a,!c),fe(d,(k=r.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],w=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((I=b.fee)!=null?I:de),g.amount.sub((T=g.fee)!=null?T:de));return ce.getAmountsOutFromLiquidity({poolInfo:r,tickLower:e,tickUpper:t,liquidity:w,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var rs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function xu(r){return E(C({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:rs,week:rs,month:rs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:E(C({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(de)||(i=i.add(dt)),i}static mulDivFloor(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).add(n.sub(dt)).div(n)}static x64ToDecimal(e,t){return new O(e.toString()).div(O.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ie(e.mul(O.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ir).sub(t).mod(Ir)}};function Ee(r,e){return is(r.mul(e),64,256)}function wd(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function is(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ee=class{static sqrtPriceX64ToPrice(e,t,n){return ne.x64ToDecimal(e).pow(2).mul(O.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(O.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))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(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))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(de))return e;let i=t.shln(Po);if(o){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,dt,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return ne.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(Po);if(o)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,dt,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<je||e>tt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ie("18445821805675395072"):new ie("18446744073709551616");return(t&2)!=0&&(n=Ee(n,new ie("18444899583751176192"))),(t&4)!=0&&(n=Ee(n,new ie("18443055278223355904"))),(t&8)!=0&&(n=Ee(n,new ie("18439367220385607680"))),(t&16)!=0&&(n=Ee(n,new ie("18431993317065453568"))),(t&32)!=0&&(n=Ee(n,new ie("18417254355718170624"))),(t&64)!=0&&(n=Ee(n,new ie("18387811781193609216"))),(t&128)!=0&&(n=Ee(n,new ie("18329067761203558400"))),(t&256)!=0&&(n=Ee(n,new ie("18212142134806163456"))),(t&512)!=0&&(n=Ee(n,new ie("17980523815641700352"))),(t&1024)!=0&&(n=Ee(n,new ie("17526086738831433728"))),(t&2048)!=0&&(n=Ee(n,new ie("16651378430235570176"))),(t&4096)!=0&&(n=Ee(n,new ie("15030750278694412288"))),(t&8192)!=0&&(n=Ee(n,new ie("12247334978884435968"))),(t&16384)!=0&&(n=Ee(n,new ie("8131365268886854656"))),(t&32768)!=0&&(n=Ee(n,new ie("3584323654725218816"))),(t&65536)!=0&&(n=Ee(n,new ie("696457651848324352"))),(t&131072)!=0&&(n=Ee(n,new ie("26294789957507116"))),(t&262144)!=0&&(n=Ee(n,new ie("37481735321082"))),e>0&&(n=wu.div(n)),n}static getTickFromPrice(e,t,n){return ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(wt)||e.lt(At))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ie(t-64),o=wd(n,32,128),i=new ie("8000000000000000","hex"),s=0,a=new ie(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new ie(0))&&s<Pu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let u=a.shrn(32),m=o.add(u).mul(new ie(hu)),d=is(m.sub(new ie(ku)),64,128).toNumber(),p=is(m.add(new ie(Tu)),64,128).toNumber();return d==p?d:ee.getSqrtPriceX64FromTick(p).lte(e)?p:d}},gn=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let i=gn.getTickWithPriceAndTickspacing(e,t,n,o),s=ee.getSqrtPriceX64FromTick(i);return ee.sqrtPriceX64ToPrice(s,n,o)}},ce=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(de))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Po),s=t.sub(e);return o?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),dt,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");return o?ne.mulDivCeil(n,t.sub(e),pt):ne.mulDivFloor(n,t.sub(e),pt)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return o?ne.mulDivRoundingUp(a,dt,ns):a.shrn(Po)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,ns,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,o,!1),a=ce.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new ie(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,o,i),a=ce.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:s,amountB:a}}else return{amountA:new ie(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,s,a){let{amountA:c,amountB:u}=ce.getAmountsFromLiquidity(e,t,n,o,s),l=i?1+a:1-a,m=new ie(new O(c.toString()).mul(l).toFixed(0)),d=new ie(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:s,epochInfo:a,amountAddFee:c}){var w,A,k,I;let u=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),l=ee.getSqrtPriceX64FromTick(t),m=ee.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(u,l,m,o,s),[y,f]=[fe(p.amountA,(w=e.mintA.extensions)==null?void 0:w.feeConfig,a,c),fe(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,c)],[b,g]=[fe(new ie(new O(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),fe(new ie(new O(p.amountB.toString()).mul(d).toFixed(0)),(I=e.mintB.extensions)==null?void 0:I.feeConfig,a,c)];return{liquidity:o,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:xt(y.expirationTime,f.expirationTime)}}},yn=class{static swapCompute(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?At.add(dt):wt.sub(dt)),s){if(y.lt(At))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(wt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(de),g={amountSpecifiedRemaining:d,amountCalculated:de,sqrtPriceX64:m,tick:u>p?Math.min(p+le.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new ie(0)},w=p,A=n[p],k=0,I=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(de)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(A,g.tick,l,s,I),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Ke.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},w,s);if(!L.isExist){if(f)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")}w=L.nextStartIndex;let{publicKey:D}=Pe(e,t,w);R=D,A=n[w];try{x=j.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==w&&R&&(g.accounts.push(R),p=w),T.tickNext<je?T.tickNext=je:T.tickNext>tt&&(T.tickNext=tt),T.sqrtPriceNextX64=ee.getSqrtPriceX64FromTick(T.tickNext);let B;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?B=y:B=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=yn.swapStepCompute(g.sqrtPriceX64,B,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let L=x.liquidityNet;s&&(L=L.mul(qt)),g.liquidity=ce.addDelta(g.liquidity,L)}I=T.tickNext!=g.tick&&!s&&A.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=ee.getTickFromSqrtPriceX64(g.sqrtPriceX64);I=L!=g.tick&&!s&&A.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=le.nextInitializedTickArray(g.tick,l,s,o,i);S&&p!==T&&(g.accounts.push(Pe(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:de,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){let s={sqrtPriceX64Next:new ie(0),amountIn:new ie(0),amountOut:new ie(0),feeAmount:new ie(0)},a=e.gte(t),c=o.gte(de);if(c){let l=ne.mulDivFloor(o,Sr.sub(new ie(i.toString())),Sr);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(qt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromOutput(e,n,o.mul(qt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(o.mul(qt))&&(s.amountOut=o.mul(qt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=o.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new ie(i),Sr.sub(new ie(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ve=60,fn=512,j=class{static getTickArrayAddressByTick(e,t,n,o){let i=j.getTickArrayStartIndexByTick(n,o),{publicKey:s}=Pe(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=Ve)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=le.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)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ve,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*Ve,i=Math.floor(t/o)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Ve:e+t*Ve}static mergeTickArrayBitmap(e){let t=new Pd(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 s=Math.floor(o/(n*Ve));return[...j.searchLowBitFromStart(e,t,s-1,i,n),...j.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,fn,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=Pe(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<je||e>tt}static nextInitTick(e,t,n,o,i){if(le.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<Ve;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ve-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ve;){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=ee.getSqrtPriceX64FromTick(t),i=ee.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=gn.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,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=ee.getSqrtPriceX64FromTick(t),i=ee.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=gn.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new O(1).div(a)}}};var Ku=v([ye(8),W("bump"),Et("index"),K(""),qe("protocolFeeRate"),qe("tradeFeeRate"),Et("tickSpacing"),X(h(),8,"")]),hd=v([qe("blockTimestamp"),Rn("tickCumulative"),X(h(),4)]),Cu=v([ye(8),Ue("initialized"),h("recentEpoch"),Et("observationIndex"),K("poolId"),X(hd,100,"observations"),X(h(),4)]),kd=v([W("rewardState"),h("openTime"),h("endTime"),h("lastUpdateTime"),J("emissionsPerSecondX64"),h("rewardTotalEmissioned"),h("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),J("rewardGrowthGlobalX64")]),bn=v([ye(8),W("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),Et("tickSpacing"),J("liquidity"),J("sqrtPriceX64"),We("tickCurrent"),qe(),J("feeGrowthGlobalX64A"),J("feeGrowthGlobalX64B"),h("protocolFeesTokenA"),h("protocolFeesTokenB"),J("swapInAmountTokenA"),J("swapOutAmountTokenB"),J("swapInAmountTokenB"),J("swapOutAmountTokenA"),W("status"),X(W(),7,""),X(kd,3,"rewardInfos"),X(h(),16,"tickArrayBitmap"),h("totalFeesTokenA"),h("totalFeesClaimedTokenA"),h("totalFeesTokenB"),h("totalFeesClaimedTokenB"),h("fundFeesTokenA"),h("fundFeesTokenB"),h("startTime"),X(h(),15*4-3,"padding")]),Td=v([J("growthInsideLastX64"),h("rewardAmountOwed")]),Kr=v([ye(8),W("bump"),K("nftMint"),K("poolId"),We("tickLower"),We("tickUpper"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),h("tokenFeesOwedA"),h("tokenFeesOwedB"),X(Td,3,"rewardInfos"),X(h(),8,"")]),fk=v([ye(8),W("bump"),K("poolId"),We("tickLowerIndex"),We("tickUpperIndex"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),h("tokenFeesOwedA"),h("tokenFeesOwedB"),X(J(),3,"rewardGrowthInside"),X(h(),8,"")]),Id=v([We("tick"),Ka("liquidityNet"),J("liquidityGross"),J("feeGrowthOutsideX64A"),J("feeGrowthOutsideX64B"),X(J(),3,"rewardGrowthsOutsideX64"),X(qe(),13,"")]),ho=v([ye(8),K("poolId"),We("startTickIndex"),X(Id,Ve,"ticks"),W("initializedTickCount"),X(W(),115,"")]),Ru=v([ye(329),X(K(),100,"whitelistMints")]),Su=v([ye(8),K("poolId"),X(X(h(),8),os,"positiveTickArrayBitmap"),X(X(h(),8),os,"negativeTickArrayBitmap")]);Cu.span;var Nu=ue("Raydium_Clmm"),Rt={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],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]},xe=class{static createPoolInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=v([J("sqrtPriceX64"),h("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,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:Io.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let w=Buffer.from([...Rt.createPool,...g]);return new Ct({keys:b,programId:e,data:w})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:s,initialPriceX64:a,startTime:c}=e,[u,l]=[new U(o.address),new U(i.address)],{publicKey:m}=bu(t,s,u,l),{publicKey:d}=Au(t,m),{publicKey:p}=ts(t,m,u),{publicKey:y}=ts(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,u,p,new U(o.programId||Ge),l,y,new U(i.programId||Ge),ut(t,m).publicKey,a,c)];return{signers:[],instructions:f,instructionTypes:[F.CreateAccount,F.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B){let L=v([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),J("liquidity"),h("amountMaxA"),h("amountMaxB"),Ue("withMetadata"),W("optionBaseFlag"),Ue("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,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:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Io.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:Ou,isSigner:!1,isWritable:!1},{pubkey:Sn,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],H=Buffer.alloc(L.span);L.encode({tickLowerIndex:w,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},H);let G=Buffer.from([...Rt.openPosition,...H]);return new Ct({keys:V,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=ss.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(d,p,f),{publicKey:w}=Pe(d,p,b),{publicKey:A}=Ae(n.wallet,y,Ge),{publicKey:k}=Tr(y),{publicKey:I}=bt(d,y),{publicKey:T}=pn(d,p,o,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=ss.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(d,p,f),{publicKey:w}=Pe(d,p,b),{publicKey:A}=Ae(n.wallet,y,Ge),{publicKey:k}=Tr(y),{publicKey:I}=bt(d,y),{publicKey:T}=pn(d,p,o,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,u,s,a,c,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ut(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B){let L=v([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),J("liquidity"),h("amountMaxA"),h("amountMaxB"),Ue("withMetadata"),W("optionBaseFlag"),Ue("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,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:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Io.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:Ou,isSigner:!1,isWritable:!1},{pubkey:Sn,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],H=Buffer.alloc(L.span);L.encode({tickLowerIndex:w,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:new Lu(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},H);let G=Buffer.from([...Rt.openPosition,...H]);return new Ct({keys:V,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=ss.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(p,y,f),{publicKey:w}=Pe(p,y,b),{publicKey:A}=Ae(n.wallet,m,Ge),{publicKey:k}=Tr(m),{publicKey:I}=bt(p,m),{publicKey:T}=pn(p,y,o,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),o,i,f,b,s,a,c,u,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ut(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i){let s=v([]),a=[{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:Io.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...Rt.closePosition,...c]);return new Ct({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o}){let i=new U(e.programId),{publicKey:s}=Ae(n.wallet,o.nftMint,Ge),{publicKey:a}=bt(i,o.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,o.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[F.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w){let A=v([J("liquidity"),h("amountMaxA"),h("amountMaxB"),W("optionBaseFlag"),Ue("baseFlag")]),k=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,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:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...Rt.increaseLiquidity,...T]);return new Ct({keys:I,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Pe(c,u,l),{publicKey:p}=Pe(c,u,m),{publicKey:y}=Ae(o.wallet,n.nftMint,Ge),{publicKey:f}=bt(c,n.nftMint),{publicKey:b}=pn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ut(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Pe(c,u,l),{publicKey:p}=Pe(c,u,m),{publicKey:y}=Ae(o.wallet,n.nftMint,Ge),{publicKey:f}=bt(c,n.nftMint),{publicKey:b}=pn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ut(c,u).publicKey:void 0)],signers:[],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w){let A=v([J("liquidity"),h("amountMaxA"),h("amountMaxB"),W("optionBaseFlag"),Ue("baseFlag")]),k=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,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:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:new Lu(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...Rt.increaseLiquidity,...T]);return new Ct({keys:I,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A){let k=v([J("liquidity"),h("amountMinA"),h("amountMinB")]),I=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{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:s,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:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...I],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:w},S);let x=Buffer.from([...Rt.decreaseLiquidity,...S]);return new Ct({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Pe(u,l,m),{publicKey:y}=Pe(u,l,d),{publicKey:f}=Ae(o.wallet,n.nftMint,c),{publicKey:b}=bt(u,n.nftMint),{publicKey:g}=pn(u,l,n.tickLower,n.tickUpper),w=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)w.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(u,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),w,i,s,a,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ut(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[F.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g){let w=v([h("amount"),h("otherAmountThreshold"),J("sqrtPriceLimitX64"),Ue("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{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:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],I=Buffer.alloc(w.span);w.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},I);let T=Buffer.from([...Rt.swap,...I]);return new Ct({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,ut(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:i,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toBase58(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountB:o.tokenAccountA,b?o.tokenAccountA:o.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,u,n,s,a,c,!1,ut(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=v([h("openTime"),h("endTime"),J("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,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:Io.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:$(l),endTime:$(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Rt.initReward,...f]);return new Ct({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a=gu(i,s,o.mint).publicKey,c=wo(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(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:[F.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=v([W("rewardIndex"),J("emissionsPerSecondX64"),h("openTime"),h("endTime")]),y=[{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:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:$(l),endTime:$(m)},f);let b=Buffer.from([...Rt.setRewardEmissions,...f]);return new Ct({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(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 U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Nu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=wo(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[F.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,s,a){let c=v([W("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:s,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Rt.collectReward,...l]);return new Ct({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Nu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[F.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}};import{PublicKey as Kd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Cd}from"@solana/spl-token";import{PublicKey as xd}from"@solana/web3.js";import Mu from"bn.js";var as=new Mu(25),Cr=new Mu(1e4),Bd={4:3,5:3};var Sd=ue("Raydium_liquidity_serum");function _u({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=xd.createProgramAddressSync(i,r)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw Sd.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}import Bo from"bn.js";function Rr({programId:r}){let{publicKey:e}=ae([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function An({name:r,programId:e,marketId:t}){let{publicKey:n}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function Rd({programId:r,marketId:e}){let{publicKey:t}=ae([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function ls({programId:r}){return ae([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function vu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:c}){let u=An({name:"amm_associated_seed",programId:a,marketId:t}),l=An({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=ls({programId:a}),p=An({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=An({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=An({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Rd({programId:a,marketId:t}),g=An({name:"target_associated_seed",programId:a,marketId:t}),w=An({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=_u({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:w,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:A,lookupTableAccount:Kd.default,configId:Rr({programId:a})}}var us;async function Xk({connection:r,poolKeysList:e,config:t}){us||(us=new Mn({connection:r}),await us.initStableModelLayout());let n=e.map(s=>mu({poolKeys:s}));return(await ia(r,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=sa(s,"GetPoolData"),c=new Bo(Ft(a,"status")),u=Number(Ft(a,"coin_decimals")),l=Number(Ft(a,"pc_decimals")),m=Number(Ft(a,"lp_decimals")),d=new Bo(Ft(a,"pool_coin_amount")),p=new Bo(Ft(a,"pool_pc_amount")),y=new Bo(Ft(a,"pool_lp_supply")),f="0";try{f=Ft(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new Bo(f)}})}var cs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Or=r=>{let e={},t=Cd.toBase58();return Object.keys(r).map(n=>{let o=r[n],[i,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:et({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:et({address:s,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:cs,week:cs,month:cs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Rr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:et({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())})}}),e};import Xe from"bn.js";var xo=class extends Se{constructor(t){super(t);this.stableLayout=new Mn({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let s=new Xe(new O(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Pr(t[i?"mintB":"mintA"]),[c,u]=[new Xe(new O(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Xe(new O(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Xe(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:",s.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;s.isZero()||(d=m==="base"?er(s.mul(u),c):er(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=er(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Qe(new Xe(1)).add(o).mul(d).quotient,b=new ge(a,d),g=new ge(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,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:s,fixedSide:a,config:c,txVersion:u,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let w=await m.getCreatedTokenAccount({mint:new He(n.lpMint.address)}),A=[y,f],k=[b,g],I=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(A.reverse(),k.reverse(),I.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=A,[B,L]=k,[D,V]=I,H=o!=null?o:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),_t=await m.handleTokenAccount({side:"in",amount:D,mint:x.mint,tokenAccount:B,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=_t,$e=Re(_t,["tokenAccount"]);G.addInstruction($e);let In=await m.handleTokenAccount({side:"in",amount:V,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:kn}=In,an=Re(In,["tokenAccount"]);G.addInstruction(an);let Fo=await m.handleTokenAccount({side:"out",amount:0,mint:new He(n.lpMint.address),tokenAccount:w,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:zt}=Fo,Tn=Re(Fo,["tokenAccount"]);return G.addInstruction(Tn),G.addInstruction({instructions:[cu({poolInfo:n,poolKeys:H,userKeys:{baseTokenAccount:q,quoteTokenAccount:kn,lpTokenAccount:zt,owner:this.scope.ownerPubKey},baseAmountIn:D,quoteAmountIn:V,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5AddLiquidity:F.AmmV4AddLiquidity],lookupTableAddress:H.lookupTableAccount?[H.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),u===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=o!=null?o:await this.getAmmPoolKeys(n.id),[l,m,d]=[new He(n.mintA.address),new He(n.mintB.address),new He(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:w,checkCreateATAOwner:A}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:w,checkCreateATAOwner:A}),{tokenAccount:k}=x,I=Re(x,["tokenAccount"]);g.addInstruction(I);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:w,checkCreateATAOwner:A}),{tokenAccount:T}=R,S=Re(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[$i({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(c),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Vn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){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 b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||Ae(this.scope.ownerPubKey,q.accountInfo.mint,Vn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let w=g[t.lpMint.address];if(w===void 0)throw Error("find lp account error in trade accounts");let A=o.add(a!=null?a:new Xe(0)),k=t.mintA.address===Be.WSOL.mint.toString(),I=t.mintB.address===Be.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let q=yt[s.programId],$e=Ye({programId:new He(s.programId),poolId:new He(s.id),owner:this.scope.ownerPubKey,version:q}),kn,an=await this.scope.connection.getAccountInfo($e);if(an&&(kn=Nn(q).decode(an.data)),q!==6&&!kn){let{instruction:Qt,instructionType:Qr}=lo({id:new He(s.id),programId:new He(s.programId),version:q,ledger:$e,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Qt],instructionTypes:[Qr]})}let zt=[];for(let Qt of s.rewardInfos){let Qr=Qt.mint.address===Be.WSOL.mint.toString();if(g[Qt.mint.address])zt.push(g[Qt.mint.address]);else{let{account:xs,instructionParams:Ss}=await this.scope.account.getOrCreateTokenAccount({mint:new He(Qt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Qr,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});xs||this.logAndCreateError("farm reward account not found:",Qt.mint.address),Ss&&b.addInstruction(Ss),zt.push(xs)}}let Tn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],_t={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:Tn,lpAccount:w,rewardAccounts:zt},In=yt[s.programId],Fo=In===6?mo(_t):In===5?po(_t):fo(_t),lc={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};b.addInstruction({instructions:[Fo],instructionTypes:[lc[In]]})}let B=await this.getAmmPoolKeys(t.id),L=$i({poolInfo:t,poolKeys:B,userKeys:{lpTokenAccount:w,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity],lookupTableAddress:B.lookupTableAccount?[B.lookupTableAccount]:[]});let[D,V]=t.mintA.address===n.mintA.address?[T,x]:[x,T],H=await this.scope.clmm.getClmmPoolKeys(n.id),G=await xe.openPositionFromBaseInstructions(E(C({poolInfo:n,poolKeys:H,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:D,tokenAccountB:V},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:H.lookupTableAccount?[H.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var D;let b=u.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),g=u.useSOLBalance&&o.mint.equals(Vu),w=u.useSOLBalance&&i.mint.equals(Vu),A=this.createTxBuilder(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:b,amount:a}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=vu({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:B,instructionType:L}=lu(E(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:Ae(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:c,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[B],instructionTypes:[L]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=Rr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return tu.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:s}){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[y,f]=m,[b,g]=d,w=t.version===4,A;if(w)A=new O(f.toString()).div(10**g).div(new O(y.toString()).div(10**b));else{let V=su(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?A=new O(1e6).div(V*1e6):A=new O(V*1e6).div(1e6)}let k=n,I=new Xe(0),T=new Xe(0);if(!k.isZero())if(w){T=$t(k.mul(as),Cr);let V=k.sub(T),H=y.add(V);I=f.mul(V).div(H)}else{T=k.mul(new Xe(2)).div(new Xe(1e4));let V=k.sub(T);p==="quote"?I=new Xe(ru(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),V.toNumber())):I=new Xe(iu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),V.toNumber()))}let S=new Xe(new O(I.toString()).mul(1-s).toFixed(0)),x=I,R=S,B=new O(I.toString()).div(new O(k.sub(T).toString()).toFixed(0));!k.isZero()&&!I.isZero()&&(B=new O(I.toString()).div(10**g).div(new O(k.sub(T).toString()).div(10**b)));let L=A.sub(B).div(A).mul(100);return{amountOut:x,minAmountOut:R,currentPrice:A,executionPrice:B,priceImpact:L,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:i,slippage:s}){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:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new O(f.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new O(y.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 Xe(0),w=n;if(!w.isZero()){w.gt(f)&&(w=f.sub(new Xe(1)));let R=f.sub(w);g=y.mul(w).div(R).mul(Cr).div(Cr.sub(as))}let A=new Xe(new O(g.toString()).mul(1+s).toFixed(0)),k=g,I=A;this.logDebug("amountIn:",new O(k.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new O(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!w.isZero()&&(T=new O(w.toString()).div(10**m.decimals).div(new O(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.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(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(k.toString()),x=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:k,maxAmountIn:I,currentPrice:b,executionPrice:T,priceImpact:x}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===Y.toBase58(),w=y&&b.address===Y.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:d});m.addInstruction(T||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:I,outputTokenUseSolBalance:w,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[hr({version:x,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[x===4?F.AmmV4SwapBaseIn:F.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await ve(this.scope.connection,t.map(l=>({pubkey:new He(l)})),n),i={},s=[];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=go.decode(m.accountInfo.data);i[String(t[l])]=E(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await ve(this.scope.connection,s.map(l=>({pubkey:new He(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new Xe(Od.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]=E(C({},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=Or({[t]:n}),i=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as re}from"@solana/web3.js";import ct from"bn.js";import{AccountLayout as Fu,TOKEN_PROGRAM_ID as Eu}from"@solana/spl-token";var So=class extends Se{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var A;let{programId:t,owner:n=((A=this.scope.owner)==null?void 0:A.publicKey)||re.default,mint1:o,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new ct(new re(o.address).toBuffer()).gt(new ct(new re(i.address).toBuffer()))?[i,o,new O(1).div(a)]:[o,i,a],g=ee.priceToSqrtPriceX64(b,y.decimals,f.decimals),w=await xe.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(w),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:E(C({},w.address),{programId:t.toString(),id:w.address.poolId.toString(),mintA:y,mintB:f,openTime:c.toString(),vault:{A:w.address.mintAVault.toString(),B:w.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}},Iu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,w=n.useSOLBalance&&e.mintA.address===Y.toString(),A=n.useSOLBalance&&e.mintB.address===Y.toString(),[k,I]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new re(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new re(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let B=t||await this.getClmmPoolKeys(e.id),L=await xe.openPositionFromBaseInstructions({poolInfo:e,poolKeys:B,ownerInfo:E(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:C({},L.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,w=n.useSOLBalance&&e.mintA.address===Y.toBase58(),A=n.useSOLBalance&&e.mintB.address===Y.toBase58(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new re(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});k&&(b=k),f.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new re(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});T&&(g=T),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=t||await this.getClmmPoolKeys(e.id),R=await xe.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:x,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(R),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:R.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===Y.toString(),g=c.useSOLBalance&&t.mintB.address===Y.toString(),{account:w,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new re(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});w&&(y=w),p.addInstruction(A||{});let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new re(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(I||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=xe.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===Y.toString(),b=a.useSOLBalance&&t.mintB.address===Y.toString(),{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new re(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(o==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(w||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new re(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(o==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A&&(y=A),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),T=xe.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:o,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===Y.toString(),f=i.useSOLBalance&&t.mintB.address===Y.toString(),b,g,{account:w,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new re(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=w,A&&p.addInstruction(A);let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new re(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=k,I&&p.addInstruction(I);let T=[];for(let B of t.rewardDefaultInfos){let L=i.useSOLBalance&&B.mint.address===Y.toString(),D;if(B.mint.address===t.mintA.address)D=b;else if(B.mint.address===t.mintB.address)D=g;else{let{account:V,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(B.mint.programId),mint:new re(B.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});D=V,H&&p.addInstruction(H)}T.push(D)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await xe.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[F.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let B=await xe.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o});p.addInstruction({endInstructions:B.instructions,endInstructionTypes:B.instructionTypes}),R=C(C({},R),B.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=xe.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:o,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===Y.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(n.mint.address),mint:new re(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ct(new O(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=xe.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new re(n.mint.programId),mint:new re(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of o){let d=n.useSOLBalance&&m.mint.address===Y.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(m.mint.programId),mint:new re(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ct(new O(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=xe.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new re(m.mint.programId),mint:new re(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(Y),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ct(new O(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=xe.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===Y.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(m.mint.programId),mint:new re(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ct(new O(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=xe.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new re(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});u.addInstruction(b),l=C(C({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(Y),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:o,checkCreateATAOwner:i});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=xe.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(Y),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:o,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=xe.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=c.useSOLBalance&&e.mintA.address===Y.toBase58(),g=c.useSOLBalance&&e.mintB.address===Y.toBase58(),w;!s||s.equals(new O(0))?w=f?At.add(new ct(1)):wt.sub(new ct(1)):w=ee.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new re(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?o:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let k;if(!k){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new re(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:o}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=T,S&&y.addInstruction(S)}(!A||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(xe.makeSwapBaseInInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k},inputMint:new re(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:w,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=c.useSOLBalance&&e.mintA.address===Y.toBase58(),g=c.useSOLBalance&&e.mintB.address===Y.toBase58(),w;!s||s.equals(new O(0))?w=n.toString()===e.mintB.address?At.add(new ct(1)):wt.sub(new ct(1)):w=ee.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new re(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?i:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let k;if(!k){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new re(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=T,S&&y.addInstruction(S)}(!A||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(xe.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k},outputMint:new re(n),amountOut:o,amountInMax:i,sqrtPriceLimitX64:w,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)o?Ae(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(u[m.accountInfo.mint.toString()]=m.pubkey):u[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(A=>!A.liquidity.isZero()||A.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===Y.toString(),y=n.useSOLBalance&&d.mintB.address===Y.toString(),f=u[d.mintA.address];if(!f){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new re(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f=A,k&&l.addInstruction(k)}let b=u[d.mintB.address];if(!b){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new re(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:o,checkCreateATAOwner:i});b=A,k&&l.addInstruction(k)}u[d.mintA.address]=f,u[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let k=n.useSOLBalance&&A.mint.address===Y.toString(),I=u[A.mint.address];if(!I){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(A.mint.programId),mint:new re(A.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:o});I=T,S&&l.addInstruction(S)}u[A.mint.address]=I,g.push(I)}let w=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let k=xe.decreaseLiquidityInstructions({poolInfo:d,poolKeys:w,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new ct(0),amountMinA:new ct(0),amountMinB:new ct(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:c}):l.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(wo(e).publicKey);return t?Ru.decode(t.data).whitelistMints.filter(o=>!o.equals(re.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new ct(1))).map(s=>bt(new re(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(s=>{if(!s)return;let a=Kr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await ve(this.scope.connection,e.map(i=>({pubkey:new re(i)})),t),o={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=bn.decode(s.accountInfo.data),c=ee.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=E(C({},a),{currentPrice:c,programId:s.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 ve(this.scope.connection,Array.from(n).map(c=>({pubkey:new re(c)}))),i={};o.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Ku.decode(c.accountInfo.data))});let s=await Ke.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:et({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Eu.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?rn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:et({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Eu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?rn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:E(C({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ke.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,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 Cn({connection:this.scope.connection,mints:Array.from(n).map(m=>new re(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await ve(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=xu(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Fu.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Fu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=E(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:c.config});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as Dr,TOKEN_PROGRAM_ID as Gt,AccountLayout as Xd}from"@solana/spl-token";import ds from"bn.js";import Wu from"bn.js";var ms=new Wu(1e6);function Ld(r,e,t){return r.mul(e).add(t).sub(new Wu(1)).div(t)}function Du(r,e,t){return r.mul(e).div(t)}var Lr=class{static tradingFee(e,t){return Ld(e,t,ms)}static protocolFee(e,t){return Du(e,t,ms)}static fundFee(e,t){return Du(e,t,ms)}};import Ko from"bn.js";function Nr(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Nd(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=Nr(r,e);return n.gt(Fn)&&(t=t.add(new Ko(1)),e=r.div(t),n=Nr(r,t),n.gt(Fn)&&(e=e.add(new Ko(1)))),[t,e]}var Fn=new Ko(0),Mr=class{static swapWithoutFees(e,t,n){let o=t.mul(n),i=t.add(e),[s,a]=Nd(o,i),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,o,i){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Nr(e.mul(n),t).gt(Fn)&&s.gt(Fn)&&(s=s.add(new Ko(1))),Nr(e.mul(o),t).gt(Fn)&&a.gt(Fn)&&(a=a.add(new Ko(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import _r from"decimal.js-light";var qu=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(qu||{}),vr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,o){let i=Lr.tradingFee(e,o),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Mr.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:o,quoteReserve:i,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[o,i,e.decimals,t.decimals,e.address]:[i,o,t.decimals,e.decimals,t.address],p=new _r(u.toString()).div(10**m).div(new _r(c.toString()).div(10**l)),y=a.gte(u)?u.sub(new ds(1)):a,f=u.sub(y),b=$t(c.mul(y),f),g=$t(b.mul(new ds(1e6)),new ds(1e6).sub(n)),w=g.sub(b),A=new _r(y.toString()).div(10**m).div(new _r(g.toString()).div(10**l)),k=p.isZero()?0:A.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:w,priceImpact:k}}};var Md=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),_d=Buffer.from("amm_config","utf8"),vd=Buffer.from("pool","utf8"),Vd=Buffer.from("pool_lp_mint","utf8"),Fd=Buffer.from("pool_vault","utf8"),Ed=Buffer.from("observation","utf8");function En(r){return ae([Md],r)}function hI(r,e){return ae([_d,qd(e)],r)}function Dd(r,e,t,n){return ae([vd,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Wd(r,e){return ae([Vd,e.toBuffer()],r)}function Uu(r,e,t){return ae([Fd,e.toBuffer(),t.toBuffer()],r)}function Vr(r,e){return ae([Ed,e.toBuffer()],r)}function qd(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function Gu({programId:r,configId:e,mintA:t,mintB:n}){let o=En(r).publicKey,i=Dd(r,e,t,n).publicKey,s=Wd(r,i).publicKey,a=Uu(r,i,t).publicKey,c=Uu(r,i,n).publicKey,u=Vr(r,i).publicKey;return{poolId:i,configId:e,authority:o,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as Co}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ps,TOKEN_2022_PROGRAM_ID as Xu,ASSOCIATED_TOKEN_PROGRAM_ID as Ud}from"@solana/spl-token";var Gd=ue("Raydium_cpmm"),Ro={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]};function zu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A){let k=v([h("amountMaxA"),h("amountMaxB"),h("openTime")]),I=[{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:!1},{pubkey:s,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:ps,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Ud,isSigner:!1,isWritable:!1},{pubkey:Ho,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:w,openTime:A},T),new Co({keys:I,programId:r,data:Buffer.from([...Ro.initialize,...T])})}function Qu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=v([h("lpAmount"),h("amountMaxA"),h("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:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ps,isSigner:!1,isWritable:!1},{pubkey:Xu,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(f.span);return Gd.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Co({keys:b,programId:r,data:Buffer.from([...Ro.deposit,...g])})}function Yu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=v([h("lpAmount"),h("amountMinA"),h("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:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ps,isSigner:!1,isWritable:!1},{pubkey:Xu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Yo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Co({keys:b,programId:r,data:Buffer.from([...Ro.withdraw,...g])})}function Fr(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=v([h("amountIn"),h("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:s,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}],w=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},w),new Co({keys:g,programId:r,data:Buffer.from([...Ro.swapBaseInput,...w])})}function ju(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=v([h("amountInMax"),h("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:s,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}],w=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},w),new Co({keys:g,programId:r,data:Buffer.from([...Ro.swapBaseOutput,...w])})}import Le from"bn.js";var Hu=v([ye(8),W("bump"),Ue("disableCreatePool"),Et("index"),h("tradeFeeRate"),h("protocolFeeRate"),h("fundFeeRate"),h("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(h(),16)]),Er=v([ye(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),h("lpAmount"),h("protocolFeesMintA"),h("protocolFeesMintB"),h("fundFeesMintA"),h("fundFeesMintB"),h("openTime"),X(h(),32)]);var Oo=class extends Se{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 ve(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),o={},i=new Set,s=[];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=Er.decode(d.accountInfo.data);o[String(e[m])]=E(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await ve(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Hu.decode(y.data)}}let c={},u=await ve(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new Le(Xd.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),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=E(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new O(y.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],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return E(C({},n),{[o]:E(C({},i),{id:new z(o),configInfo:i.configInfo,version:7,authority:En(i.programId).publicKey,mintA:et({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?rn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:et({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?rn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Cn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=et({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?rn(n[t.mintA.toBase58()].feeConfig):void 0}}),i=et({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?rn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=et({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Gt.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:s,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,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:En(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(m){var d=m,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:o,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,feeConfig:c,computeBudgetConfig:u}=d,l=Re(d,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var V,H,G;let p=o.feePayer||((V=this.scope.owner)==null?void 0:V.publicKey),y=new Le(new z(l.mintA.address).toBuffer()).lte(new Le(new z(l.mintB.address).toBuffer())),[f,b]=y?[l.mintA,l.mintB]:[l.mintB,l.mintA],[g,w]=y?[l.mintAAmount,l.mintBAmount]:[l.mintBAmount,l.mintAAmount],A=o.useSOLBalance&&f.address===Dr.toBase58(),k=o.useSOLBalance&&b.address===Dr.toBase58(),[I,T]=[new z(f.address),new z(b.address)],S=this.createTxBuilder(),{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:I,tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:p,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:i,checkCreateATAOwner:s});S.addInstruction(R||{});let{account:B,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:new z(b.address),tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:p,amount:w}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:i,checkCreateATAOwner:s});if(S.addInstruction(L||{}),x===void 0||B===void 0)throw Error("you don't has some token account");let D=Gu({programId:e,configId:new z(c.id),mintA:I,mintB:T});return S.addInstruction({instructions:[zu(e,this.scope.ownerPubKey,new z(c.id),D.authority,D.poolId,I,T,D.lpMint,x,B,Ae(this.scope.ownerPubKey,D.lpMint).publicKey,D.vaultA,D.vaultB,t,new z((H=f.programId)!=null?H:Gt),new z((G=b.programId)!=null?G:Gt),D.observationId,g,w,n)],instructionTypes:[F.CpmmCreatePool]}),S.addCustomComputeBudget(u),S.versionBuild({txVersion:a,extInfo:{address:E(C({},D),{mintA:f,mintB:b,programId:e,poolFeeAccount:t,feeConfig:c})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=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:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:E(C({},t),{lpAmount:new O(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Qe(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new O(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),w=g.amount,A=t.mintA.address===Dr.toString(),k=t.mintB.address===Dr.toString(),I=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(i?o:w).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:w}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(R||{});let{account:B,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?w:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?w:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(L||{}),!x&&!B&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let D=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),$e=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:D,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:V}=$e,H=Re($e,["tokenAccount"]);I.addInstruction(H);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Qe(new Le(1)).sub(s);return I.addInstruction({instructions:[Qu(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),V,x,B,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,i?b.amount:w,i?w:b.amount)],instructionTypes:[F.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),I.addCustomComputeBudget(c),I.versionBuild({txVersion:l})}async withdrawLiquidity(e){var V,H;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Qe(new Le(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(o.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(o.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[fe(l,t.mintA.extensions.feeConfig,d,!1),fe(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,w]=[new z(t.mintA.address),new z(t.mintB.address)],A=g.equals(Y),k=w.equals(Y),I,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});I=S,x&&b.addInstruction(x);let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,B&&b.addInstruction(B),(!I||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let D=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Yu(new z(t.programId),this.scope.ownerPubKey,new z(D.authority),new z(t.id),L,I,T,new z(D.vault.A),new z(D.vault.B),g,w,new z(t.lpMint.address),o,l.sub((V=p.fee)!=null?V:new Le(0)),m.sub((H=y.fee)!=null?H:new Le(0)))],instructionTypes:[F.CpmmWithdrawLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var R,B,L,D,V,H;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:i,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)];i?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Le((1+c)*1e4)).div(new Le(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Le((1-c)*1e4)).div(new Le(1e4));let w=t.mintA.address===Y.toBase58(),A=t.mintB.address===Y.toBase58(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new z((R=t.mintA.programId)!=null?R:Gt),owner:this.scope.ownerPubKey,createInfo:w||!o?{payer:this.scope.ownerPubKey,amount:o?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:y,checkCreateATAOwner:p});I&&f.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((B=t.mintB.programId)!=null?B:Gt),owner:this.scope.ownerPubKey,createInfo:A||o?{payer:this.scope.ownerPubKey,amount:o?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!k||!T)&&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:T,mintAUseSOLBalance:w,mintBUseSOLBalance:A,associatedOnly:y});let x=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[i?ju(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),o?k:T,o?T:k,new z(x.vault[o?"A":"B"]),new z(x.vault[o?"B":"A"]),new z((V=t[o?"mintA":"mintB"].programId)!=null?V:Gt),new z((H=t[o?"mintB":"mintA"].programId)!=null?H:Gt),o?b:g,o?g:b,Vr(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Fr(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),o?k:T,o?T:k,new z(x.vault[o?"A":"B"]),new z(x.vault[o?"B":"A"]),new z((L=t[o?"mintA":"mintB"].programId)!=null?L:Gt),new z((D=t[o?"mintB":"mintA"].programId)!=null?D:Gt),o?b:g,o?g:b,Vr(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[i?F.CpmmSwapBaseOut:F.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let i=n.toString()===e.mintB.address,s=vr.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new O(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Le((1-o)*1e4)).div(new Le(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:s,baseIn:a}){var w,A,k,I,T,S,x,R;let c=1-Number(i.toSignificant())/100,u=new Le(new O(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=fe(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((w=l.fee)!=null?w:new Le(0)),d=new Le(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=(A=l.fee)==null?void 0:A.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 y=m.mul(d).div(p==="base"?t:n),f={amount:ft,fee:void 0,expirationTime:void 0};if(!m.isZero()){let B=zd(y,t,n,d);this.logDebug("lpAmountData:",{amountA:B.amountA.toString(),amountB:B.amountB.toString()}),f=fe(B[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Qe(new Le(1)).add(i),g=fe(b.mul(f.amount.sub((I=f.fee)!=null?I:new Le(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function zd(r,e,t,n){let o=r.mul(e).div(n);!o.isZero()&&!r.mul(e).mod(n).isZero()&&(o=o.add(new Le(1)));let i=r.mul(t).div(n);return!i.isZero()&&!r.mul(t).mod(n).isZero()&&(i=i.add(new Le(1))),{amountA:o,amountB:i}}import{PublicKey as Pn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ce,TOKEN_2022_PROGRAM_ID as Ur,createTransferInstruction as nc}from"@solana/spl-token";import Gr from"bn.js";import{TOKEN_PROGRAM_ID as fs,TOKEN_2022_PROGRAM_ID as Qd,ASSOCIATED_TOKEN_PROGRAM_ID as Yd}from"@solana/spl-token";import{PublicKey as Q,TransactionInstruction as ys,SystemProgram as bs}from"@solana/web3.js";import wn from"bn.js";function IB(r,e,t,n,o,i,s,a,c,u,l,m){let d=v([W("instruction"),h("amountIn"),h("amountOut")]),p=[{pubkey:bs.programId,isSigner:!1,isWritable:!1},{pubkey:fs,isSigner:!1,isWritable:!1},{pubkey:new Q(t.programId),isSigner:!1,isWritable:!1},{pubkey:new Q(t.id),isSigner:!1,isWritable:!0},{pubkey:new Q(n.id),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=ke(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new Q("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new ys({keys:p,programId:r,data:y})}function BB(r,e,t,n,o,i,s,a,c,u){let l=v([W("instruction")]),m=[{pubkey:bs.programId,isSigner:!1,isWritable:!1},{pubkey:fs,isSigner:!1,isWritable:!1},{pubkey:new Q(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new Q(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new Q(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=ke(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new Q("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new ys({keys:m,programId:r,data:d})}function jd(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[P({pubkey:fs,isWritable:!1}),P({pubkey:Qd,isWritable:!1}),P({pubkey:Yd,isWritable:!1}),P({pubkey:bs.programId,isWritable:!1}),P({pubkey:e,isSigner:!0})];b.push(P({pubkey:t})),b.push(P({pubkey:o}));let g=[c,u],w=[l,m],A=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=A[S]===x.mintA.address;if(b.push(P({pubkey:new Q(x.programId),isWritable:!1})),S===g.length-1?b.push(P({pubkey:o})):b.push(P({pubkey:n})),b.push(P({pubkey:new Q(A[S])})),b.push(P({pubkey:new Q(A[S+1])})),x.version===6){let B=w[S];b.push(P({pubkey:new Q(B.config.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(R?B.vault.A:B.vault.B)})),b.push(P({pubkey:new Q(R?B.vault.B:B.vault.A)})),b.push(P({pubkey:new Q(x.observationId)})),b.push(P({pubkey:Yo})),b.push(P({pubkey:ut(new Q(x.programId),new Q(x.id)).publicKey})),f.push(Hd(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(P({pubkey:new Q(L)}))}else if(x.version===5){let B=w[S];b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.authority),isWritable:!1})),b.push(P({pubkey:new Q(B.marketProgramId)})),b.push(P({pubkey:new Q(B.marketAuthority)})),b.push(P({pubkey:ya,isWritable:!1})),b.push(P({pubkey:new Q(B.openOrders)})),b.push(P({pubkey:new Q(B.vault.A)})),b.push(P({pubkey:new Q(B.vault.B)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.marketId)})),b.push(P({pubkey:new Q(B.marketBids)})),b.push(P({pubkey:new Q(B.marketAsks)})),b.push(P({pubkey:new Q(B.marketEventQueue)})),b.push(P({pubkey:new Q(B.marketBaseVault)})),b.push(P({pubkey:new Q(B.marketQuoteVault)}))}else if(x.version===4){let B=w[S],L=x.status!==1;b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.authority),isWritable:!1})),b.push(P({pubkey:new Q(L?B.id:B.marketProgramId)})),b.push(P({pubkey:new Q(L?B.id:B.marketAuthority)})),b.push(P({pubkey:new Q(L?B.id:B.openOrders)})),b.push(P({pubkey:new Q(B.vault.A)})),b.push(P({pubkey:new Q(B.vault.B)})),b.push(P({pubkey:new Q(L?B.id:B.marketId)})),b.push(P({pubkey:new Q(L?B.id:B.marketBids)})),b.push(P({pubkey:new Q(L?B.id:B.marketAsks)})),b.push(P({pubkey:new Q(L?B.id:B.marketEventQueue)})),b.push(P({pubkey:new Q(L?B.id:B.marketBaseVault)})),b.push(P({pubkey:new Q(L?B.id:B.marketQuoteVault)}))}else if(x.version===7){let B=w[S];b.push(P({pubkey:new Q(B.authority)})),b.push(P({pubkey:new Q(B.config.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(R?B.vault.A:B.vault.B)})),b.push(P({pubkey:new Q(R?B.vault.B:B.vault.A)})),b.push(P({pubkey:new Q(x.observationId)}))}else throw Error("pool type error")}let k=v([W("insId"),h("amountIn"),h("amountOut"),X(J(),f.length,"clmmPriceLimit")]),I=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},I),new ys({keys:b,programId:r,data:I})}function Hd(r,e){if(r)if(e){let t=new wn(r).div(new wn(25));return t.gt(Br)?t:Br}else{let t=new wn(r).mul(new wn(25));return t.lt(xr)?t:xr}else return e?Br:xr}function Zu({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=ke(m),p=t.equals(d.mintA.address)?At.add(dt):wt.sub(dt);return xe.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new wn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Fr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new Q(m[d?"mintA":"mintB"].address),new Q(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?F.CpmmSwapBaseIn:F.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[hr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new wn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?F.AmmV5SwapBaseIn:F.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[jd(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new wn(0)),n.remainingAccounts)],instructionTypes:[F.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var $u={[yi.toBase58()]:3},Ju={3:yi};var gs=v([ye(5),ye(8),K("ownAddress"),h("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),h("baseDepositsTotal"),h("baseFeesAccrued"),K("quoteVault"),h("quoteDepositsTotal"),h("quoteFeesAccrued"),h("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),h("baseLotSize"),h("quoteLotSize"),h("feeRateBps"),h("referrerRebatesAccrued"),ye(7)]),ec={3:gs};import{PublicKey as tc}from"@solana/web3.js";var Wr=ue("Serum"),qr=class{static getProgramId(e){let t=Ju[e];return t||Wr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=$u[t];return n||Wr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=ec[e];return t||Wr.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 s=n.concat(Buffer.from([o]),Buffer.alloc(7));i=tc.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:i,nonce:o}}return Wr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:tc.default,nonce:o}}};var Xt=new Gr(0),Lo=class extends Se{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(Y));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}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=$(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[Nt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[Nt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),no({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:o})}async wrapWSol(e,t,n){let o=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),o.length&&i.addInstruction({instructions:[no({destination:o[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Nt({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(Y),m=u.amount.token.mint.equals(Y),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Ur:Ce,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?Ur:Ce);else{let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Ur:Ce,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=k,I&&a.addInstruction(I)}m&&a.addInstruction({endInstructions:[Nt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ce})],endInstructionTypes:[F.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?Ur:Ce)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=Zu({routeProgram:i,inputMint:d,swapInfo:E(C({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[nc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]}),k.addInstruction(A);let{transactions:I}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();I.length<2&&a.addInstruction({instructions:[nc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]})}return a.addInstruction(A),s===0?a.sizeCheckBuildV0({computeBudgetConfig:o,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:o,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=fa,clmm:n=ba,cpmm:o=ga}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:go.offsetOf("baseMint"),length:64}}),s=v([K("baseMint"),K("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=v([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:bn.span}],dataSlice:{offset:bn.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Er.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===Pn.default.toString()?Y:e,t=t.toString()===Pn.default.toString()?Y:t;let s={},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:Ce,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:Ce,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:Ce,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:Ce,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),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ce,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:Ce,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:Ce,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:Ce,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:Ce,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:Ce,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:Ce,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:Ce,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 y of p.in)for(let f of p.out)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)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),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)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.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(f=>f.id)),s=Or(i),a={};Object.values(s).forEach(f=>{o.delete(f.mintA.address),a[f.mintA.address]={address:new Pn(f.mintA.address),programId:Ce,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(f.mintB.address),a[f.mintB.address]={address:new Pn(f.mintB.address),programId:Ce,mintAuthority:null,supply:BigInt(0),decimals:f.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(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Ce)?(o.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),f.mintProgramB.equals(Ce)?(o.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.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 Cn({connection:this.scope.connection,mints:Array.from(o).map(f=>new Pn(f))});a=C(C({},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(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>E(C({},f),{[b]:E(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,w,A,k,I,T,S,x,R;let m=l===void 0?new Gr(0):e.raw.mul(new Gr(l.feeBps.toNumber())).div(new Gr(1e4)),d=e.raw.sub(m),p=new ge(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=E(C({},t),{address:lt(t.address).toString()}),b=[];for(let B of n)try{b.push(E(C({},this.computeAmountOut({itemPool:B,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",B.version,B.id.toString(),L.message)}this.logDebug("direct done");for(let[B,L]of Object.entries(o)){let D={chainId:101,address:B,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},V=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:D,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var an,zt,Tn,_t;let $e=G===void 0?Xt:G.data.amountOut.amount.raw.sub((zt=(an=G.data.amountOut.fee)==null?void 0:an.raw)!=null?zt:Xt),kn=q===void 0?Xt:q.data.amountOut.amount.raw.sub((_t=(Tn=q.data.amountOut.fee)==null?void 0:Tn.raw)!=null?_t:Xt);return $e.lt(kn)?1:-1})[0];if(V===void 0)continue;let H=new ge(Pr(D),V.data.amountOut.amount.raw.sub((w=(g=V.data.amountOut.fee)==null?void 0:g.raw)!=null?w:Xt));for(let G of L.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:H});b.push(E(C({},q),{allTrade:!!(V.data.allTrade&&q.allTrade),amountIn:V.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new O(new rt({baseToken:V.data.amountIn.amount.token,denominator:V.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((k=(A=q.amountOut.fee)==null?void 0:A.raw)!=null?k:Xt)}).toFixed()),priceImpact:new O(V.data.priceImpact.add(q.priceImpact).toFixed()),fee:[V.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[V.pool,G],remainingAccounts:[V.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(I=q.amountOut.fee)!=null&&I.raw?new ge(V.data.amountOut.amount.token,((S=(T=V.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Xt).add((R=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?R:Xt)):void 0,middleToken:V.data.amountOut.amount.token,poolReady:V.data.poolReady&&q.poolReady,poolType:[V.data.poolType,q.poolType],feeConfig:y,expirationTime:xt(V.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(B=>(B.allTrade||this.logDebug(`pool ${B.poolInfoList.map(L=>L.id.toString()).join(",")} filter out since not all trade`),B.allTrade)).sort((B,L)=>B.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Xt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:w,executionPriceX64:A}=Ke.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new O(y.toFixed()),executionPrice:new O(f.toFixed()),priceImpact:new O(b.toFixed()),fee:[g],remainingAccounts:[w],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:xt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(E(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(E(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ge(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,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:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(E(C({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(E(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ge(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,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]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await ve(this.scope.connection,Array.from(s).map(l=>({pubkey:new Pn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=gs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:qr.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:E(C({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=C({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:ls({programId:new Pn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:En(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:et({address:u.mintLp.toBase58(),programId:Ce.toBase58(),decimals:u.lpDecimals}),config:E(C({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{TOKEN_PROGRAM_ID as Zd}from"@solana/spl-token";import{PublicKey as $d,Transaction as As,TransactionInstruction as Jd}from"@solana/web3.js";import oc from"bn.js";var Ze=class extends Se{static getPdaPoolId(e,t){return ae([Ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ae([Ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new oc(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>Ze.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Ze.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Ze.getPdaOwnerId(t,m,o,l).publicKey));let c=await Tt(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==Ze.POOL_LAYOUT.span||b.data.length!==Ze.OWNER_LAYOUT.span)continue;let g=Ze.POOL_LAYOUT.decode(f.data),w=Ze.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),k=g.endTime.toNumber(),I=w.tokenInfo.map(x=>x.debtAmount.gt(new oc(0))).filter(x=>!x).length!==3,T=i>A&&i<k&&g.status===1,S=I&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:w.lpAmount,project:Ze.VERSION_PROJECT[m],openTime:A,endTime:k,canClaim:S,canClaimErrorType:I?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:w.tokenInfo[R].debtAmount.add(w.tokenInfo[R].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(Be.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!c.mintAddress.equals(Be.WSOL.mint),associatedOnly:c.mintAddress.equals(Be.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[Ze.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Be.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!m.mintAddress.equals(Be.WSOL.mint),associatedOnly:m.mintAddress.equals(Be.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[Ze.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:o,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return rr(c,[o,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new As().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new As().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new As().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=v([]),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:Zd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Jd({keys:i,programId:e,data:a})}},Pt=Ze;Pt.CLAIMED_NUM=3,Pt.POOL_LAYOUT=v([ye(8),W("bump"),W("status"),h("openTime"),h("endTime"),K("ammId"),X(v([W("mintDecimals"),K("mintAddress"),K("mintVault"),h("perLpLoss"),h("totalClaimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),X(h(),10,"padding")]),Pt.OWNER_LAYOUT=v([ye(8),W("bump"),W("version"),K("poolId"),K("owner"),h("lpAmount"),X(v([K("mintAddress"),h("debtAmount"),h("claimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),X(h(),4,"padding")]),Pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new $d(e)),Pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as No}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as uc}from"@solana/spl-token";import Mo from"bn.js";import{TransactionInstruction as tp,SYSVAR_RENT_PUBKEY as np}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as rc}from"@solana/spl-token";import{createInitializeAccountInstruction as ic}from"@solana/spl-token";import{SystemProgram as hn,Transaction as sc}from"@solana/web3.js";function ep(r="accountFlags"){let e=new pr(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ws=v([ye(5),ep("accountFlags"),K("ownAddress"),h("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),h("baseDepositsTotal"),h("baseFeesAccrued"),K("quoteVault"),h("quoteDepositsTotal"),h("quoteFeesAccrued"),h("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),h("baseLotSize"),h("quoteLotSize"),h("feeRateBps"),h("referrerRebatesAccrued"),ye(7)]);function op({programId:r,marketInfo:e}){let t=v([W("version"),qe("instruction"),h("baseLotSize"),h("quoteLotSize"),Et("feeRateBps"),h("vaultSignerNonce"),h("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:np,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 tp({keys:n,programId:r,data:o})}async function ac({connection:r,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new sc,o=await r.getMinimumBalanceForRentExemption(165);n.add(hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:rc}),hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:rc}),ic(t.baseVault.publicKey,t.baseMint,t.vaultOwner),ic(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new sc;return i.add(hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(ws.span),space:ws.span,programId:t.programId}),hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await r.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await r.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),op({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:[F.CreateAccount,F.CreateAccount,F.InitAccount,F.InitAccount]},{transaction:i,signer:[],instructionTypes:[F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.InitMarket]}]}var Dn=class extends Se{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,txVersion:u,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=st({fromPublicKey:m,programId:i}),p=st({fromPublicKey:m,programId:i}),y=st({fromPublicKey:m,programId:i}),f=st({fromPublicKey:m,programId:i}),b=st({fromPublicKey:m,programId:i}),g=st({fromPublicKey:m,programId:uc}),w=st({fromPublicKey:m,programId:uc}),A=0,k=new Mo(100);function I(){let D=new Mo(0);for(;;)try{return{vaultOwner:No.createProgramAddressSync([d.publicKey.toBuffer(),D.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:D}}catch{if(D.iaddn(1),D.gt(new Mo(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=I(),x=new Mo(Math.round(10**e.decimals*n)),R=new Mo(Math.round(n*10**t.decimals*o));if(x.eq(ft))throw Error("lot size is too small");if(R.eq(ft))throw Error("tick size or lot size is too small");let B=await ac({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:d,baseMint:e.mint,quoteMint:t.mint,baseVault:g,quoteVault:w,vaultOwner:T,requestQueue:p,eventQueue:y,bids:f,asks:b,feeRateBps:A,quoteDustThreshold:k,vaultSignerNonce:S,baseLotSize:x,quoteLotSize:R,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c}}),L=this.createTxBuilder();L.addInstruction({instructions:B[0].transaction.instructions,signers:B[0].signer});for await(let D of B.slice(1,B.length))L.addInstruction({instructions:D.transaction.instructions,signers:D.signer,instructionTypes:D.instructionTypes});return u===0?L.sizeCheckBuildV0({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:w.publicKey,baseMint:new No(e.mint),quoteMin:new No(t.mint)}}):L.sizeCheckBuild({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:w.publicKey,baseMint:new No(e.mint),quoteMin:new No(t.mint)}})}};import{PublicKey as vo}from"@solana/web3.js";import{TransactionInstruction as hs,SYSVAR_CLOCK_PUBKEY as rp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ks}from"@solana/spl-token";var Ps=v([W("instruction"),Ta("amount")]),_o=v([W("instruction")]);function uS({programId:r,amount:e,instructionKeys:t}){let n=[{pubkey:Ho,isSigner:!1,isWritable:!1},{pubkey:ks,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:ri,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],o=Buffer.alloc(Ps.span);return Ps.encode({instruction:1,amount:Number(e)},o),new hs({keys:n,programId:r,data:o})}function Xr({programId:r},e){let t=[{pubkey:ks,isSigner:!1,isWritable:!1},{pubkey:ri,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(_o.span);return _o.encode({instruction:2},n),new hs({keys:t,programId:r,data:n})}function Ts(r){let{poolConfig:e,userKeys:t,side:n}=r,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(_o.span);_o.encode({instruction:2},s);let a=[{pubkey:ks,isWritable:!1,isSigner:!1},{pubkey:rp,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 hs({programId:e.programId,keys:a,data:s})}import cc from"bn.js";var ip={[eo.IDO_PROGRAM_ID_V1.toString()]:1,[eo.IDO_PROGRAM_ID_V2.toString()]:2,[eo.IDO_PROGRAM_ID_V3.toString()]:3,[eo.IDO_PROGRAM_ID_V4.toString()]:4},Wn=class extends Se{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i}){let s=this.createTxBuilder(),a=ip[t.programId];a||this.logAndCreateError("invalid version",a);let c=ke(t),[u,l]=[!new cc(e.coin).isZero(),!new cc(e.pc).isZero()],m=c.projectInfo.mint.address.equals(Y),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:o});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(Y),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.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(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[Xr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new vo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Xr({programId:new vo(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new vo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Xr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new vo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new vo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[Ts(E(C({},g),{side:"base"}))]:[],...l?[Ts(E(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as sp}from"@solana/web3.js";import{MintLayout as ap,TOKEN_2022_PROGRAM_ID as Is,TOKEN_PROGRAM_ID as Bs}from"@solana/spl-token";var Vo=class extends Se{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;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:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Lt.address,Lt),this._mintGroup.official.add(Lt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,E(C({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,E(C({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Is.toBase58():Bs.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),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,E(C({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Is.toBase58():Bs.toBase58(),mintAuthority:u.mintAuthority})),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,E(C({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Is.toBase58():Bs.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 Lt;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,E(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new sp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=ap.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.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 zr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new It(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ue("Raydium"),this.farm=new yo({scope:this,moduleName:"Raydium_Farm"}),this.account=new oo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new xo({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Vo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Lo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new So({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Oo({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Pt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Dn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Wn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=up({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:s,urlConfigs:a}=t,c=new lr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:s}),u=new zr(E(C({},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(mr);return this._owner.publicKey}setOwner(e){return this._owner=e?new It(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Pa);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 this.logger.error(mr),new Error(mr)}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){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=>E(C({},o),{mintAuthority:o.mint_authority||void 0,freezeAuthority:o.freezeAuthority||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{}}}};var m0=r=>r;export{cd as AMM_CONFIG_SEED,Pu as BIT_PRECISION,So as Clmm,Ku as ClmmConfigLayout,xe as ClmmInstrument,Mr as ConstantProductCurve,Hu as CpmmConfigInfoLayout,Lr as CpmmFee,Er as CpmmPoolInfoLayout,vr as CurveCalculator,Ym as DataElement,os as EXTENSION_TICKARRAY_BITMAP_SIZE,Ua as FARM_LOCK_MINT,Ga as FARM_LOCK_VAULT,yt as FARM_PROGRAM_TO_VERSION,za as FARM_VERSION_TO_LEDGER_LAYOUT,Xa as FARM_VERSION_TO_STATE_LAYOUT,Sr as FEE_RATE_DENOMINATOR,ms as FEE_RATE_DENOMINATOR_VALUE,Ad as FETCH_TICKARRAY_COUNT,gd as Fee,Cr as LIQUIDITY_FEES_DENOMINATOR,as as LIQUIDITY_FEES_NUMERATOR,Bd as LIQUIDITY_VERSION_TO_SERUM_VERSION,RP as LIQUIDITY_VERSION_TO_STATE_LAYOUT,hu as LOG_B_2_X32,ku as LOG_B_P_ERR_MARGIN_LOWER_X64,Tu as LOG_B_P_ERR_MARGIN_UPPER_X64,ce as LiquidityMath,ws as MARKET_STATE_LAYOUT_V2,gs as MARKET_STATE_LAYOUT_V3,ec as MARKET_VERSION_TO_STATE_LAYOUT,wt as MAX_SQRT_PRICE_X64,xr as MAX_SQRT_PRICE_X64_SUB_ONE,tt as MAX_TICK,At as MIN_SQRT_PRICE_X64,Br as MIN_SQRT_PRICE_X64_ADD_ONE,je as MIN_TICK,_n as MODEL_DATA_PUBKEY,qr as Market,ne as MathUtil,ns as MaxU64,wu as MaxUint128,qt as NEGATIVE_ONE,bd as OBSERVATION_SEED,dt as ONE,fd as OPERATION_SEED,Cu as ObservationInfoLayout,hd as ObservationLayout,Ru as OperationLayout,dd as POOL_REWARD_VAULT_SEED,ld as POOL_SEED,yd as POOL_TICK_ARRAY_BITMAP_SEED,md as POOL_VAULT_SEED,yu as POSITION_SEED,bn as PoolInfoLayout,Ke as PoolUtils,Kr as PositionInfoLayout,Td as PositionRewardInfoLayout,To as PositionUtils,fk as ProtocolPositionLayout,Ir as Q128,pt as Q64,zr as Raydium,kd as RewardInfo,qu as RoundDirection,$u as SERUM_PROGRAMID_TO_VERSION,Ju as SERUM_VERSION_TO_PROGRAMID,Lt as SOL_INFO,rP as SPL_MINT_LAYOUT,ee as SqrtPriceMath,Mn as StableLayout,yn as SwapMath,fn as TICK_ARRAY_BITMAP_SIZE,pd as TICK_ARRAY_SEED,Ve as TICK_ARRAY_SIZE,oh as TICK_SPACINGS,_e as TOKEN_WSOL,Ut as TickArrayBitmap,Su as TickArrayBitmapExtensionLayout,ko as TickArrayBitmapExtensionUtils,ho as TickArrayLayout,Id as TickLayout,gn as TickMath,le as TickQuery,j as TickUtils,Po as U64Resolution,ih as U64_IGNORE_RANGE,Wa as Voter,Cm as VoterDepositEntry,Km as VoterLockup,Da as VoterRegistrar,Sm as VoterVotingMintConfig,de as ZERO,ji as addLiquidityLayout,Ci as associatedLedgerAccountLayout,qi as calFarmRewardAmount,Ld as ceilDiv,_o as claimLayout,xu as clmmComputeInfoToApiInfo,Nt as closeAccountInstruction,lo as createAssociatedLedgerAccountInstruction,tu as createPoolFeeLayout,lu as createPoolV4InstructionV2,CP as createPoolV4Layout,Dt as createWSolAccountInstructions,Je as dwLayout,Ni as farmAddRewardLayout,UA as farmLedgerLayoutV3_1,io as farmLedgerLayoutV3_2,GA as farmLedgerLayoutV5_1,Fa as farmLedgerLayoutV5_2,Ea as farmLedgerLayoutV6_1,Ya as farmRewardInfoToConfig,Oi as farmRewardLayout,Li as farmRewardRestartLayout,xm as farmRewardTimeInfoLayout,va as farmStateV3Layout,Va as farmStateV5Layout,ro as farmStateV6Layout,yw as fetchMultipleFarmInfoAndUpdate,Xk as fetchMultipleInfo,zi as fixedSwapInLayout,Qi as fixedSwapOutLayout,Du as floorDiv,rd as formatLayout,st as generatePubKey,Qa as getAssociatedAuthority,Rr as getAssociatedConfigId,Ye as getAssociatedLedgerAccount,ao as getAssociatedLedgerPoolAccount,Rd as getAssociatedOpenOrders,vu as getAssociatedPoolKeys,hI as getCpmmPdaAmmConfigId,Dd as getCpmmPdaPoolId,Gu as getCreatePoolKeys,Ui as getDepositEntryIndex,iu as getDxByDyBaseIn,ru as getDyByDxBaseIn,Nn as getFarmLedgerLayout,Rm as getFarmStateLayout,ls as getLiquidityAssociatedAuthority,An as getLiquidityAssociatedId,Gh as getLiquidityFromAmounts,eh as getPdaAmmConfigId,ut as getPdaExBitmapAccount,Wd as getPdaLpMint,Tr as getPdaMetadataKey,Au as getPdaObservationAccount,Vr as getPdaObservationId,wo as getPdaOperationAccount,bt as getPdaPersonalPositionAddress,En as getPdaPoolAuthority,bu as getPdaPoolId,gu as getPdaPoolRewardVaulId,ts as getPdaPoolVaultId,pn as getPdaProtocolPositionAddress,Pe as getPdaTickArrayAddress,Uu as getPdaVault,vi as getRegistrarAddress,su as getStablePrice,Wi as getTokenOwnerRecordAddress,Ei as getVoterAddress,Di as getVoterWeightRecordAddress,Fi as getVotingMintAuthority,Vi as getVotingTokenMint,Em as governanceCreateTokenOwnerRecord,jP as i16ToBytes,kr as i32ToBytes,Yi as initPoolLayout,Si as initTokenAccountInstruction,op as initializeMarket,Mi as isValidFarmVersion,Ao as isZero,bw as judgeFarmType,Ji as leadingZeros,fu as leastSignificantBit,go as liquidityStateV4Layout,zm as liquidityStateV5Layout,hr as makeAMMSwapInstruction,cu as makeAddLiquidityInstruction,Xi as makeAddNewRewardInstruction,Xr as makeClaimInstruction,Ts as makeClaimInstructionV4,zu as makeCreateCpmmPoolInInstruction,ja as makeCreateFarmInstruction,ac as makeCreateMarketInstruction,Ha as makeCreatorWithdrawFarmRewardInstruction,Qu as makeDepositCpmmInInstruction,Za as makeDepositInstructionV3,$a as makeDepositInstructionV5,Ja as makeDepositInstructionV6,Nw as makeDepositTokenInstruction,_w as makeDepositWithdrawInstruction,QP as makeInitPoolInstructionV4,uS as makePurchaseInstruction,Gi as makeRestartRewardInstruction,mu as makeSimulatePoolInfoInstruction,Fr as makeSwapCpmmBaseInInInstruction,ju as makeSwapCpmmBaseOutInInstruction,ad as makeSwapFixedInInstruction,ud as makeSwapFixedOutInstruction,Zu as makeSwapInstruction,no as makeTransferInstruction,Yu as makeWithdrawCpmmInInstruction,fo as makeWithdrawInstructionV3,po as makeWithdrawInstructionV5,mo as makeWithdrawInstructionV6,Mw as makeWithdrawTokenInstruction,rh as mockCreatePoolInfo,Iu as mockV3CreatePoolInfo,jm as modelDataInfoLayout,pu as mostSignificantBit,_a as parseTokenAccountResp,fP as parseTokenInfo,on as poolTypeV6,Ps as purchaseLayout,Tm as realFarmStateV3Layout,Im as realFarmStateV5Layout,Bm as realFarmV6Layout,$i as removeLiquidityInstruction,Hi as removeLiquidityLayout,IB as route1Instruction,BB as route2Instruction,jd as routeInstruction,zP as simulatePoolInfoInstruction,bP as solToWSolToken,Jt as splAccountLayout,Or as toAmmComputePoolInfo,et as toApiV3Token,rn as toFeeConfig,Pr as toToken,bo as toTokenAmount,yP as toTokenInfo,es as trailingZeros,du as u16ToBytes,HP as u32ToBytes,m0 as unionArr,Om as updateFarmPoolInfo,_i as validateFarmRewards,Wm as voterStakeRegistryCreateDepositEntry,Dm as voterStakeRegistryCreateVoter,vm as voterStakeRegistryDeposit,Vm as voterStakeRegistryUpdateVoterWeightRecord,Fm as voterStakeRegistryWithdraw,gP as wSolToSolToken,Ri as withdrawRewardLayout};
1
+ var mc=Object.defineProperty,dc=Object.defineProperties;var pc=Object.getOwnPropertyDescriptors;var Eo=Object.getOwnPropertySymbols;var Cs=Object.prototype.hasOwnProperty,Rs=Object.prototype.propertyIsEnumerable;var Ks=(r,e,t)=>e in r?mc(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,C=(r,e)=>{for(var t in e||(e={}))Cs.call(e,t)&&Ks(r,t,e[t]);if(Eo)for(var t of Eo(e))Rs.call(e,t)&&Ks(r,t,e[t]);return r},E=(r,e)=>dc(r,pc(e));var Re=(r,e)=>{var t={};for(var n in r)Cs.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Eo)for(var n of Eo(r))e.indexOf(n)<0&&Rs.call(r,n)&&(t[n]=r[n]);return t};import{merge as up}from"lodash";import wa from"axios";import{get as Os,set as fc}from"lodash";var Yr=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}},Ls={},yc={};function ue(r){let e=Os(Ls,r);if(!e){let t=Os(yc,r);e=new Yr({name:r,logLevel:t}),fc(Ls,r,e)}return e}import{PublicKey as Il}from"@solana/web3.js";import Bl from"bn.js";import hl from"big.js";import tr from"bn.js";import it from"bn.js";var Bn=9e15,Zt=1e9,jr="0123456789abcdef",Wo="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",qo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Hr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Bn,maxE:Bn,crypto:!1},vs,vt,oe=!0,Go="[DecimalError] ",Ht=Go+"Invalid argument: ",Vs=Go+"Precision limit exceeded",Fs=Go+"crypto unavailable",Es="[object Decimal]",ze=Math.floor,Ne=Math.pow,bc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,gc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Ac=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ds=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,kt=1e7,te=7,wc=9007199254740991,Pc=Wo.length-1,Zr=qo.length-1,_={toStringTag:Es};_.absoluteValue=_.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),Z(r)};_.ceil=function(){return Z(new this.constructor(this),this.e+1,2)};_.clampedTo=_.clamp=function(r,e){var t,n=this,o=n.constructor;if(r=new o(r),e=new o(e),!r.s||!e.s)return new o(NaN);if(r.gt(e))throw Error(Ht+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new o(n)};_.comparedTo=_.cmp=function(r){var e,t,n,o,i=this,s=i.d,a=(r=new i.constructor(r)).d,c=i.s,u=r.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(i.e!==r.e)return i.e>r.e^c<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};_.cosine=_.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+te,n.rounding=1,t=hc(n,Xs(n,t)),n.precision=r,n.rounding=e,Z(vt==2||vt==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};_.cubeRoot=_.cbrt=function(){var r,e,t,n,o,i,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,i=l.s*Ne(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=De(l.d),r=l.e,(i=(r-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Ne(t,1/3),r=ze((r+1)/3)-(r%3==(r<0?-1:2)),i==1/0?t="5e"+r:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(r=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=he(u.plus(l).times(a),u.plus(c),s+2,1),De(a.d).slice(0,s)===(t=De(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(Z(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(Z(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,Z(n,r,m.rounding,e)};_.decimalPlaces=_.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-ze(this.e/te))*te,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};_.dividedBy=_.div=function(r){return he(this,new this.constructor(r))};_.dividedToIntegerBy=_.divToInt=function(r){var e=this,t=e.constructor;return Z(he(e,new t(r),0,1,1),t.precision,t.rounding)};_.equals=_.eq=function(r){return this.cmp(r)===0};_.floor=function(){return Z(new this.constructor(this),this.e+1,3)};_.greaterThan=_.gt=function(r){return this.cmp(r)>0};_.greaterThanOrEqualTo=_.gte=function(r){var e=this.cmp(r);return e==1||e===0};_.hyperbolicCosine=_.cosh=function(){var r,e,t,n,o,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,o=i.d.length,o<32?(r=Math.ceil(o/3),e=(1/zo(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),i=xn(s,1,i.times(e),new s(1),!0);for(var c,u=r,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return Z(i,s.precision=t,s.rounding=n,!0)};_.hyperbolicSine=_.sinh=function(){var r,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=xn(i,2,o,o,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,o=o.times(1/zo(5,r)),o=xn(i,2,o,o,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);r--;)s=o.times(o),o=o.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,Z(o,e,t,!0)};_.hyperbolicTangent=_.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,he(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};_.inverseCosine=_.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?ht(t,o,i):new t(0):new t(NaN):e.isZero()?ht(t,o+4,i).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),r=ht(t,o+4,i).times(.5),t.precision=o,t.rounding=i,r.minus(e))};_.inverseHyperbolicCosine=_.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};_.inverseHyperbolicSine=_.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln())};_.inverseHyperbolicTangent=_.atanh=function(){var r,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):(r=i.precision,e=i.rounding,n=o.sd(),Math.max(n,r)<2*-o.e-1?Z(new i(o),r,e,!0):(i.precision=t=n-o.e,o=he(o.plus(1),new i(1).minus(o),t+r,1),i.precision=r+4,i.rounding=1,o=o.ln(),i.precision=r,i.rounding=e,o.times(.5))):new i(NaN)};_.inverseSine=_.asin=function(){var r,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?(r=ht(i,t+4,n).times(.5),r.s=o.s,r):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)))};_.inverseTangent=_.atan=function(){var r,e,t,n,o,i,s,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<=Zr)return s=ht(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Zr)return s=ht(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/te+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/te),n=1,c=u.times(u),s=new l(u),o=u;r!==-1;)if(o=o.times(c),i=s.minus(o.div(n+=2)),o=o.times(c),s=i.plus(o.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===i.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),oe=!0,Z(s,l.precision=m,l.rounding=d,!0)};_.isFinite=function(){return!!this.d};_.isInteger=_.isInt=function(){return!!this.d&&ze(this.e/te)>this.d.length-2};_.isNaN=function(){return!this.s};_.isNegative=_.isNeg=function(){return this.s<0};_.isPositive=_.isPos=function(){return this.s>0};_.isZero=function(){return!!this.d&&this.d[0]===0};_.lessThan=_.lt=function(r){return this.cmp(r)<0};_.lessThanOrEqualTo=_.lte=function(r){return this.cmp(r)<1};_.logarithm=_.log=function(r){var e,t,n,o,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.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(oe=!1,a=m+p,s=jt(u,a),n=e?Uo(l,a+10):jt(r,a),c=he(s,n,a,1),qn(c.d,o=m,d))do if(a+=10,s=jt(u,a),n=e?Uo(l,a+10):jt(r,a),c=he(s,n,a,1),!i){+De(c.d).slice(o+1,o+15)+1==1e14&&(c=Z(c,m+1,0));break}while(qn(c.d,o+=10,d));return oe=!0,Z(c,m,d)};_.minus=_.sub=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.constructor;if(r=new y(r),!p.d||!r.d)return!p.s||!r.s?r=new y(NaN):p.d?r.s=-r.s:r=new y(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(u=p.d,d=r.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])r.s=-r.s;else if(u[0])r=new y(p);else return new y(c===3?-0:0);return oe?Z(r,a,c):r}if(t=ze(r.e/te),l=ze(p.e/te),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/te),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}i=0}for(m&&(e=u,u=d,d=e,r.s=-r.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>i;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=kt-1;--u[o],u[n]+=kt}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(r.d=u,r.e=Xo(u,t),oe?Z(r,a,c):r):new y(c===3?-0:0)};_.modulo=_.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?Z(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=he(t,r.abs(),0,3,1),e.s*=r.s):e=he(t,r,0,n.modulo,1),e=e.times(r),oe=!0,t.minus(e))};_.naturalExponential=_.exp=function(){return $r(this)};_.naturalLogarithm=_.ln=function(){return jt(this)};_.negated=_.neg=function(){var r=new this.constructor(this);return r.s=-r.s,Z(r)};_.plus=_.add=function(r){var e,t,n,o,i,s,a,c,u,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(u=m.d,l=r.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(r=new d(m)),oe?Z(r,a,c):r;if(i=ze(m.e/te),n=ze(r.e/te),u=u.slice(),o=i-n,o){for(o<0?(t=u,o=-o,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/te),s=i>s?i+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=u.length,o=l.length,s-o<0&&(o=s,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/kt|0,u[o]%=kt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=Xo(u,n),oe?Z(r,a,c):r};_.precision=_.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Ht+r);return t.d?(e=Ws(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};_.round=function(){var r=this,e=r.constructor;return Z(new e(r),r.e+1,e.rounding)};_.sine=_.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+te,n.rounding=1,t=Tc(n,Xs(n,t)),n.precision=r,n.rounding=e,Z(vt>2?t.neg():t,r,e,!0)):new n(NaN)};_.squareRoot=_.sqrt=function(){var r,e,t,n,o,i,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(oe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=De(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=ze((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(he(s,i,t+2,1)).times(.5),De(i.d).slice(0,t)===(e=De(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(Z(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(Z(n,c+1,1),r=!n.times(n).eq(s));break}return oe=!0,Z(n,c,l.rounding,r)};_.tangent=_.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=he(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,Z(vt==2||vt==4?t.neg():t,r,e,!0)):new n(NaN)};_.times=_.mul=function(r){var e,t,n,o,i,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=ze(l.e/te)+ze(r.e/te),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,s=c,c=u,u=s),i=[],s=c+u,n=s;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%kt|0,e=a/kt|0;i[o]=(i[o]+e)%kt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),r.d=i,r.e=Xo(i,t),oe?Z(r,m.precision,m.rounding):r};_.toBinary=function(r,e){return ei(this,2,r,e)};_.toDecimalPlaces=_.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(nt(r,0,Zt),e===void 0?e=n.rounding:nt(e,0,8),Z(t,r+t.e+1,e))};_.toExponential=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Ot(n,!0):(nt(r,0,Zt),e===void 0?e=o.rounding:nt(e,0,8),n=Z(new o(n),r+1,e),t=Ot(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toFixed=function(r,e){var t,n,o=this,i=o.constructor;return r===void 0?t=Ot(o):(nt(r,0,Zt),e===void 0?e=i.rounding:nt(e,0,8),n=Z(new i(o),r+o.e+1,e),t=Ot(n,!1,r+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};_.toFraction=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),i=e.e=Ws(y)-p.e-1,s=i%te,e.d[0]=Ne(10,s<0?te+s:s),r==null)r=i>0?e:u;else{if(a=new f(r),!a.isInt()||a.lt(u))throw Error(Ht+a);r=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(De(y)),l=f.precision,f.precision=i=y.length*te*2;m=he(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(r)!=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=he(r.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=he(u,n,i,1).minus(p).abs().cmp(he(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};_.toHexadecimal=_.toHex=function(r,e){return ei(this,16,r,e)};_.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:nt(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(oe=!1,t=he(t,r,0,e,1).times(r),oe=!0,Z(t)):(r.s=t.s,t=r),t};_.toNumber=function(){return+this};_.toOctal=function(r,e){return ei(this,8,r,e)};_.toPower=_.pow=function(r){var e,t,n,o,i,s,a=this,c=a.constructor,u=+(r=new c(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new c(Ne(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,r.eq(1))return Z(a,n,i);if(e=ze(r.e/te),e>=r.d.length-1&&(t=u<0?-u:u)<=wc)return o=qs(c,a,t,n),r.s<0?new c(1).div(o):Z(o,n,i);if(s=a.s,s<0){if(e<r.d.length-1)return new c(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Ne(+a,u),e=t==0||!isFinite(t)?ze(u*(Math.log("0."+De(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(oe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=$r(r.times(jt(a,n+t)),n),o.d&&(o=Z(o,n+5,1),qn(o.d,n,i)&&(e=n+10,o=Z($r(r.times(jt(a,e+t)),e),e+5,1),+De(o.d).slice(n+1,n+15)+1==1e14&&(o=Z(o,n+1,0)))),o.s=s,oe=!0,c.rounding=i,Z(o,n,i))};_.toPrecision=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Ot(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(nt(r,1,Zt),e===void 0?e=o.rounding:nt(e,0,8),n=Z(new o(n),r,e),t=Ot(n,r<=n.e||n.e<=o.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toSignificantDigits=_.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(nt(r,1,Zt),e===void 0?e=n.rounding:nt(e,0,8)),Z(new n(t),r,e)};_.toString=function(){var r=this,e=r.constructor,t=Ot(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};_.truncated=_.trunc=function(){return Z(new this.constructor(this),this.e+1,1)};_.valueOf=_.toJSON=function(){var r=this,e=r.constructor,t=Ot(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function De(r){var e,t,n,o=r.length-1,i="",s=r[0];if(o>0){for(i+=s,e=1;e<o;e++)n=r[e]+"",t=te-n.length,t&&(i+=Yt(t)),i+=n;s=r[e],n=s+"",t=te-n.length,t&&(i+=Yt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function nt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Ht+r)}function qn(r,e,t,n){var o,i,s,a;for(i=r[0];i>=10;i/=10)--e;return--e<0?(e+=te,o=0):(o=Math.ceil((e+1)/te),e%=te),i=Ne(10,te-e),a=r[o]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==i||t>3&&a+1==i/2)&&(r[o+1]/i/100|0)==Ne(10,e-2)-1||(a==i/2||a==0)&&(r[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),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(r[o+1]/i/1e3|0)==Ne(10,e-3)-1,s}function Do(r,e,t){for(var n,o=[0],i,s=0,a=r.length;s<a;){for(i=o.length;i--;)o[i]*=e;for(o[0]+=jr.indexOf(r.charAt(s++)),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 hc(r,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/zo(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),r.precision+=t,e=xn(r,1,e.times(o),new r(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var he=function(){function r(n,o,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*o+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,o,i,s){var a,c;if(i!=s)c=i>s?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,s){for(var a=0;i--;)n[i]-=a,a=n[i]<o[i]?1:0,n[i]=a*s+n[i]-o[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,i,s,a,c){var u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B,L,D,V=n.constructor,H=n.s==o.s?1:-1,G=n.d,q=o.d;if(!G||!G[0]||!q||!q[0])return new V(!n.s||!o.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?H*0:H/0);for(c?(p=1,l=n.e-o.e):(c=kt,p=te,l=ze(n.e/p)-ze(o.e/p)),L=q.length,R=G.length,g=new V(H),w=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,i==null?(T=i=V.precision,s=V.rounding):a?T=i+(n.e-o.e)+1:T=i,T<0)w.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,q=q[0],T++;(m<R||d)&&T--;m++)S=d*c+(G[m]||0),w[m]=S/q|0,d=S%q|0;y=d||m<R}else{for(d=c/(q[0]+1)|0,d>1&&(q=r(q,d,c),G=r(G,d,c),L=q.length,R=G.length),x=L,A=G.slice(0,L),k=A.length;k<L;)A[k++]=0;D=q.slice(),D.unshift(0),B=q[0],q[1]>=c/2&&++B;do d=0,u=e(q,A,L,k),u<0?(I=A[0],L!=k&&(I=I*c+(A[1]||0)),d=I/B|0,d>1?(d>=c&&(d=c-1),f=r(q,d,c),b=f.length,k=A.length,u=e(f,A,b,k),u==1&&(d--,t(f,L<b?D:q,b,c))):(d==0&&(u=d=1),f=q.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,c),u==-1&&(k=A.length,u=e(q,A,L,k),u<1&&(d++,t(A,L<k?D:q,k,c))),k=A.length):u===0&&(d++,A=[0]),w[m++]=d,u&&A[0]?A[k++]=G[x]||0:(A=[G[x]],k=1);while((x++<R||A[0]!==void 0)&&T--);y=A[0]!==void 0}w[0]||w.shift()}if(p==1)g.e=l,vs=y;else{for(m=1,d=w[0];d>=10;d/=10)m++;g.e=m+l*p-1,Z(g,a?i+g.e+1:i,s,y)}return g}}();function Z(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(o=1,a=m[0];a>=10;a/=10)o++;if(i=e-o,i<0)i+=te,s=e,l=m[d=0],c=l/Ne(10,o-s-1)%10|0;else if(d=Math.ceil((i+1)/te),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,i%=te,s=i-te+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=te,s=i-te+o,c=s<0?0:l/Ne(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Ne(10,o-s-1)),u=t<4?(c||n)&&(t==0||t==(r.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/Ne(10,o-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=r.e+1,m[0]=Ne(10,(te-e%te)%te),r.e=-e||0):m[0]=r.e=0,r;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Ne(10,te-i),m[d]=s>0?(l/Ne(10,o-s)%Ne(10,s)|0)*a:0),u)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(r.e++,m[0]==kt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=kt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function Ot(r,e,t){if(!r.isFinite())return Gs(r);var n,o=r.e,i=De(r.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Yt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(r.e<0?"e":"e+")+r.e):o<0?(i="0."+Yt(-o-1)+i,t&&(n=t-s)>0&&(i+=Yt(n))):o>=s?(i+=Yt(o+1-s),t&&(n=t-o-1)>0&&(i=i+"."+Yt(n))):((n=o+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(i+="."),i+=Yt(n))),i}function Xo(r,e){var t=r[0];for(e*=te;t>=10;t/=10)e++;return e}function Uo(r,e,t){if(e>Pc)throw oe=!0,t&&(r.precision=t),Error(Vs);return Z(new r(Wo),e,1,!0)}function ht(r,e,t){if(e>Zr)throw Error(Vs);return Z(new r(qo),e,t,!0)}function Ws(r){var e=r.length-1,t=e*te+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function Yt(r){for(var e="";r--;)e+="0";return e}function qs(r,e,t,n){var o,i=new r(1),s=Math.ceil(n/te+4);for(oe=!1;;){if(t%2&&(i=i.times(e),Ms(i.d,s)&&(o=!0)),t=ze(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),Ms(e.d,s)}return oe=!0,i}function Ns(r){return r.d[r.d.length-1]&1}function Us(r,e,t){for(var n,o=new r(e[0]),i=0;++i<e.length;)if(n=new r(e[i]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function $r(r,e){var t,n,o,i,s,a,c,u=0,l=0,m=0,d=r.constructor,p=d.rounding,y=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(oe=!1,c=y):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Ne(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=Z(i.times(r),c,1),t=t.times(++l),a=s.plus(he(i,t,c,1)),De(a.d).slice(0,c)===De(s.d).slice(0,c)){for(o=m;o--;)s=Z(s.times(s),c,1);if(e==null)if(u<3&&qn(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return Z(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function jt(r,e){var t,n,o,i,s,a,c,u,l,m,d,p=1,y=10,f=r,b=f.d,g=f.constructor,w=g.rounding,A=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(oe=!1,l=A):l=e,g.precision=l+=y,t=De(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=De(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return u=Uo(g,l+2,A).times(i+""),f=jt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=A,e==null?Z(f,A,w,oe=!0):f;for(m=f,c=s=f=he(f.minus(1),f.plus(1),l,1),d=Z(f.times(f),l,1),o=3;;){if(s=Z(s.times(d),l,1),u=c.plus(he(s,new g(o),l,1)),De(u.d).slice(0,l)===De(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(Uo(g,l+2,A).times(i+""))),c=he(c,new g(p),l,1),e==null)if(qn(c.d,l-y,w,a))g.precision=l+=y,u=s=f=he(m.minus(1),m.plus(1),l,1),d=Z(f.times(f),l,1),o=a=1;else return Z(c,g.precision=A,w,oe=!0);else return g.precision=A,c;c=u,o+=2}}function Gs(r){return String(r.s*r.s/0)}function Jr(r,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,r.e=t=t-n-1,r.d=[],n=(t+1)%te,t<0&&(n+=te),n<o){for(n&&r.d.push(+e.slice(0,n)),o-=te;n<o;)r.d.push(+e.slice(n,n+=te));e=e.slice(n),n=te-e.length}else n-=o;for(;n--;)e+="0";r.d.push(+e),oe&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function kc(r,e){var t,n,o,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ds.test(e))return Jr(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(gc.test(e))t=16,e=e.toLowerCase();else if(bc.test(e))t=2;else if(Ac.test(e))t=8;else throw Error(Ht+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("."),s=i>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,o=qs(n,new n(t),i,i*2)),u=Do(e,t,kt),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(r.s*0):(r.e=Xo(u,l),r.d=u,oe=!1,s&&(r=he(r,o,a*4)),c&&(r=r.times(Math.abs(c)<54?Ne(2,c):Un.pow(2,c))),oe=!0,r)}function Tc(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:xn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/zo(5,t)),e=xn(r,2,e,e);for(var o,i=new r(5),s=new r(16),a=new r(20);t--;)o=e.times(e),e=e.times(i.plus(o.times(s.times(o).minus(a))));return e}function xn(r,e,t,n,o){var i,s,a,c,u=1,l=r.precision,m=Math.ceil(l/te);for(oe=!1,c=t.times(t),a=new r(n);;){if(s=he(a.times(c),new r(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=he(s.times(c),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function zo(r,e){for(var t=r;--e;)t*=r;return t}function Xs(r,e){var t,n=e.s<0,o=ht(r,r.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return vt=n?4:1,e;if(t=e.divToInt(o),t.isZero())vt=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return vt=Ns(t)?n?2:3:n?4:1,e;vt=Ns(t)?n?1:4:n?3:2}return e.minus(o).abs()}function ei(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor,y=t!==void 0;if(y?(nt(t,1,Zt),n===void 0?n=p.rounding:nt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=Gs(r);else{for(l=Ot(r),s=l.indexOf("."),y?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Do(Ot(d),10,o),d.e=d.d.length),m=Do(l,10,o),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(r=new p(r),r.d=m,r.e=i,r=he(r,d,t,n,0,o),m=r.d,i=r.e,u=vs),s=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(r.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(s=0,l="";s<c;s++)l+=jr.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=Do(l,o,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=jr.charAt(m[s])}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 r.s<0?"-"+l:l}function Ms(r,e){if(r.length>e)return r.length=e,!0}function Ic(r){return new this(r).abs()}function Bc(r){return new this(r).acos()}function xc(r){return new this(r).acosh()}function Sc(r,e){return new this(r).plus(e)}function Kc(r){return new this(r).asin()}function Cc(r){return new this(r).asinh()}function Rc(r){return new this(r).atan()}function Oc(r){return new this(r).atanh()}function Lc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,o=this.rounding,i=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=ht(this,i,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?ht(this,n,o):new this(0),t.s=r.s):!r.d||e.isZero()?(t=ht(this,i,1).times(.5),t.s=r.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(he(r,e,i,1)),e=ht(this,i,1),this.precision=n,this.rounding=o,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(he(r,e,i,1)),t}function Nc(r){return new this(r).cbrt()}function Mc(r){return Z(r=new this(r),r.e+1,2)}function _c(r,e,t){return new this(r).clamp(e,t)}function vc(r){if(!r||typeof r!="object")throw Error(Go+"Object expected");var e,t,n,o=r.defaults===!0,i=["precision",1,Zt,"rounding",0,8,"toExpNeg",-Bn,0,"toExpPos",0,Bn,"maxE",0,Bn,"minE",-Bn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=Hr[t]),(n=r[t])!==void 0)if(ze(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Ht+t+": "+n);if(t="crypto",o&&(this[t]=Hr[t]),(n=r[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(Fs);else this[t]=!1;else throw Error(Ht+t+": "+n);return this}function Vc(r){return new this(r).cos()}function Fc(r){return new this(r).cosh()}function zs(r){var e,t,n;function o(i){var s,a,c,u=this;if(!(u instanceof o))return new o(i);if(u.constructor=o,_s(i)){u.s=i.s,oe?!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(s=0,a=i;a>=10;a/=10)s++;oe?s>o.maxE?(u.e=NaN,u.d=null):s<o.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[i]):(u.e=s,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return Jr(u,i.toString())}else if(c!=="string")throw Error(Ht+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Ds.test(i)?Jr(u,i):kc(u,i)}if(o.prototype=_,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=vc,o.clone=zs,o.isDecimal=_s,o.abs=Ic,o.acos=Bc,o.acosh=xc,o.add=Sc,o.asin=Kc,o.asinh=Cc,o.atan=Rc,o.atanh=Oc,o.atan2=Lc,o.cbrt=Nc,o.ceil=Mc,o.clamp=_c,o.cos=Vc,o.cosh=Fc,o.div=Ec,o.exp=Dc,o.floor=Wc,o.hypot=qc,o.ln=Uc,o.log=Gc,o.log10=zc,o.log2=Xc,o.max=Qc,o.min=Yc,o.mod=jc,o.mul=Hc,o.pow=Zc,o.random=$c,o.round=Jc,o.sign=el,o.sin=tl,o.sinh=nl,o.sqrt=ol,o.sub=rl,o.sum=il,o.tan=sl,o.tanh=al,o.trunc=ul,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return o.config(r),o}function Ec(r,e){return new this(r).div(e)}function Dc(r){return new this(r).exp()}function Wc(r){return Z(r=new this(r),r.e+1,3)}function qc(){var r,e,t=new this(0);for(oe=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function _s(r){return r instanceof Un||r&&r.toStringTag===Es||!1}function Uc(r){return new this(r).ln()}function Gc(r,e){return new this(r).log(e)}function Xc(r){return new this(r).log(2)}function zc(r){return new this(r).log(10)}function Qc(){return Us(this,arguments,"lt")}function Yc(){return Us(this,arguments,"gt")}function jc(r,e){return new this(r).mod(e)}function Hc(r,e){return new this(r).mul(e)}function Zc(r,e){return new this(r).pow(e)}function $c(r){var e,t,n,o,i=0,s=new this(1),a=[];if(r===void 0?r=this.precision:nt(r,1,Zt),n=Math.ceil(r/te),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(Fs);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],r%=te,n&&r&&(o=Ne(10,te-r),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-=te)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<te&&(t-=te-n)}return s.e=t,s.d=a,s}function Jc(r){return Z(r=new this(r),r.e+1,this.rounding)}function el(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function tl(r){return new this(r).sin()}function nl(r){return new this(r).sinh()}function ol(r){return new this(r).sqrt()}function rl(r,e){return new this(r).sub(e)}function il(){var r=0,e=arguments,t=new this(e[r]);for(oe=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return oe=!0,Z(t,this.precision,this.rounding)}function sl(r){return new this(r).tan()}function al(r){return new this(r).tanh()}function ul(r){return Z(r=new this(r),r.e+1,1)}_[Symbol.for("nodejs.util.inspect.custom")]=_.toString;_[Symbol.toStringTag]="Decimal";var Un=_.constructor=zs(Hr);Wo=new Un(Wo);qo=new Un(qo);var O=Un;import{PublicKey as ii}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as cl}from"@solana/spl-token";import{PublicKey as Ie,SystemProgram as Qs,SYSVAR_RENT_PUBKEY as ll}from"@solana/web3.js";function P({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var ti=[P({pubkey:cl,isWritable:!1}),P({pubkey:Qs.programId,isWritable:!1}),P({pubkey:ll,isWritable:!1})];function ni({publicKey:r,transformSol:e}){let t=oi(r.toString());if(t instanceof Ie)return e&&t.equals(Me)?Y:t;if(e&&t.toString()===Me.toBase58())return Y;if(typeof t=="string"){if(t===Ie.default.toBase58())return Ie.default;try{return new Ie(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function oi(r){try{return new Ie(r)}catch{return r}}var Qo=new Ie("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Yo=new Ie("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new Ie("SysvarRent111111111111111111111111111111111"),ri=new Ie("SysvarC1ock11111111111111111111111111111111"),Sn=new Ie("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),jo=new Ie("Sysvar1nstructions1111111111111111111111111"),Ho=Qs.programId,bp=new Ie("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),gp=new Ie("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Ap=new Ie("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),wp=new Ie("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Pp=new Ie("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),hp=new Ie("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),kp=new Ie("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Tp=new Ie("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Ip=new Ie("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Bp=new Ie("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),xp=new Ie("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Y=new Ie("So11111111111111111111111111111111111111112"),Me=Ie.default;function lt(r){return ni({publicKey:r,transformSol:!0})}import{PublicKey as ml}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ys}from"@solana/spl-token";var Lt={chainId:101,address:ml.default.toBase58(),programId:Ys.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},_e={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Ys.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};var si=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:s=!1}){if(e===Me.toBase58()||e instanceof ii&&Me.equals(e)){this.decimals=_e.decimals,this.symbol=_e.symbol,this.name=_e.name,this.mint=new ii(_e.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?ii.default:ni({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Be=si;Be.WSOL=new si(E(C({},_e),{mint:_e.address}));import $o from"big.js";import fl from"bn.js";import yl from"decimal.js-light";import dl from"toformat";var pl=dl,Gn=pl;var Zo=ue("module/fraction"),ai=Gn($o),Xn=Gn(yl),bl={[0]:Xn.ROUND_DOWN,[1]:Xn.ROUND_HALF_UP,[2]:Xn.ROUND_UP},gl={[0]:$o.roundDown,[1]:$o.roundHalfUp,[2]:$o.roundUp},pe=class{constructor(e,t=new fl(1)){this.numerator=$(e),this.denominator=$(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new pe(this.denominator,this.numerator)}add(e){let t=e instanceof pe?e:new pe($(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.add(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof pe?e:new pe($(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.sub(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof pe?e:new pe($(e));return new pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof pe?e:new pe($(e));return new pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Zo.logWithError(`${e} is not an integer.`),e<=0&&Zo.logWithError(`${e} is not positive.`),Xn.set({precision:e+1,rounding:bl[n]});let o=new Xn(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)||Zo.logWithError(`${e} is not an integer.`),e<0&&Zo.logWithError(`${e} is negative.`),ai.DP=e,ai.RM=gl[n]||1,new ai(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var wl=ue("Raydium_price"),rt=class extends pe{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=o,this.scalar=new pe(ui(n.decimals),ui(o.decimals))}get raw(){return new pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new rt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&wl.logWithError("mul token not equals");let n=super.mul(t);return new rt({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 ci=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Jo=ci;Jo.SOL=new ci(Lt);import Pl from"bn.js";var js=new pe(new Pl(100)),Qe=class extends pe{toSignificant(e=5,t,n){return this.mul(js).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(js).toFixed(e,t,n)}};var ft=new it(0),Zs=new it(1),Tf=new it(2),If=new it(3),Bf=new it(5),li=new it(10),xf=new it(100),Sf=new it(1e3),Kf=new it(1e4),Hs=9007199254740991;function $(r){let e=ue("Raydium_parseBigNumberish");if(r instanceof it)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new it(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Hs||r<=-Hs)&&e.logWithError(`BigNumberish number overflow: ${r}`),new it(String(r))):typeof r=="bigint"?new it(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new it(0))}function ui(r){return li.pow($(r))}function er(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var kl=ue("Raydium_amount"),Js=Gn(hl);function Tl(r,e){let t="0",n="0";if(r.includes(".")){let o=r.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):kl.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var ge=class extends pe{constructor(t,n,o=!0,i){let s=new tr(0),a=li.pow(new tr(t.decimals));if(o)s=$(n);else{let c=new tr(0),u=new tr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Tl(n.toString(),t.decimals);c=$(l),u=$(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ue(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 ge(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ge(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 Js.DP=this.token.decimals,new Js(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function $s(r){return typeof r=="object"&&r!==null&&![Be,ge,Il,pe,Bl,rt,Qe].some(e=>typeof e=="object"&&r instanceof e)}function ke(r){return typeof r=="string"?oi(r):Array.isArray(r)?r.map(e=>ke(e)):$s(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,ke(t)])):r}import{PublicKey as Yn,sendAndConfirmTransaction as fi,Transaction as jn,TransactionMessage as Hn,VersionedTransaction as Zn}from"@solana/web3.js";import _l from"axios";var F={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",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",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"};import{PublicKey as ta,ComputeBudgetProgram as ea,Transaction as nr,TransactionMessage as xl,Keypair as na,VersionedTransaction as oa}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Sl}from"@solana/spl-token";var Vt=ue("Raydium_txUtil"),ra=1644;function or(r){let e=[],t=[];return r.microLamports&&(e.push(ea.setComputeUnitPrice({microLamports:r.microLamports})),t.push(F.SetComputeUnitPrice)),r.units&&(e.push(ea.setComputeUnitLimit({units:r.units})),t.push(F.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Kn(r,e){var n,o;let t=e!=null?e:"confirmed";try{return((o=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:o.blockhash)||(await r.getRecentBlockhash(t)).blockhash}catch{return(await r.getRecentBlockhash(t)).blockhash}}function rr(r,e){r.length<1&&Vt.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Vt.logWithError(`no signers provided:, ${e.toString()}`);let t=new nr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<ra}catch{return!1}}async function ia(r,e,t,n=!0){let o=new ta("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new nr;s.feePayer=o;for(let u of e)rr([...s.instructions,u],[o])||(i.push(s),s=new nr,s.feePayer=o),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await Kl(r,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Vt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Vt.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Vt.debug("filteredLog:",c),l.length||Vt.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function sa(r,e){let t=r.match(/{["\w:,]+}/g);return!t||t.length!==1?Vt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Ft(r,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(r);return!n||n.length!==2?Vt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ae(r,e){let[t,n]=ta.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}async function Kl(r,e,t){let n=[];if(t){let o=await r.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=o.blockhash,u.lastValidBlockHeight=o.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.map(u=>{let l=r._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await r._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async o=>await(await r.simulateTransaction(o)).value))}catch(o){o instanceof Error&&Vt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:o.message})}return n}function zn({instructions:r,payer:e,signers:t}){return rr(r,[e,...t])}function Qn({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=na.generate().publicKey.toString()}){let i=new xl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new oa(i).serialize()).toString("base64").length<ra}catch{return!1}}var Cl=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r),Rl=r=>{let e=r.serialize({requireAllSignatures:!1,verifySignatures:!1});r instanceof oa&&(e=Cl(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function un(r){let e=[];return r.forEach(t=>{t instanceof nr&&(t.recentBlockhash||(t.recentBlockhash=Sl.toBase58()),t.feePayer||(t.feePayer=na.generate().publicKey)),e.push(Rl(t))}),console.log("simulate tx string:",e),e}import{PublicKey as ua,AddressLookupTableAccount as ir}from"@solana/web3.js";import{PublicKey as aa}from"@solana/web3.js";import{MINT_SIZE as Ol,TOKEN_PROGRAM_ID as Ll,getTransferFeeConfig as Nl,unpackMint as Ml}from"@solana/spl-token";var mi=ue("Raydium_accountInfo_util");async function Tt(r,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=di(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=di(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&mi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&mi.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new aa(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&mi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function ve(r,e,t){let n=await Tt(r,e.map(o=>o.pubkey),t);return e.map((o,i)=>E(C({},o),{accountInfo:n[i]}))}async function Cn({connection:r,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await ve(r,e.map(c=>({pubkey:lt(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Ol){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Ml(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=E(C({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Ll,feeConfig:(a=Nl(u))!=null?a:void 0})}return o[aa.default.toBase58()]=o[Y.toBase58()],o}async function pi({connection:r,address:e}){let t=await Tt(r,[...new Set(e.map(o=>o.toString()))].map(o=>new ua(o))),n={};for(let o=0;o<e.length;o++){let i=t[o],s=e[o];if(!i)continue;let a=new ir({key:s,state:ir.deserialize(i.data)});n[s.toString()]=a,sr[s.toString()]=a}return n}var sr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new ir({key:new ua("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:ir.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};var ar=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.api=e.api}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 _l.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}=or(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!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:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==Yn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;let t=new jn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=o||{},c=i!=null?i:await Kn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),un([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await fi(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[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),s=[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:s,signers:a,instructionTypes:c,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Kn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let w of s){let A=await fi(this.connection,w,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((A,k)=>(A.recentBlockhash=f,a[k].length&&A.sign(...a[k]),A));un(g);let w=await this.signAllTransactions(g);if(m){let A=0,k=[],I=async()=>{if(!w[A])return;let T=await this.connection.sendRawTransaction(w[A].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:w[A]}),d==null||d([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:k.map(T=>T.txId),signedTxs:w}}else{let A=[];for(let k=0;k<w.length;k+=1){let I=await this.connection.sendRawTransaction(w[k].serialize(),{skipPreflight:y});A.push(I)}return{txIds:A,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 f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:i}=y,s=Re(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=C(C({},this.cluster==="devnet"?{}:sr),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Yn(b));let l=await pi({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?Yn.default.toBase58():i!=null?i:await Kn(this.connection,this.blockhashCommitment),d=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new Zn(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var A;let{skipPreflight:g=!0,sendAndConfirm:w}=b||{};if(un([p]),(A=this.owner)!=null&&A.isKeyPair){let k=await this.connection.sendTransaction(p,{skipPreflight:g});if(w){let{lastValidBlockHeight:I,blockhash:T}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:T,lastValidBlockHeight:I,signature:k},"confirmed")}return{txId:k,signedTx:p}}if(this.signAllTransactions){let k=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(k[0],{skipPreflight:g}),signedTx:k[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}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),s=[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)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),un(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let w=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:A,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:A,signature:w},"confirmed"),b.push(w)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,w=[],A=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});w.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...w]),g++,this.connection.onSignature(k,I=>{let T=w.findIndex(S=>S.txId===k);T>-1&&(w[T].status=I.err?"error":"success"),d==null||d([...w]),I.err||A()},"processed"),this.connection.getSignatureStatus(k)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let w=0;w<b.length;w+=1){let A=await this.connection.sendTransaction(b[w],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=Re(u,["computeBudgetConfig"]),o=t?or(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>E(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...o.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Yn(b));if(c.length<12&&zn({instructions:p,payer:this.feePayer,signers:f})||zn({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");zn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new jn().add(...o.instructions,...c)):s.push(new jn().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);zn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new jn().add(...o.instructions,...c)):s.push(new jn().add(...c)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Kn(this.connection,this.blockhashCommitment);if(s.forEach(async(w,A)=>{w.recentBlockhash=b,a[A].length&&w.sign(...a[A])}),un(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let w=[];for(let A of s){let k=await fi(this.connection,A,this.signers.find(I=>I.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});w.push(k)}return{txIds:w,signedTxs:s}}return{txIds:await Promise.all(s.map(async w=>await this.connection.sendRawTransaction(w.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let w=await this.signAllTransactions(s);if(d){let A=0,k=[],I=async()=>{if(!w[A])return;let T=await this.connection.sendRawTransaction(w[A].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:w[A]}),p==null||p([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:k.map(T=>T.txId),signedTxs:w}}else{let A=[];for(let k=0;k<w.length;k+=1){let I=await this.connection.sendRawTransaction(w[k].serialize(),{skipPreflight:f});A.push(I)}return{txIds:A,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:o=[]}=b,i=Re(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:sr),n),a=Array.from(new Set([...this.lookupTableAddress,...o])),c=[];for(let w of a)s[w]===void 0&&c.push(new Yn(w));let u=await pi({connection:this.connection,address:c});for(let[w,A]of Object.entries(u))s[w]=A;let l=t?or(t):{instructions:[],instructionTypes:[]},m=await Kn(this.connection,this.blockhashCommitment),d=this.signers.reduce((w,A)=>E(C({},w),{[A.publicKey.toBase58()]:A}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(w=>{let A=[...f,w],k=t?[...l.instructions,...A]:A;if(f.length<12&&Qn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||Qn({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(w);else{if(f.length===0)throw Error("item ins too big");let I={};for(let T of[...new Set(a)])s[T]!==void 0&&(I[T]=s[T]);if(t&&Qn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Zn(T))}else{let T=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Zn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[w]}}),f.length>0){let A=[...new Set(f.map(k=>k.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&Qn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Zn(k))}else{let k=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Zn(k))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(w=>{w.some(A=>A.publicKey.equals(this.owner.publicKey))||w.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async w=>{var S;let{sequentially:A,onTxUpdate:k,recentBlockHash:I,skipPreflight:T=!0}=w||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),I&&(x.message.recentBlockhash=I)}),un(p),(S=this.owner)!=null&&S.isKeyPair){if(A){let x=[];for(let R of p){let B=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:D}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:D,lastValidBlockHeight:L,signature:B},"confirmed"),x.push(B)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(A){let R=0,B=[],L=async()=>{if(!x[R])return;let D=await this.connection.sendTransaction(x[R],{skipPreflight:T});B.push({txId:D,status:"sent",signedTx:x[R]}),k==null||k([...B]),R++,this.connection.onSignature(D,V=>{let H=B.findIndex(G=>G.txId===D);H>-1&&(B[H].status=V.err?"error":"success"),k==null||k([...B]),V.err||L()},"processed"),this.connection.getSignatureStatus(D)};return L(),{txIds:[],signedTxs:x}}else{let R=[];for(let B=0;B<x.length;B+=1){let L=await this.connection.sendTransaction(x[B],{skipPreflight:T});R.push(L)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var It=class{constructor(e){this._owner=e}get publicKey(){return It.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return It.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return It.isKeyPair(this._owner)}get isPublicKey(){return It.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!It.isKeyPair(e)}};function di(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var ca=r=>typeof r=="number";function la(r,e,t){let n=ca(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()<=n}function ma(r,e,t){let n=ca(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()>n}import{PublicKey as me}from"@solana/web3.js";var da=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),pa=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Jn=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Fy=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Ey=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),yi=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),fa=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Dy=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ya=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ba=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Wy=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),qy=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),vl=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Vl=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Fl=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),El=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),ga=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Uy=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Gy=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Dl=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Wl=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),ql=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),eo={IDO_PROGRAM_ID_V1:vl,IDO_PROGRAM_ID_V2:Vl,IDO_PROGRAM_ID_V3:Fl,IDO_PROGRAM_ID_V4:El};var Xy={SERUM_MARKET:me.default,OPENBOOK_MARKET:new me("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:me.default,FarmV3:new me("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new me("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new me("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new me("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new me("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new me("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new me("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Dl,CREATE_CPMM_POOL_AUTH:Wl,CREATE_CPMM_POOL_FEE_ACC:ql,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Ul}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gl}from"@solana/spl-token";function Ae(r,e,t){return ae([r.toBuffer(),(t!=null?t:Gl).toBuffer(),e.toBuffer()],new Ul("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Bt from"bn.js";var to=1e4;function fe(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let o=E(C({},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,s=new Bt(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===to){let c=new Bt(i.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=$t(r.mul(new Bt(to)),new Bt(to-i.transferFeeBasisPoints)),u=new Bt(i.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=$t(l.mul(new Bt(i.transferFeeBasisPoints)),new Bt(to)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=$t(r.mul(new Bt(i.transferFeeBasisPoints)),new Bt(to)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function xt(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function $t(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Bt(0))?t.add(new Bt(1)):t}var Oe={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://tokens.jup.ag/tokens?tags=lst,community",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}",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",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},gb=C({},Oe);var Aa="ray_tab_hash",bi="ray_req_hash",Xl=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(Aa);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(Aa,r)),r},ur=async n=>{var o=n,{logCount:r=1e3,removeLastLog:e}=o,t=Re(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(bi)||"[]").slice(0,r-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(E(C({},t),{time:Date.now(),session:Xl()}));try{localStorage.setItem(bi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(bi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return ur(E(C({},t),{logCount:r,removeLastLog:!0}))}};var cr=ue("Raydium_Api"),gi=new Map;var lr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=wa.create({baseURL:this.urlConfigs.BASE_HOST||Oe.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return cr.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(cr.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&ur({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),cr.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&ur({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),cr.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Oe.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Oe.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Oe.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await wa.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||Oe.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Oe.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Oe.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Oe.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Oe.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:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Oe.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Oe.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>gi.has(s)?(n.push(gi.get(s)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Oe.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{gi.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&lt(t).toBase58(),n&&n!=="undefined"?lt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Oe.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Oe.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Oe.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Oe.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Oe.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Oe.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Oe.JITO})).data}};var mr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Pa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as Ki,TOKEN_PROGRAM_ID as nn,AccountLayout as Ln,TOKEN_2022_PROGRAM_ID as Pm}from"@solana/spl-token";import{PublicKey as Ar,SystemProgram as hm}from"@solana/web3.js";var Ai=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Se=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ue(t)}createTxBuilder(e){return this.scope.checkOwner(),new ar({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(Ai(e))}logInfo(...e){this.logger.info(Ai(e))}logAndCreateError(...e){let t=Ai(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as fm,createCloseAccountInstruction as ym,createTransferInstruction as bm,TOKEN_PROGRAM_ID as On}from"@solana/spl-token";import{PublicKey as gm,SystemProgram as Am}from"@solana/web3.js";import wm from"bn.js";import{PublicKey as Ma,Keypair as lm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as mm}from"@solana/spl-token";import dm from"bn.js";import{PublicKey as om}from"@solana/web3.js";import Ba,{isBN as xa}from"bn.js";import{bits as zl,BitStructure as $b,blob as Ql,Blob as Jb,cstr as eg,f32 as tg,f32be as ng,f64 as og,f64be as rg,greedy as ig,Layout as Yl,ns64 as sg,ns64be as ag,nu64 as jl,nu64be as ug,offset as cg,s16 as lg,s16be as mg,s24 as dg,s24be as pg,s32 as Hl,s32be as fg,s40 as yg,s40be as bg,s48 as gg,s48be as Ag,s8 as wg,seq as Zl,struct as Pg,Structure as $l,u16 as Jl,u16be as hg,u24 as kg,u24be as Tg,u32 as em,u32be as Ig,u40 as Bg,u40be as xg,u48 as Sg,u48be as Kg,u8 as tm,UInt as nm,union as Cg,Union as Rg,unionLayoutDiscriminator as Og,utf8 as Lg}from"@solana/buffer-layout";var dr=Yl,ha=$l;var wi=nm;var ka=tm,Et=Jl;var Pi=em;var Ta=jl;var We=Hl;var Ia=Zl;var ye=Ql;var hi=zl;var cn=class extends dr{constructor(t,n,o){super(t,o);this.blob=ye(t),this.signed=n}decode(t,n=0){let o=new Ba(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 Ba(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},pr=class extends dr{constructor(t){super(8,t);this._lower=hi(Pi(),!1),this._upper=hi(Pi(),!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 C(C({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function W(r){return new wi(1,r)}function qe(r){return new wi(4,r)}function h(r){return new cn(8,!1,r)}function J(r){return new cn(16,!1,r)}function Sa(r){return new cn(1,!0,r)}function Rn(r){return new cn(8,!0,r)}function Ka(r){return new cn(16,!0,r)}var fr=class extends dr{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 K(r){return new fr(ye(32),e=>new om(e),e=>e.toBuffer(),r)}function Ue(r){return new fr(ka(),rm,im,r)}function rm(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function im(r){return r?1:0}var ki=class extends ha{decode(e,t){return super.decode(e,t)}};function v(r,e,t){return new ki(r,e,t)}function X(r,e,t){let n,o=typeof e=="number"?e:xa(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=xa(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,s)},set(i,s,a){return s==="count"&&(n=a),Reflect.set(i,s,a)}});return Ia(r,o,t)}var Jt=v([K("mint"),K("owner"),h("amount"),qe("delegateOption"),K("delegate"),W("state"),qe("isNativeOption"),h("isNative"),h("delegatedAmount"),qe("closeAuthorityOption"),K("closeAuthority")]);function sm(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Ti(r,...e){if(!sm(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Ii(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Ca(r,e){Ti(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var br=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),St=(r,e)=>r<<32-e|r>>>e;var Qg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function am(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Bi(r){return typeof r=="string"&&(r=am(r)),Ti(r),r}var yr=class{clone(){return this._cloneInto()}},Yg={}.toString;function Ra(r){let e=n=>r().update(Bi(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function um(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,u=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+u,a,n)}var Oa=(r,e,t)=>r&e^~r&t,La=(r,e,t)=>r&e^r&t^e&t,gr=class extends yr{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=br(this.buffer)}update(e){Ii(this);let{view:t,buffer:n,blockLen:o}=this;e=Bi(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=br(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ii(this),Ca(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;um(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=br(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:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var cm=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]),en=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),tn=new Uint32Array(64),xi=class extends gr{constructor(){super(64,32,8,!1),this.A=en[0]|0,this.B=en[1]|0,this.C=en[2]|0,this.D=en[3]|0,this.E=en[4]|0,this.F=en[5]|0,this.G=en[6]|0,this.H=en[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)tn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=tn[m-15],p=tn[m-2],y=St(d,7)^St(d,18)^d>>>3,f=St(p,17)^St(p,19)^p>>>10;tn[m]=f+tn[m-7]+y+tn[m-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=St(a,6)^St(a,11)^St(a,25),p=l+d+Oa(a,c,u)+cm[m]+tn[m]|0,f=(St(n,2)^St(n,13)^St(n,22))+La(n,o,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=o,o=n,n=p+f|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+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,s,a,c,u,l)}roundClean(){tn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Na=Ra(()=>new xi);var mA=ue("Raydium_Util");function _a({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:s}of t.value){let a=Jt.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:Ae(r,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),o.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Ma.default,amount:new dm(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function st({fromPublicKey:r,programId:e=mm}){let t=lm.generate().publicKey.toBase58().slice(0,32);return{publicKey:pm(r,t,e),seed:t}}function pm(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),o=Na(n);return new Ma(o)}function Si(r){let{mint:e,tokenAccount:t,owner:n,programId:o=On}=r;return fm(t,e,n,o)}function Nt(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=On}=r;return ym(e,t,o,n,i)}async function Dt(r){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Jt.span,n),c=$(t).add(new wm(a)),u=st({fromPublicKey:o,programId:On});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[Am.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Jt.span,programId:On}),Si({mint:new gm(_e.address),tokenAccount:u.publicKey,owner:i,programId:On})],instructionTypes:[F.CreateAccount,F.InitAccount],endInstructionTypes:s?[]:[F.CloseAccount],endInstructions:s?[]:[Nt({tokenAccount:u.publicKey,payer:o,owner:i})]}}function no({source:r,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=On}){return bm(r,e,t,BigInt(String(n)),o,i)}var oo=class extends Se{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}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 Ae(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<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:nn},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Pm},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=_a({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=nn,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),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!o||o&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Ar(t.tokenProgram||nn),m=this.getAssociatedTokenAccount(n,new Ar(l)),d=(a?[]:this.tokenAccountRawInfos).filter(w=>w.accountInfo.mint.equals(n)&&(!i||w.pubkey.equals(m))).sort((w,A)=>w.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(o===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let w=Ki(s,m,s,n,l);if(u){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(w),p.instructionTypes.push(F.CreateATA);else if(!(A.owner.equals(l)&&Ln.decode(A.data).mint.equals(n)&&Ln.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(w),p.instructionTypes.push(F.CreateATA);if(n.equals(Y)&&o.amount){let A=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(f=o.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),o.amount&&(p.instructions.push(no({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:nn})),p.instructionTypes.push(F.TransferAmount))}return c||(p.endInstructions.push(Nt({owner:s,payer:o.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(F.CloseAccount)),{account:m,instructionParams:p}}else{let w=st({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(Ln.span),k=hm.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:w.seed,newAccountPubkey:w.publicKey,lamports:A+Number((g=(b=o.amount)==null?void 0:b.toString())!=null?g:0),space:Ln.span,programId:l});return p.instructions.push(k,Si({mint:n,tokenAccount:w.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(F.CreateAccount),p.instructionTypes.push(F.InitAccount),c||(p.endInstructions.push(Nt({owner:s,payer:o.payer||s,tokenAccount:w.publicKey,programId:l})),p.endInstructionTypes.push(F.CloseAccount)),{account:w.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=nn,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,s=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await Ki(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[F.CreateATA],i=u}return o&&Y.toBase58()===t.toBase58()&&(a.endInstructions=[Nt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[F.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:s=nn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new Ar(Y).equals(i)){let p=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=Ki(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(nn)&&Ln.decode(f.data).mint.equals(i)&&Ln.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[F.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=nn,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Ar(Y))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=l,p=Re(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=m,p=Re(m,["tokenAccount"]);c=d,u.addInstruction(p)}return C({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as qm}from"@solana/spl-token";import{PublicKey as be,SystemProgram as Um}from"@solana/web3.js";import{PublicKey as qa}from"@solana/web3.js";var Ci=v([W("instruction")]),Ri=v([W("instruction")]),km=v([h("rewardState"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardLastUpdateTime"),h("totalReward"),h("totalRewardEmissioned"),h("rewardClaimed"),h("rewardPerSecond"),J("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),h("rewardType"),X(h(),15,"padding")]),Tm=v([h("state"),h("nonce"),K("lpVault"),K("rewardVault"),K(),K(),h(),h(),h("totalReward"),J("perShareReward"),h("lastSlot"),h("perSlotReward")]),Im=v([h("state"),h("nonce"),K("lpVault"),K("rewardVaultA"),h("totalRewardA"),J("perShareRewardA"),h("perSlotRewardA"),W("option"),K("rewardVaultB"),ye(7),h("totalRewardB"),J("perShareRewardB"),h("perSlotRewardB"),h("lastSlot"),K()]),Bm=v([h(),h("state"),h("nonce"),h("validRewardTokenNum"),J("rewardMultiplier"),h("rewardPeriodMax"),h("rewardPeriodMin"),h("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(km,5,"rewardInfos"),K("creator"),K(),X(h(),32,"padding")]),va=new Proxy(Tm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(r,e,t)}}),Va=new Proxy(Im,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},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(r,e,t)}}),ro=new Proxy(Bm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return E(C({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var s;return E(C({},i),{rewardType:((s=Object.entries(on).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),xm=v([h("isSet"),h("rewardPerSecond"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardType")]),Oi=v([W("instruction"),h("nonce"),X(xm,5,"rewardTimeInfo")]),Li=v([W("instruction"),h("rewardReopenTime"),h("rewardEndTime"),h("rewardPerSecond")]),Ni=v([W("instruction"),h("isSet"),h("rewardPerSecond"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardType")]),UA=v([h("state"),K("id"),K("owner"),h("deposited"),X(h(),1,"rewardDebts")]),io=v([h("state"),K("id"),K("owner"),h("deposited"),X(J(),1,"rewardDebts"),h(""),h("voteLockedBalance"),X(h(),15)]),GA=v([h("state"),K("id"),K("owner"),h("deposited"),X(h(),2,"rewardDebts")]),Fa=v([h("state"),K("id"),K("owner"),h("deposited"),X(J(),2,"rewardDebts"),X(h(),17)]),Ea=v([h(),h("state"),K("id"),K("owner"),h("deposited"),X(J(),5,"rewardDebts"),X(h(),16)]),Je=v([W("instruction"),h("amount")]),Sm=v([K("mint"),K("grantAuthority"),h("baselineVoteWeightScaledFactor"),h("maxExtraLockupVoteWeightScaledFactor"),h("lockupSaturationSecs"),Sa("digitShift"),X(W(),7,"reserved1"),X(h(),7,"reserved2")]),Da=v([ye(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(W(),32,"reserved1"),X(Sm,4,"votingMints"),Rn("timeOffset"),W("bump"),X(W(),7,"reserved2"),X(h(),11,"reserved3")]),Km=v([Rn("startTime"),Rn("endTime"),W("kind"),X(W(),15,"reserved")]),Cm=v([X(Km,1,"lockup"),h("amountDeposited_native"),h("amountInitiallyLockedNative"),Ue("isUsed"),Ue("allowClawback"),W("votingMintConfigIdx"),X(W(),29,"reserved")]),Wa=v([ye(8),K("voterAuthority"),K("registrar"),X(Cm,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),X(W(),94,"reserved")]);var $A=ue("Raydium_farm_config"),Ua=new qa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ga=new qa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Xa={3:va,5:Va,6:ro},za={3:io,5:Fa,6:Ea},Mi=r=>[3,5,6].indexOf(r)!==-1,_i=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,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(s=i[e])==null?void 0:s.call(i)},on={"Standard SPL":0,"Option tokens":1},yt={[da.toString()]:3,[pa.toString()]:5,[Jn.toString()]:6};import{PublicKey as se,SystemProgram as ln,SYSVAR_RENT_PUBKEY as Lm,SYSVAR_CLOCK_PUBKEY as uo,TransactionInstruction as Fe}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Nm,TOKEN_PROGRAM_ID as mt,ASSOCIATED_TOKEN_PROGRAM_ID as Mm}from"@solana/spl-token";import wr from"bn.js";function vi(r,e,t){return ae([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],r)}function Vi(r,e){return ae([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],r)}function Fi(r,e){return ae([e.toBuffer()],r)}function Ei(r,e,t){return ae([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],r)}function Di(r,e,t){return ae([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],r)}function Wi(r,e,t,n){return ae([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}import at from"bn.js";var so=ue("Raydium.farm.util");function ao({programId:r,poolId:e,mint:t,type:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return o}function Ye({programId:r,poolId:e,owner:t,version:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return o}var Qa=({programId:r,poolId:e})=>ae([e.toBuffer()],r);function Ya(r){return{isSet:new at(1),rewardPerSecond:$(r.perSecond),rewardOpenTime:$(r.openTime),rewardEndTime:$(r.endTime),rewardType:$(on[r.rewardType])}}function qi(r){return $(r.endTime).sub($(r.openTime)).mul($(r.perSecond))}function Nn(r){let e=za[r];return e||so.logWithError("invalid version",r),e}function Rm(r){let e=Xa[r];return e||so.logWithError("invalid version",r),e}function Om(r,e,t,n){if(r.version===3||r.version===5){if(r.lastSlot.gte(new at(t)))return r;let o=new at(t).sub(r.lastSlot);r.lastSlot=new at(t);for(let i of r.rewardInfos){if(e.amount.eq(new at(0)))continue;let s=i.perSlotReward.mul(o);i.perShareReward=i.perShareReward.add(s.mul(new at(10).pow(new at(r.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(r.version===6)for(let o of r.rewardInfos){if(o.rewardState.eq(new at(0)))continue;let i=at.min(new at(n),o.rewardEndTime);if(o.rewardOpenTime.gte(i))continue;let a=i.sub(o.rewardLastUpdateTime).mul(o.rewardPerSecond),c=o.totalReward.sub(o.totalRewardEmissioned);c.lt(a)?(a=c,o.rewardLastUpdateTime=o.rewardLastUpdateTime.add(c.div(o.rewardPerSecond))):o.rewardLastUpdateTime=i,!e.amount.eq(new at(0))&&(o.accRewardPerShare=o.accRewardPerShare.add(a.mul(r.rewardMultiplier).div(e.amount)),o.totalRewardEmissioned=o.totalRewardEmissioned.add(a))}return r}async function yw({connection:r,farmPools:e,owner:t,config:n,chainTime:o}){let i=!1,s=!1,a=new at(10),c=[];for(let d of e){let p=ke(d);p.version===6?s=!0:i=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:Ye({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await ve(r,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=C({},u[g]),y==="state"){let w=Rm(p);(!b||!b.data||b.data.length!==w.span)&&so.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=w.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Jt.span)&&so.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=Jt.decode(b.data);else if(y==="ledger"){let w=Nn(p);b&&b.data&&(b.data.length!==w.span&&so.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=w.decode(b.data))}}let m=s||i?await r.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Om(u[d].state,u[d].lpVault,m,o));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new at(9)):a.pow(new at(15)),b=p.rewardInfos.map((g,w)=>{let A=y.rewardDebts[w];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(A)});u[d].wrapped=E(C({},u[d].wrapped),{pendingRewards:b})}return u}function bw(r,e=Date.now()){if(r.version===6){let t=r.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>la(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ma(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=r.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Ui(r,e,t,n){let o=await r.getAccountInfo(e);if(o===null)throw Error("registrar info check error");let s=Da.decode(o.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await r.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=Wa.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var _m=ue("Raydium_farm_instruction"),co={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 lo(r){let{version:e,id:t,ledger:n,programId:o,owner:i}=r,s={3:9,5:10}[e];s||_m.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Ci.span);Ci.encode({instruction:s},a);let c=[P({pubkey:t}),P({pubkey:n}),P({pubkey:i,isWritable:!1}),P({pubkey:ln.programId,isWritable:!1}),P({pubkey:Lm,isWritable:!1})];return{instruction:new Fe({programId:o,keys:c,data:a}),instructionType:F.FarmV3CreateLedger}}function ja(r){var n;let e=Buffer.alloc(Oi.span);Oi.encode({instruction:0,nonce:new wr(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...ti,P({pubkey:r.farmId}),P({pubkey:r.farmAuthority,isWritable:!1}),P({pubkey:r.lpVault}),P({pubkey:r.lpMint,isWritable:!1}),P({pubkey:r.lockVault}),P({pubkey:r.lockMint,isWritable:!1}),P({pubkey:(n=r.lockUserAccount)!=null?n:Me}),P({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let o of r.rewardInfo)t.push(P({pubkey:o.rewardMint,isWritable:!1}),P({pubkey:o.rewardVault}),P({pubkey:o.userRewardToken}));return{instruction:new Fe({programId:r.programId,keys:t,data:e}),instructionType:F.FarmV6Create}}function Ha(r){let e=Buffer.alloc(Ri.span);Ri.encode({instruction:5},e);let t=[P({pubkey:mt,isWritable:!1}),P({pubkey:r.id}),P({pubkey:r.authority,isWritable:!1}),P({pubkey:r.lpVault,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}),P({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Fe({programId:r.programId,keys:t,data:e}),instructionType:F.FarmV6CreatorWithdraw}}function vm(r,e,t,n,o,i,s,a,c,u,l,m,d){let p=v([W("depositEntryIndex"),h("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:mt,isSigner:!1,isWritable:!1},{pubkey:s,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:!1},{pubkey:jo,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...co.voterStakeRegistryDeposit,...f]);return new Fe({keys:y,programId:r,data:b})}function Vm(r,e,t,n){let o=v([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:ln.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([...co.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Fe({keys:i,programId:r,data:a})}function Fm(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=v([W("depositEntryIndex"),h("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:mt,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:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:jo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let w=Buffer.from([...co.voterStakeRegistryWithdraw,...g]);return new Fe({keys:b,programId:r,data:w})}function Em(r,e,t,n,o,i){let s=v([W("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:ln.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Fe({keys:a,programId:r,data:c})}function Dm(r,e,t,n,o,i,s,a){let c=v([W("voterBump"),W("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:ln.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:jo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...co.voterStakeRegistryCreateVoter,...l]);return new Fe({keys:u,programId:r,data:m})}function Wm(r,e,t,n,o,i,s,a,c,u,l,m){let d=v([W("depositEntryIndex"),W("kind"),W("option"),h("startTs"),qe("periods"),Ue("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:ln.programId,isSigner:!1,isWritable:!1},{pubkey:mt,isSigner:!1,isWritable:!1},{pubkey:Mm,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...co.voterStakeRegistryCreateDepositEntry,...y]);return new Fe({keys:p,programId:r,data:f})}async function Nw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=vi(n,o,i).publicKey,l=Ye({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new wr(0)))throw Error("user do not has new stake amount");let y=Vi(e,a).publicKey,f=Fi(e,a).publicKey,{publicKey:b,nonce:g}=Ei(n,u,s),w=Ae(b,y,c).publicKey,{publicKey:A,nonce:k}=Di(n,u,s),I=Wi(t,o,i,s).publicKey,T=[],S=Ae(s,y,c).publicKey;if(await r.getAccountInfo(S)===null&&T.push(Nm(s,S,s,y)),await r.getAccountInfo(b)===null){let D=Em(t,o,s,i,s,I);T.push(D,Dm(n,u,b,A,s,s,g,k))}let{index:B,isInit:L}=await Ui(r,u,b,y);return L||T.push(Wm(n,u,b,w,s,s,y,B,0,void 0,0,!1)),T.push(vm(n,u,b,w,S,s,l,a,y,f,e,B,p),Vm(n,u,b,A)),T}async function Mw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=vi(n,o,i).publicKey,l=Ye({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data);if(d.voteLockedBalance.eq(new wr(0)))throw Error("user has vote locked balance = 0");let p=Vi(e,a).publicKey,y=Fi(e,a).publicKey,{publicKey:f}=Ei(n,u,s),b=Ae(f,p,c).publicKey,{publicKey:g}=Di(n,u,s),w=Wi(t,o,i,s).publicKey,A=[],{index:k,isInit:I}=await Ui(r,u,f,p);if(!I)throw Error("deposit entry index check error");return A.push(Fm(n,u,f,s,w,g,b,Ae(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),A}function Gi({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(Li.span);Li.encode({instruction:3,rewardReopenTime:$(o.openTime),rewardEndTime:$(o.endTime),rewardPerSecond:$(o.perSecond)},i);let s=[P({pubkey:mt,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:r,isWritable:!1,isSigner:!0})];return new Fe({programId:n.programId,keys:s,data:i})}function Xi({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(Ni.span);Ni.encode({instruction:4,isSet:new wr(1),rewardPerSecond:$(o.perSecond),rewardOpenTime:$(o.openTime),rewardEndTime:$(o.endTime),rewardType:$(on[o.rewardType])},i);let s=[...ti,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:o.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:r,isWritable:!1,isSigner:!0})];return new Fe({programId:t.programId,keys:s,data:i})}function _w(r){let{farmInfo:e,farmKeys:t,version:n,lpAccount:o,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=r,[l,m]=[new se(e.programId),new se(e.id)],d=Ye({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(Je.span);Je.encode({instruction:a,amount:c},p);let y=n===6?[P({pubkey:mt,isWritable:!1}),...u?[P({pubkey:ln.programId,isWritable:!1})]:[],P({pubkey:m}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:new se(t.lpVault)}),P({pubkey:d}),P({pubkey:s,isWritable:!1,isSigner:!0}),P({pubkey:o})]:[P({pubkey:m}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:d}),P({pubkey:s,isWritable:!1,isSigner:!0}),P({pubkey:o}),P({pubkey:new se(t.lpVault)}),P({pubkey:i[0]}),P({pubkey:new se(t.rewardInfos[0].vault)}),P({pubkey:uo,isWritable:!1}),P({pubkey:mt,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(P({pubkey:i[f]})),y.push(P({pubkey:new se(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(P({pubkey:new se(t.rewardInfos[f].vault)})),y.push(P({pubkey:i[f]}));return new Fe({programId:l,keys:y,data:p})}function mo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new se(e.programId),new se(e.id)],u=Ye({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Je.span);Je.encode({instruction:2,amount:$(s)},l);let m=[P({pubkey:mt,isWritable:!1}),P({pubkey:c}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:new se(t.lpVault)}),P({pubkey:u}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new se(t.rewardInfos[d].vault)})),m.push(P({pubkey:o[d]}));return new Fe({programId:a,keys:m,data:l})}function po(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new se(e.programId),new se(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Je.span);Je.encode({instruction:12,amount:$(s)},m);let d=[P({pubkey:u}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new se(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new se(t.rewardInfos[0].vault)}),P({pubkey:uo,isWritable:!1}),P({pubkey:mt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:o[p]})),d.push(P({pubkey:new se(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Fe({programId:c,keys:d,data:m})}function fo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new se(e.programId),new se(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Je.span);Je.encode({instruction:11,amount:$(s)},m);let d=[P({pubkey:u}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new se(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new se(t.rewardInfos[0].vault)}),P({pubkey:uo,isWritable:!1}),P({pubkey:mt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Fe({programId:c,keys:d,data:m})}function Za(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new se(e.programId),new se(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Je.span);Je.encode({instruction:10,amount:$(s)},m);let d=[P({pubkey:u}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new se(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new se(t.rewardInfos[0].vault)}),P({pubkey:uo,isWritable:!1}),P({pubkey:mt,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Fe({programId:c,keys:d,data:m})}function $a(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new se(e.programId),new se(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Je.span);Je.encode({instruction:11,amount:$(s)},m);let d=[P({pubkey:u}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new se(t.lpVault)}),P({pubkey:o[0]}),P({pubkey:new se(t.rewardInfos[0].vault)}),P({pubkey:uo,isWritable:!1}),P({pubkey:mt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:o[p]})),d.push(P({pubkey:new se(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Fe({programId:c,keys:d,data:m})}function Ja(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new se(e.programId),new se(e.id)],u=Ye({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Je.span);Je.encode({instruction:1,amount:$(s)},l);let m=[P({pubkey:mt,isWritable:!1}),P({pubkey:ln.programId,isWritable:!1}),P({pubkey:c}),P({pubkey:new se(t.authority),isWritable:!1}),P({pubkey:new se(t.lpVault)}),P({pubkey:u}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new se(t.rewardInfos[d].vault)})),m.push(P({pubkey:o[d]}));return new Fe({programId:a,keys:m,data:l})}var yo=class extends Se{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Me)){let n=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:qi(E(C({},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=Jn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new be(e.lpMint.address),lockInfo:{lockMint:Ua,lockVault:Ga},version:6,rewardInfos:t,programId:o},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=st({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(ro.span);c.addInstruction({instructions:[Um.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:ro.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Qa({programId:new be(a.programId),poolId:l.publicKey}),y=ao({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let I of a.rewardInfos){I.openTime>=I.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",I.openTime.toString()),isNaN(on[I.rewardType])&&this.logAndCreateError("rewardType error",I.rewardType),Number(I.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",I.perSecond),f.push(Ya(I));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:I,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=I.mint.equals(Me)?new be(_e.address):I.mint;b.push({rewardMint:x,rewardVault:ao({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({mint:new be(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});w&&c.addInstruction(w),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:k}=ja({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[A],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o}){var b;let i=yt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(Me)?new be(_e.address):n.mint,l=a.rewardInfos.findIndex(g=>new be(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:Me,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Gi({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[F.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o}){var l;let i=yt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Me)?new be(_e.address):m.mint,p=a.rewardInfos.findIndex(A=>new be(A.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Me,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let w=Gi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[w],instructionTypes:[F.FarmV6Restart]})}return u.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i}=e,s=yt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=o.mint.equals(Me)?new be(_e.address):o.mint,m=ao({programId:new be(n.programId),poolId:new be(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:o,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,u.addInstruction({instructions:[Xi({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:o})],instructionTypes:[F.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i}=e,s=yt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of o){let m=l.mint.equals(Me)?new be(_e.address):l.mint,d=ao({programId:new be(n.programId),poolId:new be(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Xi({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:E(C({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[F.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=yt[d];Mi(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new be(n.programId),new be(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=Ye({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),w=this.createTxBuilder();w.addCustomComputeBudget(l);let A={};for(let V of this.scope.account.tokenAccounts)if(a){let H=Ae(this.scope.ownerPubKey,V.mint,V.programId).publicKey;V.publicKey&&H.equals(V.publicKey)&&(A[V.mint.toString()]=V.publicKey)}else A[V.mint.toString()]=V.publicKey;let k=b.lpMint,I=A[k.address];I||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let V of m){let H=s&&V.mint.address===Y.toString(),G=A[V.mint.address];if(!G){let{account:q,instructionParams:$e}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:V.mint.programId,mint:new be(V.mint.address),notUseTokenAccount:H,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!H,associatedOnly:H?!1:a,checkCreateATAOwner:c});G=q,$e&&w.addInstruction($e)}A[V.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Nn(p).decode(x.data)),n.programId!==Jn.toString()&&!S){let{instruction:V,instructionType:H}=lo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[V],instructionTypes:[H]})}let R=_i({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let B={amount:$(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(V=>new be(V))},L=p===6?Ja(B):p===5?$a(B):Za(B),D={3:F.FarmV3Deposit,5:F.FarmV5Deposit,6:F.FarmV6Deposit};return w.addInstruction({instructions:[L],instructionTypes:[D[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=yt[n.programId];Mi(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(c){let B=Ae(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&B.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=Ye({programId:new be(n.programId),poolId:new be(n.id),owner:this.scope.ownerPubKey,version:p}),B=await this.scope.connection.getAccountInfo(R);if(B)Nn(p).decode(B.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:D}=lo({id:new be(y.id),programId:new be(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[D]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:B})}let g=y.lpMint.address,w=s&&g===Y.toString(),A=b[g.toString()];if(!A){let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new be(g),notUseTokenAccount:w,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:w?!1:c,checkCreateATAOwner:u});A=R,B&&f.addInstruction(B)}b[g.toString()]=A;let k=[];for(let R of d){let B=s&&R.mint.address===Y.toString(),L=b[R.mint.address];if(!L){let{account:D,instructionParams:V}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new be(R.mint.address),notUseTokenAccount:B,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!B,associatedOnly:B?!1:c,checkCreateATAOwner:u});L=D,V&&f.addInstruction(V)}b[R.mint.address]=L,k.push(L)}let I=_i({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});I&&this.logAndCreateError(I);let T={amount:$(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new be(R))},S=p===6?mo(T):p===5?po(T):fo(T),x={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let o=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=yt[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Me.toString()?new be(_e.address):t),a=o.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Me,u=this.createTxBuilder(),l;if(t.equals(Me)){let y=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:qi(E(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new O(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[qm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[F.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Ha({programId:o.programId,id:o.id,authority:o.authority,lpVault:o.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=Ae(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>E(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:w}=y,A=yt[f],k=b.address,I=n&&k===Y.toString(),T=m[k];if(!T){let{account:D,instructionParams:V}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new be(k),notUseTokenAccount:I,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:I?!1:i,checkCreateATAOwner:s});T=D,V&&l.addInstruction(V)}m[k.toString()]=T;let S=[];for(let D of g){let V=n&&D.mint.address===Y.toString(),H=m[D.mint.address];if(!H){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new be(D.mint.address),notUseTokenAccount:V,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!V,associatedOnly:V?!1:i,checkCreateATAOwner:s});H=G,q&&l.addInstruction(q)}m[D.mint.address]=H,S.push(H)}let x=p[w],R={amount:ft,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(D=>new be(D))},B=A===6?mo(R):A===5?po(R):fo(R),L={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};l.addInstruction({instructions:[B],instructionTypes:[L[A]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as He}from"@solana/web3.js";import{AccountLayout as Od,NATIVE_MINT as Vu,TOKEN_PROGRAM_ID as Vn}from"@solana/spl-token";var rP=v([qe("mintAuthorityOption"),K("mintAuthority"),h("supply"),W("decimals"),W("isInitialized"),qe("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Gm}from"@solana/web3.js";import{MintLayout as eu,TOKEN_PROGRAM_ID as Xm}from"@solana/spl-token";var fP=async({connection:r,mint:e})=>{let t=await r.getAccountInfo(new Gm(e));return!t||t.data.length!==eu.span?void 0:eu.decode(t.data)},yP=({mint:r,decimals:e,programId:t=Xm,logoURI:n="",priority:o=3})=>{let i=r.toBase58().substring(0,6);return{address:r.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:o}},Pr=r=>new Be({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),bo=o=>{var i=o,{amount:r,isRaw:e,name:t}=i,n=Re(i,["amount","isRaw","name"]);return new ge(new Be({mint:lt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};function bP(r){return r.address===Lt.address?_e:r}function gP(r){return r.address===_e.address?Lt:r}var et=o=>{var i=o,{address:r,programId:e,decimals:t}=i,n=Re(i,["address","programId","decimals"]);return C({chainId:101,address:lt(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},rn=r=>r?E(C({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:E(C({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:E(C({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as vn,ASSOCIATED_TOKEN_PROGRAM_ID as id}from"@solana/spl-token";import{PublicKey as we,TransactionInstruction as Wt,SystemProgram as uu,SYSVAR_RENT_PUBKEY as sd}from"@solana/web3.js";var zi=v([W("instruction"),h("amountIn"),h("minAmountOut")]),Qi=v([W("instruction"),h("maxAmountIn"),h("amountOut")]),CP=v([W("instruction"),W("nonce")]),Yi=v([W("instruction"),W("nonce"),h("startTime")]),go=v([h("status"),h("nonce"),h("maxOrder"),h("depth"),h("baseDecimal"),h("quoteDecimal"),h("state"),h("resetFlag"),h("minSize"),h("volMaxCutRatio"),h("amountWaveRatio"),h("baseLotSize"),h("quoteLotSize"),h("minPriceMultiplier"),h("maxPriceMultiplier"),h("systemDecimalValue"),h("minSeparateNumerator"),h("minSeparateDenominator"),h("tradeFeeNumerator"),h("tradeFeeDenominator"),h("pnlNumerator"),h("pnlDenominator"),h("swapFeeNumerator"),h("swapFeeDenominator"),h("baseNeedTakePnl"),h("quoteNeedTakePnl"),h("quoteTotalPnl"),h("baseTotalPnl"),h("poolOpenTime"),h("punishPcAmount"),h("punishCoinAmount"),h("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),h("swapBase2QuoteFee"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),h("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),h("lpReserve"),X(h(),3,"padding")]),zm=v([h("accountType"),h("status"),h("nonce"),h("maxOrder"),h("depth"),h("baseDecimal"),h("quoteDecimal"),h("state"),h("resetFlag"),h("minSize"),h("volMaxCutRatio"),h("amountWaveRatio"),h("baseLotSize"),h("quoteLotSize"),h("minPriceMultiplier"),h("maxPriceMultiplier"),h("systemDecimalsValue"),h("abortTradeFactor"),h("priceTickMultiplier"),h("priceTick"),h("minSeparateNumerator"),h("minSeparateDenominator"),h("tradeFeeNumerator"),h("tradeFeeDenominator"),h("pnlNumerator"),h("pnlDenominator"),h("swapFeeNumerator"),h("swapFeeDenominator"),h("baseNeedTakePnl"),h("quoteNeedTakePnl"),h("quoteTotalPnl"),h("baseTotalPnl"),h("poolOpenTime"),h("punishPcAmount"),h("punishCoinAmount"),h("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),h("swapQuote2BaseFee"),h("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(h(),64,"padding")]),ji=v([W("instruction"),h("baseAmountIn"),h("quoteAmountIn"),h("fixedSide")]),Hi=v([W("instruction"),h("amountIn")]),RP={4:go,5:zm},tu=v([h("fee")]);import{PublicKey as Qm}from"@solana/web3.js";var _n=new Qm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),dn=5e4,Ym=v([h("x"),h("y"),h("price")]),jm=v([h("accountType"),h("status"),h("multiplier"),h("validDataCount"),X(Ym,dn,"DataElement")]);function Hm(r,e){return[0,dn-2]}function Zm(r){return[0,dn-2]}function $m(r){return[0,dn-2]}function Jm(r,e,t){let[n,o]=Hm(e,t),i=n,s=o,a=0,c=e*r.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=dn-2)return[a,a,!1];let u=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.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)s=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 Zi(r,e,t){let[n,o,i]=Jm(r,e,t);if(!i)return 0;if(n===o){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,c=r.DataElement[o].x,u=r.DataElement[o].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*r.multiplier*l/p}}function mn(r,e,t){return e*r.multiplier/t}function nu(r,e,t){return e*t/r.multiplier}function ed(r,e){let[t,n]=Zm(e),o=t,i=n,s=0,a=e;for(;o<i;){if(s=Math.floor((i+o)/2),s<=0||s>dn-2)return[s,s,!1];let c=r.DataElement[s].x,u=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)i=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];o=s+1}}return[s,s,!1]}function td(r,e){let[t,n]=$m(e),o=t,i=n,s=0,a=e;for(;o<=i;){if(s=Math.floor((i+o)/2),s<=0||s>=dn-2)return[s,s,!1];let c=r.DataElement[s].y,u=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)o=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function ou(r,e,t,n){let o=n?e+t:e-t,[i,s,a]=ed(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(o-c)*r.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-o)*r.multiplier/l),[y,f,!1,a]}}}function nd(r,e,t,n){let o=n?e-t:e+t,[i,s,a]=td(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-o)/r.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(o-p)/r.multiplier),[y,f,!1,a]}}}function od(r,e){let t=ou(r,e,0,!1);return t[3]?t[0]:0}function ru(r,e,t,n){let o=Zi(r,e,t),i=mn(r,e,o),s=mn(r,t,o),a=mn(r,n,o),c=!0,[u,l,m,d]=ou(r,i,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return nu(r,p,o)}}function iu(r,e,t,n){let o=Zi(r,e,t),i=mn(r,e,o),s=mn(r,t,o),a=mn(r,n,o),c=!1,[u,l,m,d]=nd(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=i-l;return nu(r,p,o)}}function rd(r){let e=jm.decode(r);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 su(r,e,t,n){let o=od(r,mn(r,e,Zi(r,e,t)))/r.multiplier;return n?o:1/o}var Mn=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(_n);e&&(this._layoutData=rd(e==null?void 0:e.data))}}};var au=ue("Raydium_liquidity_instruction");function cu(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:s}=r,a=Buffer.alloc(ji.span);ji.encode({instruction:3,baseAmountIn:$(o),quoteAmountIn:$(i),fixedSide:s==="base"?ft:Zs},a);let c=[P({pubkey:vn,isWritable:!1}),P({pubkey:new we(e.id)}),P({pubkey:new we(t.authority),isWritable:!1}),P({pubkey:new we(t.openOrders),isWritable:!1}),P({pubkey:new we(t.targetOrders)}),P({pubkey:new we(e.lpMint.address)}),P({pubkey:new we(t.vault.A)}),P({pubkey:new we(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(P({pubkey:_n})),c.push(P({pubkey:new we(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new we(t.marketEventQueue),isWritable:!1})),new Wt({programId:new we(e.programId),keys:c,data:a})}function $i(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:o}=r,i=ke(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Hi.span);Hi.encode({instruction:4,amountIn:$(o)},a);let c=[P({pubkey:vn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.mintLp.address}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return s===5?c.push(P({pubkey:_n})):(c.push(P({pubkey:i.id})),c.push(P({pubkey:i.id}))),c.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks})),new Wt({programId:i.programId,keys:c,data:a})}return new Wt({programId:i.programId,keys:[]})}function lu({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:w,openTime:A,coinAmount:k,pcAmount:I,ammConfigId:T,feeDestinationId:S}){let x=v([W("instruction"),W("nonce"),h("openTime"),h("pcAmount"),h("coinAmount")]),R=[{pubkey:vn,isSigner:!1,isWritable:!1},{pubkey:id,isSigner:!1,isWritable:!1},{pubkey:uu.programId,isSigner:!1,isWritable:!1},{pubkey:ot,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:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],B=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:w,openTime:A,coinAmount:k,pcAmount:I},B),{instruction:new Wt({keys:R,programId:r,data:B}),instructionType:F.AmmV4CreatePool}}function zP(r){let e=v([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[P({pubkey:new we(r.id),isWritable:!1}),P({pubkey:new we(r.authority),isWritable:!1}),P({pubkey:new we(r.openOrders),isWritable:!1}),P({pubkey:new we(r.vault.A),isWritable:!1}),P({pubkey:new we(r.vault.B),isWritable:!1}),P({pubkey:new we(r.mintLp.address),isWritable:!1}),P({pubkey:new we(r.marketId),isWritable:!1}),P({pubkey:new we(r.marketEventQueue),isWritable:!1})];return new Wt({programId:new we(r.programId),keys:n,data:t})}function ad({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},o){let i=ke(r),s=Buffer.alloc(zi.span);zi.encode({instruction:9,amountIn:$(t),minAmountOut:$(n)},s);let a=[P({pubkey:vn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders})];return o===4&&a.push(P({pubkey:i.targetOrders})),a.push(P({pubkey:i.vault.A}),P({pubkey:i.vault.B})),o===5&&a.push(P({pubkey:_n})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new Wt({programId:i.programId,keys:a,data:s})}function ud({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},o){let i=ke(r),s=Buffer.alloc(Qi.span);Qi.encode({instruction:11,maxAmountIn:$(t),amountOut:$(n)},s);let a=[P({pubkey:vn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return o===5&&a.push(P({pubkey:_n})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Wt({programId:i.programId,keys:a,data:s})}function hr(r){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return ad(E(C({},a),{amountIn:o,minAmountOut:i}),t);if(s==="out")return ud(E(C({},a),{maxAmountIn:o,amountOut:i}),t);au.logWithError("invalid params","params",r)}throw au.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function QP({poolKeys:r,userKeys:e,startTime:t}){let n=Buffer.alloc(Yi.span);Yi.encode({instruction:0,nonce:5,startTime:$(t)},n);let o=ke(r),i=[P({pubkey:vn,isWritable:!1}),P({pubkey:uu.programId,isWritable:!1}),P({pubkey:sd,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.openOrders}),P({pubkey:o.mintLp.address}),P({pubkey:o.mintA.address,isWritable:!1}),P({pubkey:o.mintB.address,isWritable:!1}),P({pubkey:o.vault.A,isWritable:!1}),P({pubkey:o.vault.B,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.targetOrders}),P({pubkey:e.lpTokenAccount}),P({pubkey:o.id,isWritable:!1}),P({pubkey:o.marketProgramId,isWritable:!1}),P({pubkey:o.marketId,isWritable:!1}),P({pubkey:e.payer,isSigner:!0})];return new Wt({programId:o.programId,keys:i,data:n})}function mu({poolKeys:r}){let e=v([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[P({pubkey:new we(r.id),isWritable:!1}),P({pubkey:new we(r.authority),isWritable:!1}),P({pubkey:new we(r.openOrders),isWritable:!1}),P({pubkey:new we(r.vault.A),isWritable:!1}),P({pubkey:new we(r.vault.B),isWritable:!1}),P({pubkey:new we(r.mintLp.address),isWritable:!1}),P({pubkey:new we(r.marketId),isWritable:!1}),P({pubkey:new we(r.marketEventQueue),isWritable:!1})];return{instruction:new Wt({programId:new we(r.programId),keys:n,data:t})}}import{ASSOCIATED_TOKEN_PROGRAM_ID as Ou,TOKEN_2022_PROGRAM_ID as sn,TOKEN_PROGRAM_ID as Ge}from"@solana/spl-token";import{Keypair as ss,PublicKey as U,SystemProgram as Io,TransactionInstruction as Ct}from"@solana/web3.js";import Lu from"bn.js";import Pd from"bn.js";function du(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function jP(r){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,r,!1),new Uint8Array(e)}function HP(r){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,r,!1),new Uint8Array(e)}function kr(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Ji(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function es(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function Ao(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function pu(r,e){return Ao(r,e)?null:Ji(r,e)}function fu(r,e){return Ao(r,e)?null:es(r,e)}var cd=Buffer.from("amm_config","utf8"),ld=Buffer.from("pool","utf8"),md=Buffer.from("pool_vault","utf8"),dd=Buffer.from("pool_reward_vault","utf8"),yu=Buffer.from("position","utf8"),pd=Buffer.from("tick_array","utf8"),fd=Buffer.from("operation","utf8"),yd=Buffer.from("pool_tick_array_bitmap_extension","utf8"),bd=Buffer.from("observation","utf8");function eh(r,e){return ae([cd,du(e)],r)}function bu(r,e,t,n){return ae([ld,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function ts(r,e,t){return ae([md,e.toBuffer(),t.toBuffer()],r)}function gu(r,e,t){return ae([dd,e.toBuffer(),t.toBuffer()],r)}function Pe(r,e,t){return ae([pd,e.toBuffer(),kr(t)],r)}function pn(r,e,t,n){return ae([yu,e.toBuffer(),kr(t),kr(n)],r)}function bt(r,e){return ae([yu,e.toBuffer()],r)}function Tr(r){return ae([Buffer.from("metadata","utf8"),Sn.toBuffer(),r.toBuffer()],Sn)}function wo(r){return ae([fd],r)}function ut(r,e){return ae([yd,e.toBuffer()],r)}function Au(r,e){return ae([bd,e.toBuffer()],r)}import gt from"bn.js";var de=new gt(0),dt=new gt(1),qt=new gt(-1),pt=new gt(1).shln(64),Ir=new gt(1).shln(128),ns=pt.sub(dt),Po=64,wu=Ir.subn(1),je=-443636,tt=-je,At=new gt("4295048016"),wt=new gt("79226673521066979257578248091"),Br=new gt("4295048017"),xr=new gt("79226673521066979257578248090"),Pu=16,hu="59543866431248",ku="184467440737095516",Tu="15793534762490258745",Sr=new gt(10).pow(new gt(6)),gd=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(gd||{}),oh={[500]:10,[3e3]:60,[1e4]:200},rh={version:6,liquidity:de,tickCurrent:0,feeGrowthGlobalX64A:de,feeGrowthGlobalX64B:de,protocolFeesTokenA:de,protocolFeesTokenB:de,swapInAmountTokenA:de,swapOutAmountTokenB:de,swapInAmountTokenB:de,swapOutAmountTokenA:de,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},Iu={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:[]},ih=new gt("18446744073700000000");var Ad=15,le=class{static async getTickArrays(e,t,n,o,i,s,a){let c=[],u=j.getTickArrayStartIndexByTick(o,i),l=j.getInitializedTickArrayInRange(s,a,i,u,Math.floor(Ad/2));for(let p=0;p<l.length;p++){let{publicKey:y}=Pe(t,n,l[p]);c.push(y)}let m=(await Tt(e,c)).map(p=>p!==null?ho.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=E(C({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,i,s),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,s);[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 s=Math.floor(e/le.tickCount(t)),a=n?j.searchLowBitFromStart(o,i,s-1,1,t):j.searchHightBitFromStart(o,i,s+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=Ve-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<Ve;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=Pe(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,s){let a=j.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(s)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<Ve;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=Pe(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(j.checkIsOutOfBoundary(e)){if(e>tt)return!1;let n=j.getTickArrayStartIndexByTick(je,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ve*e}};import ie from"bn.js";import{PublicKey as Kt}from"@solana/web3.js";import Te from"bn.js";var os=14,Ut=class{static maxTickInTickarrayBitmap(e){return e*Ve*fn}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(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=o?t-le.tickCount(n):t+le.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*Ve,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=pu(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=fu(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-le.tickCount(n)}}}},ko=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Ut.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=Ut.maxTickInTickarrayBitmap(e),n=-t;if(tt<=t)throw Error(`extensionTickBoundary check error: ${tt}, ${t}`);if(n<=je)throw Error(`extensionTickBoundary check error: ${n}, ${je}`);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:j.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=le.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:i,maxValue:s}=Ut.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=j.mergeTickArrayBitmap(e).shln(fn-1-a),u=Ao(512,c)?null:Ji(512,c);if(u!==null){let l=t-u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=Ao(512,c)?null:es(512,c);if(u!==null){let l=t+u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-le.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Ut.maxTickInTickarrayBitmap(t),o=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(o=fn-o),o}};import Mt from"bn.js";var To=class{static getfeeGrowthInside(e,t,n){let o=new Mt(0),i=new Mt(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Mt(0),a=new Mt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,pt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,pt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,pt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,pt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,pt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,o){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,pt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new Mt(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Mt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new Mt(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Mt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:i,epochInfo:s}){var b,g,w,A;let a=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),c=ee.getSqrtPriceX64FromTick(t.tickLower),u=ee.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=ce.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[fe(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),fe(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[fe(new Mt(new O(m.amountA.toString()).mul(l).toFixed(0)),(w=e.mintA.extensions)==null?void 0:w.feeConfig,s,!0),fe(new Mt(new O(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Bu}from"@solana/spl-token";var Ke=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,s=!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:y,sqrtPriceX64:f,feeAmount:b}=yn.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,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(qt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=Pe(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=yn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(qt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=Ke.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?ko.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=Pe(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=Pe(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/le.tickCount(e.tickSpacing)),o=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.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=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=Ut.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=ko.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<je||t>tt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,c,u;let s=[];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=E(C({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Kt(d)});if(p.tokenMint.equals(Kt.default))continue;if(n<=p.openTime.toNumber()||o.eq(de)){s.push(p);continue}let y=new Te(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),w=ne.mulDivFloor(f,p.emissionsPerSecondX64,pt),A=p.rewardTotalEmissioned.add(w);s.push(E(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let s=j.getTickArrayStartIndexByTick(i,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;return t>tt&&(t=le.getArrayStartIndex(tt,e)+le.tickCount(e)),n<je&&(n=le.getArrayStartIndex(je,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/le.tickCount(t)*fn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await ve(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of o)s.accountInfo!==null&&(i[s.pubkey.toString()]=Su.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=Pe(c.programId,c.id,m);i.push({pubkey:d}),o[d.toString()]=c.id}}let s=await ve(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=ho.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=E(C({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.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 s)u.push(bt(p,d).publicKey);let l=await Tt(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=Kr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),w=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:k}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,w.tickSqrtPriceX64,p.liquidity,!1),I=1/(1-Math.sqrt(Math.sqrt(g.price.div(w.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:w.price,amountA:A,amountB:k,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=>E(C({},x),{pendingReward:new Te(0)})),leverage:I,tokenFeeAmountA:new Te(0),tokenFeeAmountB:new Te(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await Tt(t,d,{batchRequest:o}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=ho.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let w=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[w].toString()],I=y[m[A].toString()],T=k.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=I.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await To.GetPositionFees(f,g,T,S),B=await To.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Te(0))?x:new Te(0),g.tokenFeeAmountB=R.gte(new Te(0))?R:new Te(0);for(let L=0;L<B.length;L++)g.rewardInfos[L].pendingReward=B[L].gte(new Te(0))?B[L]:new Te(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:s,priceLimit:a=new O(0),catchLiquidityInsufficient:c=!1}){var D;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?At.add(new Te(1)):wt.sub(new Te(1)):u=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=fe(i,m,o,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:w}=Ke.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((D=p.fee)!=null?D:de),u,c),A=fe(f,d,o,!1),k=ee.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),I=l?k:new O(1).div(k),T=f.mul(new Te(Math.floor((1-s)*1e10))).div(new Te(1e10)),S=fe(T,d,o,!1),x=l?e.currentPrice:new O(1).div(e.currentPrice),R=new O(I).sub(x).abs(),B=x,L=new Qe(new O(R).mul(10**15).toFixed(0),new O(B).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:xt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:I,priceImpact:L,fee:w,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Be(E(C({},u),{mint:u.address,isToken2022:u.programId===Bu.toBase58()})),new Be(E(C({},l),{mint:l.address,isToken2022:l.programId===Bu.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:w,executionPrice:A,priceImpact:k,fee:I,remainingAccounts:T,executionPriceX64:S}=Ke.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Kt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=E(C({},y),{amount:new ge(m,y.amount),fee:y.fee===void 0?void 0:new ge(m,y.fee)}),R=E(C({},f),{amount:new ge(d,f.amount),fee:f.fee===void 0?void 0:new ge(d,f.fee)}),B=E(C({},b),{amount:new ge(d,b.amount),fee:b.fee===void 0?void 0:new ge(d,b.fee)}),L=new rt({baseToken:m,denominator:new Te(10).pow(new Te(20+m.decimals)),quoteToken:d,numerator:w.mul(new O(10**(20+d.decimals))).toFixed(0)}),D=new rt({baseToken:m,denominator:new Te(10).pow(new Te(20+m.decimals)),quoteToken:d,numerator:A.mul(new O(10**(20+d.decimals))).toFixed(0)}),V=new ge(m,I);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:B,expirationTime:g,currentPrice:L,executionPrice:D,priceImpact:k,fee:V,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountOut:i,slippage:s,priceLimit:a=new O(0)}){var B;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?wt.sub(new Te(1)):At.add(new Te(1)):l=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=fe(i,u[n.toString()],o,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=Ke.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((B=m.fee)!=null?B:de),l),b=c?e.mintB.address:e.mintA.address,g=fe(d,u[b],o,!1),w=ee.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),A=c?w:new O(1).div(w),k=d.mul(new Te(Math.floor((1+s)*1e10))).div(new Te(1e10)),I=fe(k,u[b],o,!0),T=c?e.currentPrice:new O(1).div(e.currentPrice),S=new O(A).sub(T).abs(),x=T,R=new Qe(new O(S).mul(10**15).toFixed(0),new O(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:I,realAmountOut:m,expirationTime:xt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:R,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var y,f,b;let i=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-s,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:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f: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:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[lt(e.mintA.address).toString()],d=o[lt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),b=ee.getSqrtPriceX64FromTick(s),g=ee.getSqrtPriceX64FromTick(a),{amountSlippageA:w,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:I}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new O(w.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(A.toString()).div(new O(10).pow(y)).mul(d.value)),S=new O(k.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(I.toString()).div(new O(10).pow(y)).mul(d.value)),x=new O(1).div(T.add(S)),B=new O(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),L=3600*24*365,D=e.rewardDefaultInfos.map(V=>{var q,$e;let H=V.mint.decimals,G=o[V.mint.address];return c<((q=V.startTime)!=null?q:0)||c>(($e=V.endTime)!=null?$e:0)||!V.perSecond||!G||H===void 0?0:new O(G.value).mul(new O(V.perSecond).mul(L)).div(new O(10).pow(H)).mul(x).mul(100).toNumber()});return{feeApr:B,rewardsApr:D,apr:B+D.reduce((V,H)=>V+H,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,w;let l=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),m=ee.getSqrtPriceX64FromTick(n),d=ee.getSqrtPriceX64FromTick(o),p=a?1-s:1+s,y=fe(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Te(new O(y.amount.sub((w=y.fee)!=null?w:de).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Te(0);else if(l.lte(d)){let A=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:k}else b=t?new Te(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Ke.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:s,add:a}){var b,g,w,A;let c=ee.getSqrtPriceX64FromTick(n),u=ee.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(ee.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)],[y,f]=[fe(m.amountA.muln(l),(w=t.mintA.extensions)==null?void 0:w.feeConfig,e,!0),fe(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Kt(c.id));(await Tt(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=bn.decode(c.data))});let s=t.map(c=>ut(new Kt(c.programId),new Kt(c.id)).publicKey),a=await Ke.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>E(C({},c),{[u.id]:E(C({},n[u.id]),{id:new Kt(u.id),version:6,programId:new Kt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:E(C({},u.config),{id:new Kt(u.config.id),fundOwner:""}),currentPrice:new O(u.price),exBitmapInfo:a[ut(new Kt(u.programId),new Kt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber()})}),{})}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]}};function Gh({poolInfo:r,tickLower:e,tickUpper:t,amountA:n,amountB:o,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var A,k,I,T;let[u,l,m,d]=e<t?[e,t,n,o]:[t,e,o,n],p=ee.priceToSqrtPriceX64(new O(r.price),r.mintA.decimals,r.mintB.decimals),y=ee.getSqrtPriceX64FromTick(u),f=ee.getSqrtPriceX64FromTick(l),[b,g]=[fe(m,(A=r.mintA.extensions)==null?void 0:A.feeConfig,a,!c),fe(d,(k=r.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],w=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((I=b.fee)!=null?I:de),g.amount.sub((T=g.fee)!=null?T:de));return ce.getAmountsOutFromLiquidity({poolInfo:r,tickLower:e,tickUpper:t,liquidity:w,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var rs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function xu(r){return E(C({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:rs,week:rs,month:rs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:E(C({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(de)||(i=i.add(dt)),i}static mulDivFloor(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).add(n.sub(dt)).div(n)}static x64ToDecimal(e,t){return new O(e.toString()).div(O.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ie(e.mul(O.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ir).sub(t).mod(Ir)}};function Ee(r,e){return is(r.mul(e),64,256)}function wd(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function is(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ee=class{static sqrtPriceX64ToPrice(e,t,n){return ne.x64ToDecimal(e).pow(2).mul(O.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(O.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))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(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))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(de))return e;let i=t.shln(Po);if(o){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,dt,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return ne.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(Po);if(o)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,dt,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<je||e>tt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ie("18445821805675395072"):new ie("18446744073709551616");return(t&2)!=0&&(n=Ee(n,new ie("18444899583751176192"))),(t&4)!=0&&(n=Ee(n,new ie("18443055278223355904"))),(t&8)!=0&&(n=Ee(n,new ie("18439367220385607680"))),(t&16)!=0&&(n=Ee(n,new ie("18431993317065453568"))),(t&32)!=0&&(n=Ee(n,new ie("18417254355718170624"))),(t&64)!=0&&(n=Ee(n,new ie("18387811781193609216"))),(t&128)!=0&&(n=Ee(n,new ie("18329067761203558400"))),(t&256)!=0&&(n=Ee(n,new ie("18212142134806163456"))),(t&512)!=0&&(n=Ee(n,new ie("17980523815641700352"))),(t&1024)!=0&&(n=Ee(n,new ie("17526086738831433728"))),(t&2048)!=0&&(n=Ee(n,new ie("16651378430235570176"))),(t&4096)!=0&&(n=Ee(n,new ie("15030750278694412288"))),(t&8192)!=0&&(n=Ee(n,new ie("12247334978884435968"))),(t&16384)!=0&&(n=Ee(n,new ie("8131365268886854656"))),(t&32768)!=0&&(n=Ee(n,new ie("3584323654725218816"))),(t&65536)!=0&&(n=Ee(n,new ie("696457651848324352"))),(t&131072)!=0&&(n=Ee(n,new ie("26294789957507116"))),(t&262144)!=0&&(n=Ee(n,new ie("37481735321082"))),e>0&&(n=wu.div(n)),n}static getTickFromPrice(e,t,n){return ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(wt)||e.lt(At))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ie(t-64),o=wd(n,32,128),i=new ie("8000000000000000","hex"),s=0,a=new ie(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new ie(0))&&s<Pu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let u=a.shrn(32),m=o.add(u).mul(new ie(hu)),d=is(m.sub(new ie(ku)),64,128).toNumber(),p=is(m.add(new ie(Tu)),64,128).toNumber();return d==p?d:ee.getSqrtPriceX64FromTick(p).lte(e)?p:d}},gn=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let i=gn.getTickWithPriceAndTickspacing(e,t,n,o),s=ee.getSqrtPriceX64FromTick(i);return ee.sqrtPriceX64ToPrice(s,n,o)}},ce=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(de))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Po),s=t.sub(e);return o?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),dt,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");return o?ne.mulDivCeil(n,t.sub(e),pt):ne.mulDivFloor(n,t.sub(e),pt)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return o?ne.mulDivRoundingUp(a,dt,ns):a.shrn(Po)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,ns,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,o,!1),a=ce.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new ie(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,o,i),a=ce.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:s,amountB:a}}else return{amountA:new ie(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,s,a){let{amountA:c,amountB:u}=ce.getAmountsFromLiquidity(e,t,n,o,s),l=i?1+a:1-a,m=new ie(new O(c.toString()).mul(l).toFixed(0)),d=new ie(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:s,epochInfo:a,amountAddFee:c}){var w,A,k,I;let u=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),l=ee.getSqrtPriceX64FromTick(t),m=ee.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(u,l,m,o,s),[y,f]=[fe(p.amountA,(w=e.mintA.extensions)==null?void 0:w.feeConfig,a,c),fe(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,c)],[b,g]=[fe(new ie(new O(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),fe(new ie(new O(p.amountB.toString()).mul(d).toFixed(0)),(I=e.mintB.extensions)==null?void 0:I.feeConfig,a,c)];return{liquidity:o,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:xt(y.expirationTime,f.expirationTime)}}},yn=class{static swapCompute(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?At.add(dt):wt.sub(dt)),s){if(y.lt(At))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(wt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(de),g={amountSpecifiedRemaining:d,amountCalculated:de,sqrtPriceX64:m,tick:u>p?Math.min(p+le.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new ie(0)},w=p,A=n[p],k=0,I=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(de)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(A,g.tick,l,s,I),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Ke.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},w,s);if(!L.isExist){if(f)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")}w=L.nextStartIndex;let{publicKey:D}=Pe(e,t,w);R=D,A=n[w];try{x=j.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==w&&R&&(g.accounts.push(R),p=w),T.tickNext<je?T.tickNext=je:T.tickNext>tt&&(T.tickNext=tt),T.sqrtPriceNextX64=ee.getSqrtPriceX64FromTick(T.tickNext);let B;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?B=y:B=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=yn.swapStepCompute(g.sqrtPriceX64,B,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let L=x.liquidityNet;s&&(L=L.mul(qt)),g.liquidity=ce.addDelta(g.liquidity,L)}I=T.tickNext!=g.tick&&!s&&A.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=ee.getTickFromSqrtPriceX64(g.sqrtPriceX64);I=L!=g.tick&&!s&&A.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=le.nextInitializedTickArray(g.tick,l,s,o,i);S&&p!==T&&(g.accounts.push(Pe(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:de,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){let s={sqrtPriceX64Next:new ie(0),amountIn:new ie(0),amountOut:new ie(0),feeAmount:new ie(0)},a=e.gte(t),c=o.gte(de);if(c){let l=ne.mulDivFloor(o,Sr.sub(new ie(i.toString())),Sr);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(qt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromOutput(e,n,o.mul(qt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(o.mul(qt))&&(s.amountOut=o.mul(qt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=o.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new ie(i),Sr.sub(new ie(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ve=60,fn=512,j=class{static getTickArrayAddressByTick(e,t,n,o){let i=j.getTickArrayStartIndexByTick(n,o),{publicKey:s}=Pe(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=Ve)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=le.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)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ve,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*Ve,i=Math.floor(t/o)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Ve:e+t*Ve}static mergeTickArrayBitmap(e){let t=new Pd(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 s=Math.floor(o/(n*Ve));return[...j.searchLowBitFromStart(e,t,s-1,i,n),...j.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,fn,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=Pe(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<je||e>tt}static nextInitTick(e,t,n,o,i){if(le.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<Ve;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ve-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ve;){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=ee.getSqrtPriceX64FromTick(t),i=ee.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=gn.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,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=ee.getSqrtPriceX64FromTick(t),i=ee.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=gn.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new O(1).div(a)}}};var Ku=v([ye(8),W("bump"),Et("index"),K(""),qe("protocolFeeRate"),qe("tradeFeeRate"),Et("tickSpacing"),X(h(),8,"")]),hd=v([qe("blockTimestamp"),Rn("tickCumulative"),X(h(),4)]),Cu=v([ye(8),Ue("initialized"),h("recentEpoch"),Et("observationIndex"),K("poolId"),X(hd,100,"observations"),X(h(),4)]),kd=v([W("rewardState"),h("openTime"),h("endTime"),h("lastUpdateTime"),J("emissionsPerSecondX64"),h("rewardTotalEmissioned"),h("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),J("rewardGrowthGlobalX64")]),bn=v([ye(8),W("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),Et("tickSpacing"),J("liquidity"),J("sqrtPriceX64"),We("tickCurrent"),qe(),J("feeGrowthGlobalX64A"),J("feeGrowthGlobalX64B"),h("protocolFeesTokenA"),h("protocolFeesTokenB"),J("swapInAmountTokenA"),J("swapOutAmountTokenB"),J("swapInAmountTokenB"),J("swapOutAmountTokenA"),W("status"),X(W(),7,""),X(kd,3,"rewardInfos"),X(h(),16,"tickArrayBitmap"),h("totalFeesTokenA"),h("totalFeesClaimedTokenA"),h("totalFeesTokenB"),h("totalFeesClaimedTokenB"),h("fundFeesTokenA"),h("fundFeesTokenB"),h("startTime"),X(h(),15*4-3,"padding")]),Td=v([J("growthInsideLastX64"),h("rewardAmountOwed")]),Kr=v([ye(8),W("bump"),K("nftMint"),K("poolId"),We("tickLower"),We("tickUpper"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),h("tokenFeesOwedA"),h("tokenFeesOwedB"),X(Td,3,"rewardInfos"),X(h(),8,"")]),fk=v([ye(8),W("bump"),K("poolId"),We("tickLowerIndex"),We("tickUpperIndex"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),h("tokenFeesOwedA"),h("tokenFeesOwedB"),X(J(),3,"rewardGrowthInside"),X(h(),8,"")]),Id=v([We("tick"),Ka("liquidityNet"),J("liquidityGross"),J("feeGrowthOutsideX64A"),J("feeGrowthOutsideX64B"),X(J(),3,"rewardGrowthsOutsideX64"),X(qe(),13,"")]),ho=v([ye(8),K("poolId"),We("startTickIndex"),X(Id,Ve,"ticks"),W("initializedTickCount"),X(W(),115,"")]),Ru=v([ye(329),X(K(),100,"whitelistMints")]),Su=v([ye(8),K("poolId"),X(X(h(),8),os,"positiveTickArrayBitmap"),X(X(h(),8),os,"negativeTickArrayBitmap")]);Cu.span;var Nu=ue("Raydium_Clmm"),Rt={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],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]},xe=class{static createPoolInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=v([J("sqrtPriceX64"),h("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,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:Io.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let w=Buffer.from([...Rt.createPool,...g]);return new Ct({keys:b,programId:e,data:w})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:s,initialPriceX64:a,startTime:c}=e,[u,l]=[new U(o.address),new U(i.address)],{publicKey:m}=bu(t,s,u,l),{publicKey:d}=Au(t,m),{publicKey:p}=ts(t,m,u),{publicKey:y}=ts(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,u,p,new U(o.programId||Ge),l,y,new U(i.programId||Ge),ut(t,m).publicKey,a,c)];return{signers:[],instructions:f,instructionTypes:[F.CreateAccount,F.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B){let L=v([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),J("liquidity"),h("amountMaxA"),h("amountMaxB"),Ue("withMetadata"),W("optionBaseFlag"),Ue("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,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:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Io.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:Ou,isSigner:!1,isWritable:!1},{pubkey:Sn,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],H=Buffer.alloc(L.span);L.encode({tickLowerIndex:w,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},H);let G=Buffer.from([...Rt.openPosition,...H]);return new Ct({keys:V,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=ss.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(d,p,f),{publicKey:w}=Pe(d,p,b),{publicKey:A}=Ae(n.wallet,y,Ge),{publicKey:k}=Tr(y),{publicKey:I}=bt(d,y),{publicKey:T}=pn(d,p,o,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=ss.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(d,p,f),{publicKey:w}=Pe(d,p,b),{publicKey:A}=Ae(n.wallet,y,Ge),{publicKey:k}=Tr(y),{publicKey:I}=bt(d,y),{publicKey:T}=pn(d,p,o,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,u,s,a,c,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ut(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B){let L=v([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),J("liquidity"),h("amountMaxA"),h("amountMaxB"),Ue("withMetadata"),W("optionBaseFlag"),Ue("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,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:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Io.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:Ou,isSigner:!1,isWritable:!1},{pubkey:Sn,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],H=Buffer.alloc(L.span);L.encode({tickLowerIndex:w,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:new Lu(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},H);let G=Buffer.from([...Rt.openPosition,...H]);return new Ct({keys:V,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=ss.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=Pe(p,y,f),{publicKey:w}=Pe(p,y,b),{publicKey:A}=Ae(n.wallet,m,Ge),{publicKey:k}=Tr(m),{publicKey:I}=bt(p,m),{publicKey:T}=pn(p,y,o,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),o,i,f,b,s,a,c,u,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ut(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i){let s=v([]),a=[{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:Io.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...Rt.closePosition,...c]);return new Ct({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o}){let i=new U(e.programId),{publicKey:s}=Ae(n.wallet,o.nftMint,Ge),{publicKey:a}=bt(i,o.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,o.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[F.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w){let A=v([J("liquidity"),h("amountMaxA"),h("amountMaxB"),W("optionBaseFlag"),Ue("baseFlag")]),k=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,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:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...Rt.increaseLiquidity,...T]);return new Ct({keys:I,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Pe(c,u,l),{publicKey:p}=Pe(c,u,m),{publicKey:y}=Ae(o.wallet,n.nftMint,Ge),{publicKey:f}=bt(c,n.nftMint),{publicKey:b}=pn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ut(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=Pe(c,u,l),{publicKey:p}=Pe(c,u,m),{publicKey:y}=Ae(o.wallet,n.nftMint,Ge),{publicKey:f}=bt(c,n.nftMint),{publicKey:b}=pn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ut(c,u).publicKey:void 0)],signers:[],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w){let A=v([J("liquidity"),h("amountMaxA"),h("amountMaxB"),W("optionBaseFlag"),Ue("baseFlag")]),k=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,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:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:new Lu(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...Rt.increaseLiquidity,...T]);return new Ct({keys:I,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A){let k=v([J("liquidity"),h("amountMinA"),h("amountMinB")]),I=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{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:s,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:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...I],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:w},S);let x=Buffer.from([...Rt.decreaseLiquidity,...S]);return new Ct({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Pe(u,l,m),{publicKey:y}=Pe(u,l,d),{publicKey:f}=Ae(o.wallet,n.nftMint,c),{publicKey:b}=bt(u,n.nftMint),{publicKey:g}=pn(u,l,n.tickLower,n.tickUpper),w=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)w.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(u,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),w,i,s,a,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ut(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[F.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g){let w=v([h("amount"),h("otherAmountThreshold"),J("sqrtPriceLimitX64"),Ue("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{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:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],I=Buffer.alloc(w.span);w.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},I);let T=Buffer.from([...Rt.swap,...I]);return new Ct({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,ut(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:i,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toBase58(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountB:o.tokenAccountA,b?o.tokenAccountA:o.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,u,n,s,a,c,!1,ut(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=v([h("openTime"),h("endTime"),J("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,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:Io.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:$(l),endTime:$(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Rt.initReward,...f]);return new Ct({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a=gu(i,s,o.mint).publicKey,c=wo(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(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:[F.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=v([W("rewardIndex"),J("emissionsPerSecondX64"),h("openTime"),h("endTime")]),y=[{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:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:$(l),endTime:$(m)},f);let b=Buffer.from([...Rt.setRewardEmissions,...f]);return new Ct({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(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 U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Nu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=wo(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[F.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,s,a){let c=v([W("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:s,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Rt.collectReward,...l]);return new Ct({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Nu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[F.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}};import{PublicKey as Kd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Cd}from"@solana/spl-token";import{PublicKey as xd}from"@solana/web3.js";import Mu from"bn.js";var as=new Mu(25),Cr=new Mu(1e4),Bd={4:3,5:3};var Sd=ue("Raydium_liquidity_serum");function _u({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=xd.createProgramAddressSync(i,r)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw Sd.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}import Bo from"bn.js";function Rr({programId:r}){let{publicKey:e}=ae([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function An({name:r,programId:e,marketId:t}){let{publicKey:n}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function Rd({programId:r,marketId:e}){let{publicKey:t}=ae([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function ls({programId:r}){return ae([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function vu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:c}){let u=An({name:"amm_associated_seed",programId:a,marketId:t}),l=An({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=ls({programId:a}),p=An({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=An({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=An({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Rd({programId:a,marketId:t}),g=An({name:"target_associated_seed",programId:a,marketId:t}),w=An({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=_u({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:w,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:A,lookupTableAccount:Kd.default,configId:Rr({programId:a})}}var us;async function Xk({connection:r,poolKeysList:e,config:t}){us||(us=new Mn({connection:r}),await us.initStableModelLayout());let n=e.map(s=>mu({poolKeys:s}));return(await ia(r,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=sa(s,"GetPoolData"),c=new Bo(Ft(a,"status")),u=Number(Ft(a,"coin_decimals")),l=Number(Ft(a,"pc_decimals")),m=Number(Ft(a,"lp_decimals")),d=new Bo(Ft(a,"pool_coin_amount")),p=new Bo(Ft(a,"pool_pc_amount")),y=new Bo(Ft(a,"pool_lp_supply")),f="0";try{f=Ft(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new Bo(f)}})}var cs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Or=r=>{let e={},t=Cd.toBase58();return Object.keys(r).map(n=>{let o=r[n],[i,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:et({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:et({address:s,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:cs,week:cs,month:cs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Rr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:et({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())})}}),e};import Xe from"bn.js";var xo=class extends Se{constructor(t){super(t);this.stableLayout=new Mn({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let s=new Xe(new O(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Pr(t[i?"mintB":"mintA"]),[c,u]=[new Xe(new O(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Xe(new O(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Xe(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:",s.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;s.isZero()||(d=m==="base"?er(s.mul(u),c):er(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=er(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Qe(new Xe(1)).add(o).mul(d).quotient,b=new ge(a,d),g=new ge(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,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:s,fixedSide:a,config:c,txVersion:u,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let w=await m.getCreatedTokenAccount({mint:new He(n.lpMint.address)}),A=[y,f],k=[b,g],I=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(A.reverse(),k.reverse(),I.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=A,[B,L]=k,[D,V]=I,H=o!=null?o:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),_t=await m.handleTokenAccount({side:"in",amount:D,mint:x.mint,tokenAccount:B,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=_t,$e=Re(_t,["tokenAccount"]);G.addInstruction($e);let In=await m.handleTokenAccount({side:"in",amount:V,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:kn}=In,an=Re(In,["tokenAccount"]);G.addInstruction(an);let Fo=await m.handleTokenAccount({side:"out",amount:0,mint:new He(n.lpMint.address),tokenAccount:w,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:zt}=Fo,Tn=Re(Fo,["tokenAccount"]);return G.addInstruction(Tn),G.addInstruction({instructions:[cu({poolInfo:n,poolKeys:H,userKeys:{baseTokenAccount:q,quoteTokenAccount:kn,lpTokenAccount:zt,owner:this.scope.ownerPubKey},baseAmountIn:D,quoteAmountIn:V,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5AddLiquidity:F.AmmV4AddLiquidity],lookupTableAddress:H.lookupTableAccount?[H.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),u===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=o!=null?o:await this.getAmmPoolKeys(n.id),[l,m,d]=[new He(n.mintA.address),new He(n.mintB.address),new He(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:w,checkCreateATAOwner:A}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:w,checkCreateATAOwner:A}),{tokenAccount:k}=x,I=Re(x,["tokenAccount"]);g.addInstruction(I);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:w,checkCreateATAOwner:A}),{tokenAccount:T}=R,S=Re(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[$i({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(c),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Vn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){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 b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||Ae(this.scope.ownerPubKey,q.accountInfo.mint,Vn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let w=g[t.lpMint.address];if(w===void 0)throw Error("find lp account error in trade accounts");let A=o.add(a!=null?a:new Xe(0)),k=t.mintA.address===Be.WSOL.mint.toString(),I=t.mintB.address===Be.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let q=yt[s.programId],$e=Ye({programId:new He(s.programId),poolId:new He(s.id),owner:this.scope.ownerPubKey,version:q}),kn,an=await this.scope.connection.getAccountInfo($e);if(an&&(kn=Nn(q).decode(an.data)),q!==6&&!kn){let{instruction:Qt,instructionType:Qr}=lo({id:new He(s.id),programId:new He(s.programId),version:q,ledger:$e,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Qt],instructionTypes:[Qr]})}let zt=[];for(let Qt of s.rewardInfos){let Qr=Qt.mint.address===Be.WSOL.mint.toString();if(g[Qt.mint.address])zt.push(g[Qt.mint.address]);else{let{account:xs,instructionParams:Ss}=await this.scope.account.getOrCreateTokenAccount({mint:new He(Qt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Qr,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});xs||this.logAndCreateError("farm reward account not found:",Qt.mint.address),Ss&&b.addInstruction(Ss),zt.push(xs)}}let Tn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],_t={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:Tn,lpAccount:w,rewardAccounts:zt},In=yt[s.programId],Fo=In===6?mo(_t):In===5?po(_t):fo(_t),lc={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};b.addInstruction({instructions:[Fo],instructionTypes:[lc[In]]})}let B=await this.getAmmPoolKeys(t.id),L=$i({poolInfo:t,poolKeys:B,userKeys:{lpTokenAccount:w,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity],lookupTableAddress:B.lookupTableAccount?[B.lookupTableAccount]:[]});let[D,V]=t.mintA.address===n.mintA.address?[T,x]:[x,T],H=await this.scope.clmm.getClmmPoolKeys(n.id),G=await xe.openPositionFromBaseInstructions(E(C({poolInfo:n,poolKeys:H,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:D,tokenAccountB:V},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:H.lookupTableAccount?[H.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var D;let b=u.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),g=u.useSOLBalance&&o.mint.equals(Vu),w=u.useSOLBalance&&i.mint.equals(Vu),A=this.createTxBuilder(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:b,amount:a}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=vu({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:B,instructionType:L}=lu(E(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:Ae(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:c,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[B],instructionTypes:[L]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=Rr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return tu.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:s}){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[y,f]=m,[b,g]=d,w=t.version===4,A;if(w)A=new O(f.toString()).div(10**g).div(new O(y.toString()).div(10**b));else{let V=su(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?A=new O(1e6).div(V*1e6):A=new O(V*1e6).div(1e6)}let k=n,I=new Xe(0),T=new Xe(0);if(!k.isZero())if(w){T=$t(k.mul(as),Cr);let V=k.sub(T),H=y.add(V);I=f.mul(V).div(H)}else{T=k.mul(new Xe(2)).div(new Xe(1e4));let V=k.sub(T);p==="quote"?I=new Xe(ru(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),V.toNumber())):I=new Xe(iu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),V.toNumber()))}let S=new Xe(new O(I.toString()).mul(1-s).toFixed(0)),x=I,R=S,B=new O(I.toString()).div(new O(k.sub(T).toString()).toFixed(0));!k.isZero()&&!I.isZero()&&(B=new O(I.toString()).div(10**g).div(new O(k.sub(T).toString()).div(10**b)));let L=A.sub(B).div(A).mul(100);return{amountOut:x,minAmountOut:R,currentPrice:A,executionPrice:B,priceImpact:L,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:i,slippage:s}){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:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new O(f.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new O(y.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 Xe(0),w=n;if(!w.isZero()){w.gt(f)&&(w=f.sub(new Xe(1)));let R=f.sub(w);g=y.mul(w).div(R).mul(Cr).div(Cr.sub(as))}let A=new Xe(new O(g.toString()).mul(1+s).toFixed(0)),k=g,I=A;this.logDebug("amountIn:",new O(k.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new O(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!w.isZero()&&(T=new O(w.toString()).div(10**m.decimals).div(new O(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.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(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(k.toString()),x=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:k,maxAmountIn:I,currentPrice:b,executionPrice:T,priceImpact:x}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===Y.toBase58(),w=y&&b.address===Y.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:d});m.addInstruction(T||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:I,outputTokenUseSolBalance:w,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[hr({version:x,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[x===4?F.AmmV4SwapBaseIn:F.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await ve(this.scope.connection,t.map(l=>({pubkey:new He(l)})),n),i={},s=[];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=go.decode(m.accountInfo.data);i[String(t[l])]=E(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await ve(this.scope.connection,s.map(l=>({pubkey:new He(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new Xe(Od.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]=E(C({},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=Or({[t]:n}),i=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as re}from"@solana/web3.js";import ct from"bn.js";import{AccountLayout as Fu,TOKEN_PROGRAM_ID as Eu}from"@solana/spl-token";var So=class extends Se{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var A;let{programId:t,owner:n=((A=this.scope.owner)==null?void 0:A.publicKey)||re.default,mint1:o,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new ct(new re(o.address).toBuffer()).gt(new ct(new re(i.address).toBuffer()))?[i,o,new O(1).div(a)]:[o,i,a],g=ee.priceToSqrtPriceX64(b,y.decimals,f.decimals),w=await xe.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(w),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:E(C({},w.address),{programId:t.toString(),id:w.address.poolId.toString(),mintA:y,mintB:f,openTime:c.toString(),vault:{A:w.address.mintAVault.toString(),B:w.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}},Iu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,w=n.useSOLBalance&&e.mintA.address===Y.toString(),A=n.useSOLBalance&&e.mintB.address===Y.toString(),[k,I]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new re(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new re(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let B=t||await this.getClmmPoolKeys(e.id),L=await xe.openPositionFromBaseInstructions({poolInfo:e,poolKeys:B,ownerInfo:E(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:C({},L.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,w=n.useSOLBalance&&e.mintA.address===Y.toBase58(),A=n.useSOLBalance&&e.mintB.address===Y.toBase58(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new re(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});k&&(b=k),f.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new re(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});T&&(g=T),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=t||await this.getClmmPoolKeys(e.id),R=await xe.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:x,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(R),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:R.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===Y.toString(),g=c.useSOLBalance&&t.mintB.address===Y.toString(),{account:w,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new re(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});w&&(y=w),p.addInstruction(A||{});let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new re(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(I||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=xe.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===Y.toString(),b=a.useSOLBalance&&t.mintB.address===Y.toString(),{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new re(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(o==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(w||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new re(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(o==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A&&(y=A),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),T=xe.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:o,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===Y.toString(),f=i.useSOLBalance&&t.mintB.address===Y.toString(),b,g,{account:w,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new re(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=w,A&&p.addInstruction(A);let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new re(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=k,I&&p.addInstruction(I);let T=[];for(let B of t.rewardDefaultInfos){let L=i.useSOLBalance&&B.mint.address===Y.toString(),D;if(B.mint.address===t.mintA.address)D=b;else if(B.mint.address===t.mintB.address)D=g;else{let{account:V,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(B.mint.programId),mint:new re(B.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});D=V,H&&p.addInstruction(H)}T.push(D)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await xe.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[F.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let B=await xe.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o});p.addInstruction({endInstructions:B.instructions,endInstructionTypes:B.instructionTypes}),R=C(C({},R),B.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=xe.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:o,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===Y.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(n.mint.address),mint:new re(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ct(new O(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=xe.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new re(n.mint.programId),mint:new re(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of o){let d=n.useSOLBalance&&m.mint.address===Y.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(m.mint.programId),mint:new re(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ct(new O(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=xe.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new re(m.mint.programId),mint:new re(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(Y),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new ct(new O(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=xe.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===Y.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(m.mint.programId),mint:new re(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new ct(new O(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=xe.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new re(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});u.addInstruction(b),l=C(C({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(Y),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:o,checkCreateATAOwner:i});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=xe.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(Y),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:o,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=xe.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=c.useSOLBalance&&e.mintA.address===Y.toBase58(),g=c.useSOLBalance&&e.mintB.address===Y.toBase58(),w;!s||s.equals(new O(0))?w=f?At.add(new ct(1)):wt.sub(new ct(1)):w=ee.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new re(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?o:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let k;if(!k){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new re(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:o}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=T,S&&y.addInstruction(S)}(!A||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(xe.makeSwapBaseInInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k},inputMint:new re(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:w,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=c.useSOLBalance&&e.mintA.address===Y.toBase58(),g=c.useSOLBalance&&e.mintB.address===Y.toBase58(),w;!s||s.equals(new O(0))?w=n.toString()===e.mintB.address?At.add(new ct(1)):wt.sub(new ct(1)):w=ee.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new re(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?i:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let k;if(!k){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new re(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=T,S&&y.addInstruction(S)}(!A||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(xe.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k},outputMint:new re(n),amountOut:o,amountInMax:i,sqrtPriceLimitX64:w,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)o?Ae(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(u[m.accountInfo.mint.toString()]=m.pubkey):u[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(A=>!A.liquidity.isZero()||A.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===Y.toString(),y=n.useSOLBalance&&d.mintB.address===Y.toString(),f=u[d.mintA.address];if(!f){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new re(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f=A,k&&l.addInstruction(k)}let b=u[d.mintB.address];if(!b){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new re(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:o,checkCreateATAOwner:i});b=A,k&&l.addInstruction(k)}u[d.mintA.address]=f,u[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let k=n.useSOLBalance&&A.mint.address===Y.toString(),I=u[A.mint.address];if(!I){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new re(A.mint.programId),mint:new re(A.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:o});I=T,S&&l.addInstruction(S)}u[A.mint.address]=I,g.push(I)}let w=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let k=xe.decreaseLiquidityInstructions({poolInfo:d,poolKeys:w,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new ct(0),amountMinA:new ct(0),amountMinB:new ct(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:c}):l.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(wo(e).publicKey);return t?Ru.decode(t.data).whitelistMints.filter(o=>!o.equals(re.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new ct(1))).map(s=>bt(new re(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(s=>{if(!s)return;let a=Kr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await ve(this.scope.connection,e.map(i=>({pubkey:new re(i)})),t),o={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=bn.decode(s.accountInfo.data),c=ee.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=E(C({},a),{currentPrice:c,programId:s.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 ve(this.scope.connection,Array.from(n).map(c=>({pubkey:new re(c)}))),i={};o.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Ku.decode(c.accountInfo.data))});let s=await Ke.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:et({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Eu.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?rn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:et({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Eu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?rn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:E(C({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ke.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,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 Cn({connection:this.scope.connection,mints:Array.from(n).map(m=>new re(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await ve(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=xu(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Fu.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Fu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=E(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:c.config});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as Dr,TOKEN_PROGRAM_ID as Gt,AccountLayout as Xd}from"@solana/spl-token";import ds from"bn.js";import Wu from"bn.js";var ms=new Wu(1e6);function Ld(r,e,t){return r.mul(e).add(t).sub(new Wu(1)).div(t)}function Du(r,e,t){return r.mul(e).div(t)}var Lr=class{static tradingFee(e,t){return Ld(e,t,ms)}static protocolFee(e,t){return Du(e,t,ms)}static fundFee(e,t){return Du(e,t,ms)}};import Ko from"bn.js";function Nr(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Nd(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=Nr(r,e);return n.gt(Fn)&&(t=t.add(new Ko(1)),e=r.div(t),n=Nr(r,t),n.gt(Fn)&&(e=e.add(new Ko(1)))),[t,e]}var Fn=new Ko(0),Mr=class{static swapWithoutFees(e,t,n){let o=t.mul(n),i=t.add(e),[s,a]=Nd(o,i),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,o,i){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Nr(e.mul(n),t).gt(Fn)&&s.gt(Fn)&&(s=s.add(new Ko(1))),Nr(e.mul(o),t).gt(Fn)&&a.gt(Fn)&&(a=a.add(new Ko(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import _r from"decimal.js-light";var qu=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(qu||{}),vr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,o){let i=Lr.tradingFee(e,o),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Mr.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:o,quoteReserve:i,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[o,i,e.decimals,t.decimals,e.address]:[i,o,t.decimals,e.decimals,t.address],p=new _r(u.toString()).div(10**m).div(new _r(c.toString()).div(10**l)),y=a.gte(u)?u.sub(new ds(1)):a,f=u.sub(y),b=$t(c.mul(y),f),g=$t(b.mul(new ds(1e6)),new ds(1e6).sub(n)),w=g.sub(b),A=new _r(y.toString()).div(10**m).div(new _r(g.toString()).div(10**l)),k=p.isZero()?0:A.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:w,priceImpact:k}}};var Md=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),_d=Buffer.from("amm_config","utf8"),vd=Buffer.from("pool","utf8"),Vd=Buffer.from("pool_lp_mint","utf8"),Fd=Buffer.from("pool_vault","utf8"),Ed=Buffer.from("observation","utf8");function En(r){return ae([Md],r)}function hI(r,e){return ae([_d,qd(e)],r)}function Dd(r,e,t,n){return ae([vd,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Wd(r,e){return ae([Vd,e.toBuffer()],r)}function Uu(r,e,t){return ae([Fd,e.toBuffer(),t.toBuffer()],r)}function Vr(r,e){return ae([Ed,e.toBuffer()],r)}function qd(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function Gu({programId:r,configId:e,mintA:t,mintB:n}){let o=En(r).publicKey,i=Dd(r,e,t,n).publicKey,s=Wd(r,i).publicKey,a=Uu(r,i,t).publicKey,c=Uu(r,i,n).publicKey,u=Vr(r,i).publicKey;return{poolId:i,configId:e,authority:o,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as Co}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ps,TOKEN_2022_PROGRAM_ID as Xu,ASSOCIATED_TOKEN_PROGRAM_ID as Ud}from"@solana/spl-token";var Gd=ue("Raydium_cpmm"),Ro={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]};function zu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A){let k=v([h("amountMaxA"),h("amountMaxB"),h("openTime")]),I=[{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:!1},{pubkey:s,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:ps,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Ud,isSigner:!1,isWritable:!1},{pubkey:Ho,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:w,openTime:A},T),new Co({keys:I,programId:r,data:Buffer.from([...Ro.initialize,...T])})}function Qu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=v([h("lpAmount"),h("amountMaxA"),h("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:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ps,isSigner:!1,isWritable:!1},{pubkey:Xu,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(f.span);return Gd.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Co({keys:b,programId:r,data:Buffer.from([...Ro.deposit,...g])})}function Yu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=v([h("lpAmount"),h("amountMinA"),h("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:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ps,isSigner:!1,isWritable:!1},{pubkey:Xu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Yo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Co({keys:b,programId:r,data:Buffer.from([...Ro.withdraw,...g])})}function Fr(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=v([h("amountIn"),h("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:s,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}],w=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},w),new Co({keys:g,programId:r,data:Buffer.from([...Ro.swapBaseInput,...w])})}function ju(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=v([h("amountInMax"),h("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:s,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}],w=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},w),new Co({keys:g,programId:r,data:Buffer.from([...Ro.swapBaseOutput,...w])})}import Le from"bn.js";var Hu=v([ye(8),W("bump"),Ue("disableCreatePool"),Et("index"),h("tradeFeeRate"),h("protocolFeeRate"),h("fundFeeRate"),h("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(h(),16)]),Er=v([ye(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),h("lpAmount"),h("protocolFeesMintA"),h("protocolFeesMintB"),h("fundFeesMintA"),h("fundFeesMintB"),h("openTime"),X(h(),32)]);var Oo=class extends Se{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 ve(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),o={},i=new Set,s=[];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=Er.decode(d.accountInfo.data);o[String(e[m])]=E(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await ve(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Hu.decode(y.data)}}let c={},u=await ve(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new Le(Xd.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),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=E(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new O(y.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],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return E(C({},n),{[o]:E(C({},i),{id:new z(o),configInfo:i.configInfo,version:7,authority:En(i.programId).publicKey,mintA:et({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?rn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:et({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?rn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Cn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=et({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?rn(n[t.mintA.toBase58()].feeConfig):void 0}}),i=et({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?rn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=et({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Gt.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:s,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,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:En(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(m){var d=m,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:o,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,feeConfig:c,computeBudgetConfig:u}=d,l=Re(d,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var V,H,G;let p=o.feePayer||((V=this.scope.owner)==null?void 0:V.publicKey),y=new Le(new z(l.mintA.address).toBuffer()).lte(new Le(new z(l.mintB.address).toBuffer())),[f,b]=y?[l.mintA,l.mintB]:[l.mintB,l.mintA],[g,w]=y?[l.mintAAmount,l.mintBAmount]:[l.mintBAmount,l.mintAAmount],A=o.useSOLBalance&&f.address===Dr.toBase58(),k=o.useSOLBalance&&b.address===Dr.toBase58(),[I,T]=[new z(f.address),new z(b.address)],S=this.createTxBuilder(),{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:I,tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:p,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:i,checkCreateATAOwner:s});S.addInstruction(R||{});let{account:B,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:new z(b.address),tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:p,amount:w}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:i,checkCreateATAOwner:s});if(S.addInstruction(L||{}),x===void 0||B===void 0)throw Error("you don't has some token account");let D=Gu({programId:e,configId:new z(c.id),mintA:I,mintB:T});return S.addInstruction({instructions:[zu(e,this.scope.ownerPubKey,new z(c.id),D.authority,D.poolId,I,T,D.lpMint,x,B,Ae(this.scope.ownerPubKey,D.lpMint).publicKey,D.vaultA,D.vaultB,t,new z((H=f.programId)!=null?H:Gt),new z((G=b.programId)!=null?G:Gt),D.observationId,g,w,n)],instructionTypes:[F.CpmmCreatePool]}),S.addCustomComputeBudget(u),S.versionBuild({txVersion:a,extInfo:{address:E(C({},D),{mintA:f,mintB:b,programId:e,poolFeeAccount:t,feeConfig:c})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=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:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:E(C({},t),{lpAmount:new O(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Qe(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new O(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),w=g.amount,A=t.mintA.address===Dr.toString(),k=t.mintB.address===Dr.toString(),I=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(i?o:w).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:w}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(R||{});let{account:B,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?w:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?w:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(L||{}),!x&&!B&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let D=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),$e=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:D,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:V}=$e,H=Re($e,["tokenAccount"]);I.addInstruction(H);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Qe(new Le(1)).sub(s);return I.addInstruction({instructions:[Qu(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),V,x,B,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,i?b.amount:w,i?w:b.amount)],instructionTypes:[F.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),I.addCustomComputeBudget(c),I.versionBuild({txVersion:l})}async withdrawLiquidity(e){var V,H;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Qe(new Le(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(o.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(o.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[fe(l,t.mintA.extensions.feeConfig,d,!1),fe(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,w]=[new z(t.mintA.address),new z(t.mintB.address)],A=g.equals(Y),k=w.equals(Y),I,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});I=S,x&&b.addInstruction(x);let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,B&&b.addInstruction(B),(!I||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let D=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Yu(new z(t.programId),this.scope.ownerPubKey,new z(D.authority),new z(t.id),L,I,T,new z(D.vault.A),new z(D.vault.B),g,w,new z(t.lpMint.address),o,l.sub((V=p.fee)!=null?V:new Le(0)),m.sub((H=y.fee)!=null?H:new Le(0)))],instructionTypes:[F.CpmmWithdrawLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var R,B,L,D,V,H;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:i,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)];i?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Le((1+c)*1e4)).div(new Le(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Le((1-c)*1e4)).div(new Le(1e4));let w=t.mintA.address===Y.toBase58(),A=t.mintB.address===Y.toBase58(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new z((R=t.mintA.programId)!=null?R:Gt),owner:this.scope.ownerPubKey,createInfo:w||!o?{payer:this.scope.ownerPubKey,amount:o?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:y,checkCreateATAOwner:p});I&&f.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((B=t.mintB.programId)!=null?B:Gt),owner:this.scope.ownerPubKey,createInfo:A||o?{payer:this.scope.ownerPubKey,amount:o?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!k||!T)&&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:T,mintAUseSOLBalance:w,mintBUseSOLBalance:A,associatedOnly:y});let x=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[i?ju(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),o?k:T,o?T:k,new z(x.vault[o?"A":"B"]),new z(x.vault[o?"B":"A"]),new z((V=t[o?"mintA":"mintB"].programId)!=null?V:Gt),new z((H=t[o?"mintB":"mintA"].programId)!=null?H:Gt),o?b:g,o?g:b,Vr(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Fr(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),o?k:T,o?T:k,new z(x.vault[o?"A":"B"]),new z(x.vault[o?"B":"A"]),new z((L=t[o?"mintA":"mintB"].programId)!=null?L:Gt),new z((D=t[o?"mintB":"mintA"].programId)!=null?D:Gt),o?b:g,o?g:b,Vr(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[i?F.CpmmSwapBaseOut:F.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let i=n.toString()===e.mintB.address,s=vr.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new O(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Le((1-o)*1e4)).div(new Le(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:s,baseIn:a}){var w,A,k,I,T,S,x,R;let c=1-Number(i.toSignificant())/100,u=new Le(new O(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=fe(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((w=l.fee)!=null?w:new Le(0)),d=new Le(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=(A=l.fee)==null?void 0:A.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 y=m.mul(d).div(p==="base"?t:n),f={amount:ft,fee:void 0,expirationTime:void 0};if(!m.isZero()){let B=zd(y,t,n,d);this.logDebug("lpAmountData:",{amountA:B.amountA.toString(),amountB:B.amountB.toString()}),f=fe(B[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Qe(new Le(1)).add(i),g=fe(b.mul(f.amount.sub((I=f.fee)!=null?I:new Le(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function zd(r,e,t,n){let o=r.mul(e).div(n);!o.isZero()&&!r.mul(e).mod(n).isZero()&&(o=o.add(new Le(1)));let i=r.mul(t).div(n);return!i.isZero()&&!r.mul(t).mod(n).isZero()&&(i=i.add(new Le(1))),{amountA:o,amountB:i}}import{PublicKey as Pn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ce,TOKEN_2022_PROGRAM_ID as Ur,createTransferInstruction as nc}from"@solana/spl-token";import Gr from"bn.js";import{TOKEN_PROGRAM_ID as fs,TOKEN_2022_PROGRAM_ID as Qd,ASSOCIATED_TOKEN_PROGRAM_ID as Yd}from"@solana/spl-token";import{PublicKey as Q,TransactionInstruction as ys,SystemProgram as bs}from"@solana/web3.js";import wn from"bn.js";function IB(r,e,t,n,o,i,s,a,c,u,l,m){let d=v([W("instruction"),h("amountIn"),h("amountOut")]),p=[{pubkey:bs.programId,isSigner:!1,isWritable:!1},{pubkey:fs,isSigner:!1,isWritable:!1},{pubkey:new Q(t.programId),isSigner:!1,isWritable:!1},{pubkey:new Q(t.id),isSigner:!1,isWritable:!0},{pubkey:new Q(n.id),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=ke(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new Q("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new ys({keys:p,programId:r,data:y})}function BB(r,e,t,n,o,i,s,a,c,u){let l=v([W("instruction")]),m=[{pubkey:bs.programId,isSigner:!1,isWritable:!1},{pubkey:fs,isSigner:!1,isWritable:!1},{pubkey:new Q(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new Q(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new Q(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=ke(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new Q("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new ys({keys:m,programId:r,data:d})}function jd(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[P({pubkey:fs,isWritable:!1}),P({pubkey:Qd,isWritable:!1}),P({pubkey:Yd,isWritable:!1}),P({pubkey:bs.programId,isWritable:!1}),P({pubkey:e,isSigner:!0})];b.push(P({pubkey:t})),b.push(P({pubkey:o}));let g=[c,u],w=[l,m],A=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=A[S]===x.mintA.address;if(b.push(P({pubkey:new Q(x.programId),isWritable:!1})),S===g.length-1?b.push(P({pubkey:o})):b.push(P({pubkey:n})),b.push(P({pubkey:new Q(A[S])})),b.push(P({pubkey:new Q(A[S+1])})),x.version===6){let B=w[S];b.push(P({pubkey:new Q(B.config.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(R?B.vault.A:B.vault.B)})),b.push(P({pubkey:new Q(R?B.vault.B:B.vault.A)})),b.push(P({pubkey:new Q(x.observationId)})),b.push(P({pubkey:Yo})),b.push(P({pubkey:ut(new Q(x.programId),new Q(x.id)).publicKey})),f.push(Hd(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(P({pubkey:new Q(L)}))}else if(x.version===5){let B=w[S];b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.authority),isWritable:!1})),b.push(P({pubkey:new Q(B.marketProgramId)})),b.push(P({pubkey:new Q(B.marketAuthority)})),b.push(P({pubkey:ya,isWritable:!1})),b.push(P({pubkey:new Q(B.openOrders)})),b.push(P({pubkey:new Q(B.vault.A)})),b.push(P({pubkey:new Q(B.vault.B)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.marketId)})),b.push(P({pubkey:new Q(B.marketBids)})),b.push(P({pubkey:new Q(B.marketAsks)})),b.push(P({pubkey:new Q(B.marketEventQueue)})),b.push(P({pubkey:new Q(B.marketBaseVault)})),b.push(P({pubkey:new Q(B.marketQuoteVault)}))}else if(x.version===4){let B=w[S],L=x.status!==1;b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.authority),isWritable:!1})),b.push(P({pubkey:new Q(L?B.id:B.marketProgramId)})),b.push(P({pubkey:new Q(L?B.id:B.marketAuthority)})),b.push(P({pubkey:new Q(L?B.id:B.openOrders)})),b.push(P({pubkey:new Q(B.vault.A)})),b.push(P({pubkey:new Q(B.vault.B)})),b.push(P({pubkey:new Q(L?B.id:B.marketId)})),b.push(P({pubkey:new Q(L?B.id:B.marketBids)})),b.push(P({pubkey:new Q(L?B.id:B.marketAsks)})),b.push(P({pubkey:new Q(L?B.id:B.marketEventQueue)})),b.push(P({pubkey:new Q(L?B.id:B.marketBaseVault)})),b.push(P({pubkey:new Q(L?B.id:B.marketQuoteVault)}))}else if(x.version===7){let B=w[S];b.push(P({pubkey:new Q(B.authority)})),b.push(P({pubkey:new Q(B.config.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(R?B.vault.A:B.vault.B)})),b.push(P({pubkey:new Q(R?B.vault.B:B.vault.A)})),b.push(P({pubkey:new Q(x.observationId)}))}else throw Error("pool type error")}let k=v([W("insId"),h("amountIn"),h("amountOut"),X(J(),f.length,"clmmPriceLimit")]),I=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},I),new ys({keys:b,programId:r,data:I})}function Hd(r,e){if(r)if(e){let t=new wn(r).div(new wn(25));return t.gt(Br)?t:Br}else{let t=new wn(r).mul(new wn(25));return t.lt(xr)?t:xr}else return e?Br:xr}function Zu({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=ke(m),p=t.equals(d.mintA.address)?At.add(dt):wt.sub(dt);return xe.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new wn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Fr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new Q(m[d?"mintA":"mintB"].address),new Q(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?F.CpmmSwapBaseIn:F.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[hr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new wn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?F.AmmV5SwapBaseIn:F.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[jd(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new wn(0)),n.remainingAccounts)],instructionTypes:[F.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var $u={[yi.toBase58()]:3},Ju={3:yi};var gs=v([ye(5),ye(8),K("ownAddress"),h("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),h("baseDepositsTotal"),h("baseFeesAccrued"),K("quoteVault"),h("quoteDepositsTotal"),h("quoteFeesAccrued"),h("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),h("baseLotSize"),h("quoteLotSize"),h("feeRateBps"),h("referrerRebatesAccrued"),ye(7)]),ec={3:gs};import{PublicKey as tc}from"@solana/web3.js";var Wr=ue("Serum"),qr=class{static getProgramId(e){let t=Ju[e];return t||Wr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=$u[t];return n||Wr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=ec[e];return t||Wr.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 s=n.concat(Buffer.from([o]),Buffer.alloc(7));i=tc.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:i,nonce:o}}return Wr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:tc.default,nonce:o}}};var Xt=new Gr(0),Lo=class extends Se{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(Y));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}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=$(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[Nt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[Nt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),no({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:o})}async wrapWSol(e,t,n){let o=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),o.length&&i.addInstruction({instructions:[no({destination:o[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Nt({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(Y),m=u.amount.token.mint.equals(Y),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Ur:Ce,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?Ur:Ce);else{let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Ur:Ce,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=k,I&&a.addInstruction(I)}m&&a.addInstruction({endInstructions:[Nt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ce})],endInstructionTypes:[F.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?Ur:Ce)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=Zu({routeProgram:i,inputMint:d,swapInfo:E(C({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[nc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]}),k.addInstruction(A);let{transactions:I}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();I.length<2&&a.addInstruction({instructions:[nc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]})}return a.addInstruction(A),s===0?a.sizeCheckBuildV0({computeBudgetConfig:o,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:o,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=fa,clmm:n=ba,cpmm:o=ga}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:go.offsetOf("baseMint"),length:64}}),s=v([K("baseMint"),K("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=v([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:bn.span}],dataSlice:{offset:bn.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Er.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===Pn.default.toString()?Y:e,t=t.toString()===Pn.default.toString()?Y:t;let s={},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:Ce,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:Ce,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:Ce,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:Ce,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),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ce,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:Ce,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:Ce,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:Ce,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:Ce,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:Ce,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:Ce,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:Ce,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 y of p.in)for(let f of p.out)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)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),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)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.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(f=>f.id)),s=Or(i),a={};Object.values(s).forEach(f=>{o.delete(f.mintA.address),a[f.mintA.address]={address:new Pn(f.mintA.address),programId:Ce,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(f.mintB.address),a[f.mintB.address]={address:new Pn(f.mintB.address),programId:Ce,mintAuthority:null,supply:BigInt(0),decimals:f.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(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Ce)?(o.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),f.mintProgramB.equals(Ce)?(o.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.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 Cn({connection:this.scope.connection,mints:Array.from(o).map(f=>new Pn(f))});a=C(C({},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(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>E(C({},f),{[b]:E(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,w,A,k,I,T,S,x,R;let m=l===void 0?new Gr(0):e.raw.mul(new Gr(l.feeBps.toNumber())).div(new Gr(1e4)),d=e.raw.sub(m),p=new ge(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=E(C({},t),{address:lt(t.address).toString()}),b=[];for(let B of n)try{b.push(E(C({},this.computeAmountOut({itemPool:B,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",B.version,B.id.toString(),L.message)}this.logDebug("direct done");for(let[B,L]of Object.entries(o)){let D={chainId:101,address:B,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},V=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:D,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var an,zt,Tn,_t;let $e=G===void 0?Xt:G.data.amountOut.amount.raw.sub((zt=(an=G.data.amountOut.fee)==null?void 0:an.raw)!=null?zt:Xt),kn=q===void 0?Xt:q.data.amountOut.amount.raw.sub((_t=(Tn=q.data.amountOut.fee)==null?void 0:Tn.raw)!=null?_t:Xt);return $e.lt(kn)?1:-1})[0];if(V===void 0)continue;let H=new ge(Pr(D),V.data.amountOut.amount.raw.sub((w=(g=V.data.amountOut.fee)==null?void 0:g.raw)!=null?w:Xt));for(let G of L.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:H});b.push(E(C({},q),{allTrade:!!(V.data.allTrade&&q.allTrade),amountIn:V.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new O(new rt({baseToken:V.data.amountIn.amount.token,denominator:V.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((k=(A=q.amountOut.fee)==null?void 0:A.raw)!=null?k:Xt)}).toFixed()),priceImpact:new O(V.data.priceImpact.add(q.priceImpact).toFixed()),fee:[V.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[V.pool,G],remainingAccounts:[V.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(I=q.amountOut.fee)!=null&&I.raw?new ge(V.data.amountOut.amount.token,((S=(T=V.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Xt).add((R=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?R:Xt)):void 0,middleToken:V.data.amountOut.amount.token,poolReady:V.data.poolReady&&q.poolReady,poolType:[V.data.poolType,q.poolType],feeConfig:y,expirationTime:xt(V.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(B=>(B.allTrade||this.logDebug(`pool ${B.poolInfoList.map(L=>L.id.toString()).join(",")} filter out since not all trade`),B.allTrade)).sort((B,L)=>B.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Xt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:w,executionPriceX64:A}=Ke.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new O(y.toFixed()),executionPrice:new O(f.toFixed()),priceImpact:new O(b.toFixed()),fee:[g],remainingAccounts:[w],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:xt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(E(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(E(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ge(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,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:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(E(C({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(E(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ge(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,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]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await ve(this.scope.connection,Array.from(s).map(l=>({pubkey:new Pn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=gs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:qr.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:E(C({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=C({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:ls({programId:new Pn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:En(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:et({address:u.mintLp.toBase58(),programId:Ce.toBase58(),decimals:u.lpDecimals}),config:E(C({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{TOKEN_PROGRAM_ID as Zd}from"@solana/spl-token";import{PublicKey as $d,Transaction as As,TransactionInstruction as Jd}from"@solana/web3.js";import oc from"bn.js";var Ze=class extends Se{static getPdaPoolId(e,t){return ae([Ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ae([Ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new oc(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>Ze.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Ze.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Ze.getPdaOwnerId(t,m,o,l).publicKey));let c=await Tt(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==Ze.POOL_LAYOUT.span||b.data.length!==Ze.OWNER_LAYOUT.span)continue;let g=Ze.POOL_LAYOUT.decode(f.data),w=Ze.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),k=g.endTime.toNumber(),I=w.tokenInfo.map(x=>x.debtAmount.gt(new oc(0))).filter(x=>!x).length!==3,T=i>A&&i<k&&g.status===1,S=I&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:w.lpAmount,project:Ze.VERSION_PROJECT[m],openTime:A,endTime:k,canClaim:S,canClaimErrorType:I?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:w.tokenInfo[R].debtAmount.add(w.tokenInfo[R].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(Be.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!c.mintAddress.equals(Be.WSOL.mint),associatedOnly:c.mintAddress.equals(Be.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[Ze.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Be.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!m.mintAddress.equals(Be.WSOL.mint),associatedOnly:m.mintAddress.equals(Be.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[Ze.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:o,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return rr(c,[o,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new As().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new As().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new As().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=v([]),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:Zd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Jd({keys:i,programId:e,data:a})}},Pt=Ze;Pt.CLAIMED_NUM=3,Pt.POOL_LAYOUT=v([ye(8),W("bump"),W("status"),h("openTime"),h("endTime"),K("ammId"),X(v([W("mintDecimals"),K("mintAddress"),K("mintVault"),h("perLpLoss"),h("totalClaimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),X(h(),10,"padding")]),Pt.OWNER_LAYOUT=v([ye(8),W("bump"),W("version"),K("poolId"),K("owner"),h("lpAmount"),X(v([K("mintAddress"),h("debtAmount"),h("claimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),X(h(),4,"padding")]),Pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new $d(e)),Pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as No}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as uc}from"@solana/spl-token";import Mo from"bn.js";import{TransactionInstruction as tp,SYSVAR_RENT_PUBKEY as np}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as rc}from"@solana/spl-token";import{createInitializeAccountInstruction as ic}from"@solana/spl-token";import{SystemProgram as hn,Transaction as sc}from"@solana/web3.js";function ep(r="accountFlags"){let e=new pr(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ws=v([ye(5),ep("accountFlags"),K("ownAddress"),h("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),h("baseDepositsTotal"),h("baseFeesAccrued"),K("quoteVault"),h("quoteDepositsTotal"),h("quoteFeesAccrued"),h("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),h("baseLotSize"),h("quoteLotSize"),h("feeRateBps"),h("referrerRebatesAccrued"),ye(7)]);function op({programId:r,marketInfo:e}){let t=v([W("version"),qe("instruction"),h("baseLotSize"),h("quoteLotSize"),Et("feeRateBps"),h("vaultSignerNonce"),h("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:np,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 tp({keys:n,programId:r,data:o})}async function ac({connection:r,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new sc,o=await r.getMinimumBalanceForRentExemption(165);n.add(hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:rc}),hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:rc}),ic(t.baseVault.publicKey,t.baseMint,t.vaultOwner),ic(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new sc;return i.add(hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(ws.span),space:ws.span,programId:t.programId}),hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await r.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),hn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await r.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),op({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:[F.CreateAccount,F.CreateAccount,F.InitAccount,F.InitAccount]},{transaction:i,signer:[],instructionTypes:[F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.InitMarket]}]}var Dn=class extends Se{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,txVersion:u,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=st({fromPublicKey:m,programId:i}),p=st({fromPublicKey:m,programId:i}),y=st({fromPublicKey:m,programId:i}),f=st({fromPublicKey:m,programId:i}),b=st({fromPublicKey:m,programId:i}),g=st({fromPublicKey:m,programId:uc}),w=st({fromPublicKey:m,programId:uc}),A=0,k=new Mo(100);function I(){let D=new Mo(0);for(;;)try{return{vaultOwner:No.createProgramAddressSync([d.publicKey.toBuffer(),D.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:D}}catch{if(D.iaddn(1),D.gt(new Mo(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=I(),x=new Mo(Math.round(10**e.decimals*n)),R=new Mo(Math.round(n*10**t.decimals*o));if(x.eq(ft))throw Error("lot size is too small");if(R.eq(ft))throw Error("tick size or lot size is too small");let B=await ac({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:d,baseMint:e.mint,quoteMint:t.mint,baseVault:g,quoteVault:w,vaultOwner:T,requestQueue:p,eventQueue:y,bids:f,asks:b,feeRateBps:A,quoteDustThreshold:k,vaultSignerNonce:S,baseLotSize:x,quoteLotSize:R,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c}}),L=this.createTxBuilder();L.addInstruction({instructions:B[0].transaction.instructions,signers:B[0].signer});for await(let D of B.slice(1,B.length))L.addInstruction({instructions:D.transaction.instructions,signers:D.signer,instructionTypes:D.instructionTypes});return u===0?L.sizeCheckBuildV0({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:w.publicKey,baseMint:new No(e.mint),quoteMin:new No(t.mint)}}):L.sizeCheckBuild({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:w.publicKey,baseMint:new No(e.mint),quoteMin:new No(t.mint)}})}};import{PublicKey as vo}from"@solana/web3.js";import{TransactionInstruction as hs,SYSVAR_CLOCK_PUBKEY as rp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ks}from"@solana/spl-token";var Ps=v([W("instruction"),Ta("amount")]),_o=v([W("instruction")]);function uS({programId:r,amount:e,instructionKeys:t}){let n=[{pubkey:Ho,isSigner:!1,isWritable:!1},{pubkey:ks,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:ri,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],o=Buffer.alloc(Ps.span);return Ps.encode({instruction:1,amount:Number(e)},o),new hs({keys:n,programId:r,data:o})}function Xr({programId:r},e){let t=[{pubkey:ks,isSigner:!1,isWritable:!1},{pubkey:ri,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(_o.span);return _o.encode({instruction:2},n),new hs({keys:t,programId:r,data:n})}function Ts(r){let{poolConfig:e,userKeys:t,side:n}=r,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(_o.span);_o.encode({instruction:2},s);let a=[{pubkey:ks,isWritable:!1,isSigner:!1},{pubkey:rp,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 hs({programId:e.programId,keys:a,data:s})}import cc from"bn.js";var ip={[eo.IDO_PROGRAM_ID_V1.toString()]:1,[eo.IDO_PROGRAM_ID_V2.toString()]:2,[eo.IDO_PROGRAM_ID_V3.toString()]:3,[eo.IDO_PROGRAM_ID_V4.toString()]:4},Wn=class extends Se{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i}){let s=this.createTxBuilder(),a=ip[t.programId];a||this.logAndCreateError("invalid version",a);let c=ke(t),[u,l]=[!new cc(e.coin).isZero(),!new cc(e.pc).isZero()],m=c.projectInfo.mint.address.equals(Y),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:o});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(Y),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.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(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[Xr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new vo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Xr({programId:new vo(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new vo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Xr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new vo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new vo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[Ts(E(C({},g),{side:"base"}))]:[],...l?[Ts(E(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as sp}from"@solana/web3.js";import{MintLayout as ap,TOKEN_2022_PROGRAM_ID as Is,TOKEN_PROGRAM_ID as Bs}from"@solana/spl-token";var Vo=class extends Se{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;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:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Lt.address,Lt),this._mintGroup.official.add(Lt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,E(C({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,E(C({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Is.toBase58():Bs.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,E(C({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Is.toBase58():Bs.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,E(C({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Is.toBase58():Bs.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 Lt;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,E(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new sp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=ap.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.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 zr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new It(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ue("Raydium"),this.farm=new yo({scope:this,moduleName:"Raydium_Farm"}),this.account=new oo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new xo({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Vo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Lo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new So({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Oo({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Pt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Dn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Wn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=up({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:s,urlConfigs:a}=t,c=new lr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:s}),u=new zr(E(C({},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(mr);return this._owner.publicKey}setOwner(e){return this._owner=e?new It(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Pa);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 this.logger.error(mr),new Error(mr)}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){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=>E(C({},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{}}}};var m0=r=>r;export{cd as AMM_CONFIG_SEED,Pu as BIT_PRECISION,So as Clmm,Ku as ClmmConfigLayout,xe as ClmmInstrument,Mr as ConstantProductCurve,Hu as CpmmConfigInfoLayout,Lr as CpmmFee,Er as CpmmPoolInfoLayout,vr as CurveCalculator,Ym as DataElement,os as EXTENSION_TICKARRAY_BITMAP_SIZE,Ua as FARM_LOCK_MINT,Ga as FARM_LOCK_VAULT,yt as FARM_PROGRAM_TO_VERSION,za as FARM_VERSION_TO_LEDGER_LAYOUT,Xa as FARM_VERSION_TO_STATE_LAYOUT,Sr as FEE_RATE_DENOMINATOR,ms as FEE_RATE_DENOMINATOR_VALUE,Ad as FETCH_TICKARRAY_COUNT,gd as Fee,Cr as LIQUIDITY_FEES_DENOMINATOR,as as LIQUIDITY_FEES_NUMERATOR,Bd as LIQUIDITY_VERSION_TO_SERUM_VERSION,RP as LIQUIDITY_VERSION_TO_STATE_LAYOUT,hu as LOG_B_2_X32,ku as LOG_B_P_ERR_MARGIN_LOWER_X64,Tu as LOG_B_P_ERR_MARGIN_UPPER_X64,ce as LiquidityMath,ws as MARKET_STATE_LAYOUT_V2,gs as MARKET_STATE_LAYOUT_V3,ec as MARKET_VERSION_TO_STATE_LAYOUT,wt as MAX_SQRT_PRICE_X64,xr as MAX_SQRT_PRICE_X64_SUB_ONE,tt as MAX_TICK,At as MIN_SQRT_PRICE_X64,Br as MIN_SQRT_PRICE_X64_ADD_ONE,je as MIN_TICK,_n as MODEL_DATA_PUBKEY,qr as Market,ne as MathUtil,ns as MaxU64,wu as MaxUint128,qt as NEGATIVE_ONE,bd as OBSERVATION_SEED,dt as ONE,fd as OPERATION_SEED,Cu as ObservationInfoLayout,hd as ObservationLayout,Ru as OperationLayout,dd as POOL_REWARD_VAULT_SEED,ld as POOL_SEED,yd as POOL_TICK_ARRAY_BITMAP_SEED,md as POOL_VAULT_SEED,yu as POSITION_SEED,bn as PoolInfoLayout,Ke as PoolUtils,Kr as PositionInfoLayout,Td as PositionRewardInfoLayout,To as PositionUtils,fk as ProtocolPositionLayout,Ir as Q128,pt as Q64,zr as Raydium,kd as RewardInfo,qu as RoundDirection,$u as SERUM_PROGRAMID_TO_VERSION,Ju as SERUM_VERSION_TO_PROGRAMID,Lt as SOL_INFO,rP as SPL_MINT_LAYOUT,ee as SqrtPriceMath,Mn as StableLayout,yn as SwapMath,fn as TICK_ARRAY_BITMAP_SIZE,pd as TICK_ARRAY_SEED,Ve as TICK_ARRAY_SIZE,oh as TICK_SPACINGS,_e as TOKEN_WSOL,Ut as TickArrayBitmap,Su as TickArrayBitmapExtensionLayout,ko as TickArrayBitmapExtensionUtils,ho as TickArrayLayout,Id as TickLayout,gn as TickMath,le as TickQuery,j as TickUtils,Po as U64Resolution,ih as U64_IGNORE_RANGE,Wa as Voter,Cm as VoterDepositEntry,Km as VoterLockup,Da as VoterRegistrar,Sm as VoterVotingMintConfig,de as ZERO,ji as addLiquidityLayout,Ci as associatedLedgerAccountLayout,qi as calFarmRewardAmount,Ld as ceilDiv,_o as claimLayout,xu as clmmComputeInfoToApiInfo,Nt as closeAccountInstruction,lo as createAssociatedLedgerAccountInstruction,tu as createPoolFeeLayout,lu as createPoolV4InstructionV2,CP as createPoolV4Layout,Dt as createWSolAccountInstructions,Je as dwLayout,Ni as farmAddRewardLayout,UA as farmLedgerLayoutV3_1,io as farmLedgerLayoutV3_2,GA as farmLedgerLayoutV5_1,Fa as farmLedgerLayoutV5_2,Ea as farmLedgerLayoutV6_1,Ya as farmRewardInfoToConfig,Oi as farmRewardLayout,Li as farmRewardRestartLayout,xm as farmRewardTimeInfoLayout,va as farmStateV3Layout,Va as farmStateV5Layout,ro as farmStateV6Layout,yw as fetchMultipleFarmInfoAndUpdate,Xk as fetchMultipleInfo,zi as fixedSwapInLayout,Qi as fixedSwapOutLayout,Du as floorDiv,rd as formatLayout,st as generatePubKey,Qa as getAssociatedAuthority,Rr as getAssociatedConfigId,Ye as getAssociatedLedgerAccount,ao as getAssociatedLedgerPoolAccount,Rd as getAssociatedOpenOrders,vu as getAssociatedPoolKeys,hI as getCpmmPdaAmmConfigId,Dd as getCpmmPdaPoolId,Gu as getCreatePoolKeys,Ui as getDepositEntryIndex,iu as getDxByDyBaseIn,ru as getDyByDxBaseIn,Nn as getFarmLedgerLayout,Rm as getFarmStateLayout,ls as getLiquidityAssociatedAuthority,An as getLiquidityAssociatedId,Gh as getLiquidityFromAmounts,eh as getPdaAmmConfigId,ut as getPdaExBitmapAccount,Wd as getPdaLpMint,Tr as getPdaMetadataKey,Au as getPdaObservationAccount,Vr as getPdaObservationId,wo as getPdaOperationAccount,bt as getPdaPersonalPositionAddress,En as getPdaPoolAuthority,bu as getPdaPoolId,gu as getPdaPoolRewardVaulId,ts as getPdaPoolVaultId,pn as getPdaProtocolPositionAddress,Pe as getPdaTickArrayAddress,Uu as getPdaVault,vi as getRegistrarAddress,su as getStablePrice,Wi as getTokenOwnerRecordAddress,Ei as getVoterAddress,Di as getVoterWeightRecordAddress,Fi as getVotingMintAuthority,Vi as getVotingTokenMint,Em as governanceCreateTokenOwnerRecord,jP as i16ToBytes,kr as i32ToBytes,Yi as initPoolLayout,Si as initTokenAccountInstruction,op as initializeMarket,Mi as isValidFarmVersion,Ao as isZero,bw as judgeFarmType,Ji as leadingZeros,fu as leastSignificantBit,go as liquidityStateV4Layout,zm as liquidityStateV5Layout,hr as makeAMMSwapInstruction,cu as makeAddLiquidityInstruction,Xi as makeAddNewRewardInstruction,Xr as makeClaimInstruction,Ts as makeClaimInstructionV4,zu as makeCreateCpmmPoolInInstruction,ja as makeCreateFarmInstruction,ac as makeCreateMarketInstruction,Ha as makeCreatorWithdrawFarmRewardInstruction,Qu as makeDepositCpmmInInstruction,Za as makeDepositInstructionV3,$a as makeDepositInstructionV5,Ja as makeDepositInstructionV6,Nw as makeDepositTokenInstruction,_w as makeDepositWithdrawInstruction,QP as makeInitPoolInstructionV4,uS as makePurchaseInstruction,Gi as makeRestartRewardInstruction,mu as makeSimulatePoolInfoInstruction,Fr as makeSwapCpmmBaseInInInstruction,ju as makeSwapCpmmBaseOutInInstruction,ad as makeSwapFixedInInstruction,ud as makeSwapFixedOutInstruction,Zu as makeSwapInstruction,no as makeTransferInstruction,Yu as makeWithdrawCpmmInInstruction,fo as makeWithdrawInstructionV3,po as makeWithdrawInstructionV5,mo as makeWithdrawInstructionV6,Mw as makeWithdrawTokenInstruction,rh as mockCreatePoolInfo,Iu as mockV3CreatePoolInfo,jm as modelDataInfoLayout,pu as mostSignificantBit,_a as parseTokenAccountResp,fP as parseTokenInfo,on as poolTypeV6,Ps as purchaseLayout,Tm as realFarmStateV3Layout,Im as realFarmStateV5Layout,Bm as realFarmV6Layout,$i as removeLiquidityInstruction,Hi as removeLiquidityLayout,IB as route1Instruction,BB as route2Instruction,jd as routeInstruction,zP as simulatePoolInfoInstruction,bP as solToWSolToken,Jt as splAccountLayout,Or as toAmmComputePoolInfo,et as toApiV3Token,rn as toFeeConfig,Pr as toToken,bo as toTokenAmount,yP as toTokenInfo,es as trailingZeros,du as u16ToBytes,HP as u32ToBytes,m0 as unionArr,Om as updateFarmPoolInfo,_i as validateFarmRewards,Wm as voterStakeRegistryCreateDepositEntry,Dm as voterStakeRegistryCreateVoter,vm as voterStakeRegistryDeposit,Vm as voterStakeRegistryUpdateVoterWeightRecord,Fm as voterStakeRegistryWithdraw,gP as wSolToSolToken,Ri as withdrawRewardLayout};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=index.mjs.map