@raydium-io/raydium-sdk-v2 0.1.8-alpha → 0.1.9-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 (46) hide show
  1. package/lib/api/api.js +1 -1
  2. package/lib/api/api.js.map +1 -1
  3. package/lib/api/api.mjs +1 -1
  4. package/lib/api/api.mjs.map +1 -1
  5. package/lib/api/index.js +1 -1
  6. package/lib/api/index.js.map +1 -1
  7. package/lib/api/index.mjs +1 -1
  8. package/lib/api/index.mjs.map +1 -1
  9. package/lib/index.d.ts +1 -1
  10. package/lib/index.js +1 -1
  11. package/lib/index.js.map +1 -1
  12. package/lib/index.mjs +1 -1
  13. package/lib/index.mjs.map +1 -1
  14. package/lib/raydium/account/account.d.ts +1 -1
  15. package/lib/raydium/clmm/clmm.d.ts +1 -1
  16. package/lib/raydium/clmm/index.d.ts +1 -1
  17. package/lib/raydium/cpmm/cpmm.d.ts +1 -1
  18. package/lib/raydium/farm/farm.d.ts +1 -1
  19. package/lib/raydium/ido/ido.d.ts +1 -1
  20. package/lib/raydium/ido/index.d.ts +1 -1
  21. package/lib/raydium/index.d.ts +1 -1
  22. package/lib/raydium/index.js +1 -1
  23. package/lib/raydium/index.js.map +1 -1
  24. package/lib/raydium/index.mjs +1 -1
  25. package/lib/raydium/index.mjs.map +1 -1
  26. package/lib/raydium/liquidity/liquidity.d.ts +1 -1
  27. package/lib/raydium/liquidity/liquidity.js +1 -1
  28. package/lib/raydium/liquidity/liquidity.js.map +1 -1
  29. package/lib/raydium/liquidity/liquidity.mjs +1 -1
  30. package/lib/raydium/liquidity/liquidity.mjs.map +1 -1
  31. package/lib/raydium/marketV2/createMarket.d.ts +1 -1
  32. package/lib/raydium/marketV2/index.d.ts +1 -1
  33. package/lib/raydium/moduleBase.d.ts +1 -1
  34. package/lib/raydium/raydium.d.ts +1 -1
  35. package/lib/raydium/raydium.js +1 -1
  36. package/lib/raydium/raydium.js.map +1 -1
  37. package/lib/raydium/raydium.mjs +1 -1
  38. package/lib/raydium/raydium.mjs.map +1 -1
  39. package/lib/raydium/token/token.d.ts +1 -1
  40. package/lib/raydium/tradeV2/trade.d.ts +1 -1
  41. package/lib/raydium/utils1216/index.d.ts +1 -1
  42. package/lib/raydium/utils1216/utils1216.d.ts +1 -1
  43. package/lib/{raydium-916014c1.d.ts → raydium-05c7eeff.d.ts} +2 -1
  44. package/package.json +1 -1
  45. package/src/api/api.ts +1 -1
  46. package/src/raydium/liquidity/liquidity.ts +31 -0
package/lib/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- var tc=Object.defineProperty,nc=Object.defineProperties;var rc=Object.getOwnPropertyDescriptors;var Lr=Object.getOwnPropertySymbols;var gs=Object.prototype.hasOwnProperty,ws=Object.prototype.propertyIsEnumerable;var bs=(r,e,t)=>e in r?tc(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,N=(r,e)=>{for(var t in e||(e={}))gs.call(e,t)&&bs(r,t,e[t]);if(Lr)for(var t of Lr(e))ws.call(e,t)&&bs(r,t,e[t]);return r},D=(r,e)=>nc(r,rc(e));var Ie=(r,e)=>{var t={};for(var n in r)gs.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Lr)for(var n of Lr(r))e.indexOf(n)<0&&ws.call(r,n)&&(t[n]=r[n]);return t};import Hl from"axios";import{get as Ci,set as As}from"lodash";import Ps from"dayjs";import ic from"dayjs/plugin/utc";Ps.extend(ic);var oc=(i=>(i[i.Error=0]="Error",i[i.Warning=1]="Warning",i[i.Info=2]="Info",i[i.Debug=3]="Debug",i))(oc||{}),Ri=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 Ps().utc().format("YYYY/MM/DD HH:mm:ss UTC")}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}},Li={},ks={};function ae(r){let e=Ci(Li,r);if(!e){let t=Ci(ks,r);e=new Ri({name:r,logLevel:t}),As(Li,r,e)}return e}function jp(r,e){As(ks,r,e);let t=Ci(Li,r);t&&(t.level=e)}import{PublicKey as wl}from"@solana/web3.js";import Al from"bn.js";import bl from"big.js";import zt from"bn.js";import he from"bn.js";var gn=9e15,Xt=1e9,Oi="0123456789abcdef",Nr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Mr="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Ni={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-gn,maxE:gn,crypto:!1},xs,Lt,$=!0,Vr="[DecimalError] ",Gt=Vr+"Invalid argument: ",Bs=Vr+"Precision limit exceeded",Ss=Vr+"crypto unavailable",Ks="[object Decimal]",Ge=Math.floor,Oe=Math.pow,sc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,ac=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,uc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Cs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,bt=1e7,Q=7,cc=9007199254740991,lc=Nr.length-1,Mi=Mr.length-1,O={toStringTag:Ks};O.absoluteValue=O.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),z(r)};O.ceil=function(){return z(new this.constructor(this),this.e+1,2)};O.clampedTo=O.clamp=function(r,e){var t,n=this,i=n.constructor;if(r=new i(r),e=new i(e),!r.s||!e.s)return new i(NaN);if(r.gt(e))throw Error(Gt+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new i(n)};O.comparedTo=O.cmp=function(r){var e,t,n,i,o=this,s=o.d,a=(r=new o.constructor(r)).d,u=o.s,c=r.s;if(!s||!a)return!u||!c?NaN:u!==c?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-c:0;if(u!==c)return u;if(o.e!==r.e)return o.e>r.e^u<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===i?0:n>i^u<0?1:-1};O.cosine=O.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())+Q,n.rounding=1,t=mc(n,Ms(n,t)),n.precision=r,n.rounding=e,z(Lt==2||Lt==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};O.cubeRoot=O.cbrt=function(){var r,e,t,n,i,o,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for($=!1,o=l.s*Oe(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=ve(l.d),r=l.e,(o=(r-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=Oe(t,1/3),r=Ge((r+1)/3)-(r%3==(r<0?-1:2)),o==1/0?t="5e"+r:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(o.toString()),s=(r=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=Ae(c.plus(l).times(a),c.plus(u),s+2,1),ve(a.d).slice(0,s)===(t=ve(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&(z(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=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 $=!0,z(n,r,m.rounding,e)};O.decimalPlaces=O.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-Ge(this.e/Q))*Q,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};O.dividedBy=O.div=function(r){return Ae(this,new this.constructor(r))};O.dividedToIntegerBy=O.divToInt=function(r){var e=this,t=e.constructor;return z(Ae(e,new t(r),0,1,1),t.precision,t.rounding)};O.equals=O.eq=function(r){return this.cmp(r)===0};O.floor=function(){return z(new this.constructor(this),this.e+1,3)};O.greaterThan=O.gt=function(r){return this.cmp(r)>0};O.greaterThanOrEqualTo=O.gte=function(r){var e=this.cmp(r);return e==1||e===0};O.hyperbolicCosine=O.cosh=function(){var r,e,t,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(r=Math.ceil(i/3),e=(1/Fr(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),o=wn(s,1,o.times(e),new s(1),!0);for(var u,c=r,l=new s(8);c--;)u=o.times(o),o=a.minus(u.times(l.minus(u.times(l))));return z(o,s.precision=t,s.rounding=n,!0)};O.hyperbolicSine=O.sinh=function(){var r,e,t,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(e=o.precision,t=o.rounding,o.precision=e+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=wn(o,2,i,i,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,i=i.times(1/Fr(5,r)),i=wn(o,2,i,i,!0);for(var s,a=new o(5),u=new o(16),c=new o(20);r--;)s=i.times(i),i=i.times(a.plus(s.times(u.times(s).plus(c))))}return o.precision=e,o.rounding=t,z(i,e,t,!0)};O.hyperbolicTangent=O.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,Ae(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};O.inverseCosine=O.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,o=t.rounding;return n!==-1?n===0?e.isNeg()?yt(t,i,o):new t(0):new t(NaN):e.isZero()?yt(t,i+4,o).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),r=yt(t,i+4,o).times(.5),t.precision=i,t.rounding=o,r.minus(e))};O.inverseHyperbolicCosine=O.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,$=!1,t=t.times(t).minus(1).sqrt().plus(t),$=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};O.inverseHyperbolicSine=O.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,$=!1,t=t.times(t).plus(1).sqrt().plus(t),$=!0,n.precision=r,n.rounding=e,t.ln())};O.inverseHyperbolicTangent=O.atanh=function(){var r,e,t,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(r=o.precision,e=o.rounding,n=i.sd(),Math.max(n,r)<2*-i.e-1?z(new o(i),r,e,!0):(o.precision=t=n-i.e,i=Ae(i.plus(1),new o(1).minus(i),t+r,1),o.precision=r+4,o.rounding=1,i=i.ln(),o.precision=r,o.rounding=e,i.times(.5))):new o(NaN)};O.inverseSine=O.asin=function(){var r,e,t,n,i=this,o=i.constructor;return i.isZero()?new o(i):(e=i.abs().cmp(1),t=o.precision,n=o.rounding,e!==-1?e===0?(r=yt(o,t+4,n).times(.5),r.s=i.s,r):new o(NaN):(o.precision=t+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=n,i.times(2)))};O.inverseTangent=O.atan=function(){var r,e,t,n,i,o,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=Mi)return s=yt(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=Mi)return s=yt(l,m+4,d).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/Q+2|0),r=t;r;--r)c=c.div(c.times(c).plus(1).sqrt().plus(1));for($=!1,e=Math.ceil(a/Q),n=1,u=c.times(c),s=new l(c),i=c;r!==-1;)if(i=i.times(u),o=s.minus(i.div(n+=2)),i=i.times(u),s=o.plus(i.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===o.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),$=!0,z(s,l.precision=m,l.rounding=d,!0)};O.isFinite=function(){return!!this.d};O.isInteger=O.isInt=function(){return!!this.d&&Ge(this.e/Q)>this.d.length-2};O.isNaN=function(){return!this.s};O.isNegative=O.isNeg=function(){return this.s<0};O.isPositive=O.isPos=function(){return this.s>0};O.isZero=function(){return!!this.d&&this.d[0]===0};O.lessThan=O.lt=function(r){return this.cmp(r)<0};O.lessThanOrEqualTo=O.lte=function(r){return this.cmp(r)<1};O.logarithm=O.log=function(r){var e,t,n,i,o,s,a,u,c=this,l=c.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=c.d,c.s<0||!t||!t[0]||c.eq(1))return new l(t&&!t[0]?-1/0:c.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)o=!0;else{for(i=t[0];i%10===0;)i/=10;o=i!==1}if($=!1,a=m+p,s=Ut(c,a),n=e?_r(l,a+10):Ut(r,a),u=Ae(s,n,a,1),Fn(u.d,i=m,d))do if(a+=10,s=Ut(c,a),n=e?_r(l,a+10):Ut(r,a),u=Ae(s,n,a,1),!o){+ve(u.d).slice(i+1,i+15)+1==1e14&&(u=z(u,m+1,0));break}while(Fn(u.d,i+=10,d));return $=!0,z(u,m,d)};O.minus=O.sub=function(r){var e,t,n,i,o,s,a,u,c,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(c=p.d,d=r.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])r.s=-r.s;else if(c[0])r=new y(p);else return new y(u===3?-0:0);return $?z(r,a,u):r}if(t=Ge(r.e/Q),l=Ge(p.e/Q),c=c.slice(),o=l-t,o){for(m=o<0,m?(e=c,o=-o,s=d.length):(e=d,t=l,s=c.length),n=Math.max(Math.ceil(a/Q),s)+2,o>n&&(o=n,e.length=1),e.reverse(),n=o;n--;)e.push(0);e.reverse()}else{for(n=c.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=d[n]){m=c[n]<d[n];break}o=0}for(m&&(e=c,c=d,d=e,r.s=-r.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>o;){if(c[--n]<d[n]){for(i=n;i&&c[--i]===0;)c[i]=bt-1;--c[i],c[n]+=bt}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(r.d=c,r.e=Er(c,t),$?z(r,a,u):r):new y(u===3?-0:0)};O.modulo=O.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):($=!1,n.modulo==9?(e=Ae(t,r.abs(),0,3,1),e.s*=r.s):e=Ae(t,r,0,n.modulo,1),e=e.times(r),$=!0,t.minus(e))};O.naturalExponential=O.exp=function(){return _i(this)};O.naturalLogarithm=O.ln=function(){return Ut(this)};O.negated=O.neg=function(){var r=new this.constructor(this);return r.s=-r.s,z(r)};O.plus=O.add=function(r){var e,t,n,i,o,s,a,u,c,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(c=m.d,l=r.d,a=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(r=new d(m)),$?z(r,a,u):r;if(o=Ge(m.e/Q),n=Ge(r.e/Q),c=c.slice(),i=o-n,i){for(i<0?(t=c,i=-i,s=l.length):(t=l,n=o,s=c.length),o=Math.ceil(a/Q),s=o>s?o+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=c.length,i=l.length,s-i<0&&(i=s,t=l,l=c,c=t),e=0;i;)e=(c[--i]=c[i]+l[i]+e)/bt|0,c[i]%=bt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return r.d=c,r.e=Er(c,n),$?z(r,a,u):r};O.precision=O.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Gt+r);return t.d?(e=Rs(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};O.round=function(){var r=this,e=r.constructor;return z(new e(r),r.e+1,e.rounding)};O.sine=O.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())+Q,n.rounding=1,t=pc(n,Ms(n,t)),n.precision=r,n.rounding=e,z(Lt>2?t.neg():t,r,e,!0)):new n(NaN)};O.squareRoot=O.sqrt=function(){var r,e,t,n,i,o,s=this,a=s.d,u=s.e,c=s.s,l=s.constructor;if(c!==1||!a||!a[0])return new l(!c||c<0&&(!a||a[0])?NaN:a?s:1/0);for($=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=ve(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=Ge((u+1)/2)-(u<0||u%2),c==1/0?e="5e"+u:(e=c.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new l(e)):n=new l(c.toString()),t=(u=l.precision)+3;;)if(o=n,n=o.plus(Ae(s,o,t+2,1)).times(.5),ve(o.d).slice(0,t)===(e=ve(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(z(o,u+1,0),o.times(o).eq(s))){n=o;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(z(n,u+1,1),r=!n.times(n).eq(s));break}return $=!0,z(n,u,l.rounding,r)};O.tangent=O.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=Ae(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,z(Lt==2||Lt==4?t.neg():t,r,e,!0)):new n(NaN)};O.times=O.mul=function(r){var e,t,n,i,o,s,a,u,c,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=Ge(l.e/Q)+Ge(r.e/Q),u=d.length,c=p.length,u<c&&(o=d,d=p,p=o,s=u,u=c,c=s),o=[],s=u+c,n=s;n--;)o.push(0);for(n=c;--n>=0;){for(e=0,i=u+n;i>n;)a=o[i]+p[n]*d[i-n-1]+e,o[i--]=a%bt|0,e=a/bt|0;o[i]=(o[i]+e)%bt|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),r.d=o,r.e=Er(o,t),$?z(r,m.precision,m.rounding):r};O.toBinary=function(r,e){return Ei(this,2,r,e)};O.toDecimalPlaces=O.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(tt(r,0,Xt),e===void 0?e=n.rounding:tt(e,0,8),z(t,r+t.e+1,e))};O.toExponential=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=ht(n,!0):(tt(r,0,Xt),e===void 0?e=i.rounding:tt(e,0,8),n=z(new i(n),r+1,e),t=ht(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};O.toFixed=function(r,e){var t,n,i=this,o=i.constructor;return r===void 0?t=ht(i):(tt(r,0,Xt),e===void 0?e=o.rounding:tt(e,0,8),n=z(new o(i),r+i.e+1,e),t=ht(n,!1,r+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};O.toFraction=function(r){var e,t,n,i,o,s,a,u,c,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(c=t=new f(1),n=u=new f(0),e=new f(n),o=e.e=Rs(y)-p.e-1,s=o%Q,e.d[0]=Oe(10,s<0?Q+s:s),r==null)r=o>0?e:c;else{if(a=new f(r),!a.isInt()||a.lt(c))throw Error(Gt+a);r=a.gt(e)?o>0?e:c:a}for($=!1,a=new f(ve(y)),l=f.precision,f.precision=o=y.length*Q*2;m=Ae(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(r)!=1;)t=n,n=i,i=c,c=u.plus(m.times(i)),u=i,i=e,e=a.minus(m.times(i)),a=i;return i=Ae(r.minus(t),n,0,1,1),u=u.plus(i.times(c)),t=t.plus(i.times(n)),u.s=c.s=p.s,d=Ae(c,n,o,1).minus(p).abs().cmp(Ae(u,t,o,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,$=!0,d};O.toHexadecimal=O.toHex=function(r,e){return Ei(this,16,r,e)};O.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:tt(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]?($=!1,t=Ae(t,r,0,e,1).times(r),$=!0,z(t)):(r.s=t.s,t=r),t};O.toNumber=function(){return+this};O.toOctal=function(r,e){return Ei(this,8,r,e)};O.toPower=O.pow=function(r){var e,t,n,i,o,s,a=this,u=a.constructor,c=+(r=new u(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new u(Oe(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,o=u.rounding,r.eq(1))return z(a,n,o);if(e=Ge(r.e/Q),e>=r.d.length-1&&(t=c<0?-c:c)<=cc)return i=Ls(u,a,t,n),r.s<0?new u(1).div(i):z(i,n,o);if(s=a.s,s<0){if(e<r.d.length-1)return new u(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=Oe(+a,c),e=t==0||!isFinite(t)?Ge(c*(Math.log("0."+ve(a.d))/Math.LN10+a.e+1)):new u(t+"").e,e>u.maxE+1||e<u.minE-1?new u(e>0?s/0:0):($=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),i=_i(r.times(Ut(a,n+t)),n),i.d&&(i=z(i,n+5,1),Fn(i.d,n,o)&&(e=n+10,i=z(_i(r.times(Ut(a,e+t)),e),e+5,1),+ve(i.d).slice(n+1,n+15)+1==1e14&&(i=z(i,n+1,0)))),i.s=s,$=!0,u.rounding=o,z(i,n,o))};O.toPrecision=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=ht(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(tt(r,1,Xt),e===void 0?e=i.rounding:tt(e,0,8),n=z(new i(n),r,e),t=ht(n,r<=n.e||n.e<=i.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};O.toSignificantDigits=O.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(tt(r,1,Xt),e===void 0?e=n.rounding:tt(e,0,8)),z(new n(t),r,e)};O.toString=function(){var r=this,e=r.constructor,t=ht(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};O.truncated=O.trunc=function(){return z(new this.constructor(this),this.e+1,1)};O.valueOf=O.toJSON=function(){var r=this,e=r.constructor,t=ht(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function ve(r){var e,t,n,i=r.length-1,o="",s=r[0];if(i>0){for(o+=s,e=1;e<i;e++)n=r[e]+"",t=Q-n.length,t&&(o+=qt(t)),o+=n;s=r[e],n=s+"",t=Q-n.length,t&&(o+=qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function tt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Gt+r)}function Fn(r,e,t,n){var i,o,s,a;for(o=r[0];o>=10;o/=10)--e;return--e<0?(e+=Q,i=0):(i=Math.ceil((e+1)/Q),e%=Q),o=Oe(10,Q-e),a=r[i]%o|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==o||t>3&&a+1==o/2)&&(r[i+1]/o/100|0)==Oe(10,e-2)-1||(a==o/2||a==0)&&(r[i+1]/o/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==o||!n&&t>3&&a+1==o/2)&&(r[i+1]/o/1e3|0)==Oe(10,e-3)-1,s}function Or(r,e,t){for(var n,i=[0],o,s=0,a=r.length;s<a;){for(o=i.length;o--;)i[o]*=e;for(i[0]+=Oi.indexOf(r.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function mc(r,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/Fr(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),r.precision+=t,e=wn(r,1,e.times(i),new r(1));for(var o=t;o--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var Ae=function(){function r(n,i,o){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*i+a,n[u]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function e(n,i,o,s){var a,u;if(o!=s)u=o>s?1:-1;else for(a=u=0;a<o;a++)if(n[a]!=i[a]){u=n[a]>i[a]?1:-1;break}return u}function t(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,u){var c,l,m,d,p,y,f,b,g,P,A,T,h,I,B,x,K,M,F,H,v=n.constructor,j=n.s==i.s?1:-1,te=n.d,ie=i.d;if(!te||!te[0]||!ie||!ie[0])return new v(!n.s||!i.s||(te?ie&&te[0]==ie[0]:!ie)?NaN:te&&te[0]==0||!ie?j*0:j/0);for(u?(p=1,l=n.e-i.e):(u=bt,p=Q,l=Ge(n.e/p)-Ge(i.e/p)),F=ie.length,K=te.length,g=new v(j),P=g.d=[],m=0;ie[m]==(te[m]||0);m++);if(ie[m]>(te[m]||0)&&l--,o==null?(I=o=v.precision,s=v.rounding):a?I=o+(n.e-i.e)+1:I=o,I<0)P.push(1),y=!0;else{if(I=I/p+2|0,m=0,F==1){for(d=0,ie=ie[0],I++;(m<K||d)&&I--;m++)B=d*u+(te[m]||0),P[m]=B/ie|0,d=B%ie|0;y=d||m<K}else{for(d=u/(ie[0]+1)|0,d>1&&(ie=r(ie,d,u),te=r(te,d,u),F=ie.length,K=te.length),x=F,A=te.slice(0,F),T=A.length;T<F;)A[T++]=0;H=ie.slice(),H.unshift(0),M=ie[0],ie[1]>=u/2&&++M;do d=0,c=e(ie,A,F,T),c<0?(h=A[0],F!=T&&(h=h*u+(A[1]||0)),d=h/M|0,d>1?(d>=u&&(d=u-1),f=r(ie,d,u),b=f.length,T=A.length,c=e(f,A,b,T),c==1&&(d--,t(f,F<b?H:ie,b,u))):(d==0&&(c=d=1),f=ie.slice()),b=f.length,b<T&&f.unshift(0),t(A,f,T,u),c==-1&&(T=A.length,c=e(ie,A,F,T),c<1&&(d++,t(A,F<T?H:ie,T,u))),T=A.length):c===0&&(d++,A=[0]),P[m++]=d,c&&A[0]?A[T++]=te[x]||0:(A=[te[x]],T=1);while((x++<K||A[0]!==void 0)&&I--);y=A[0]!==void 0}P[0]||P.shift()}if(p==1)g.e=l,xs=y;else{for(m=1,d=P[0];d>=10;d/=10)m++;g.e=m+l*p-1,z(g,a?o+g.e+1:o,s,y)}return g}}();function z(r,e,t,n){var i,o,s,a,u,c,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(i=1,a=m[0];a>=10;a/=10)i++;if(o=e-i,o<0)o+=Q,s=e,l=m[d=0],u=l/Oe(10,i-s-1)%10|0;else if(d=Math.ceil((o+1)/Q),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,i=1,o%=Q,s=o-Q+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;o%=Q,s=o-Q+i,u=s<0?0:l/Oe(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Oe(10,i-s-1)),c=t<4?(u||n)&&(t==0||t==(r.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(o>0?s>0?l/Oe(10,i-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=r.e+1,m[0]=Oe(10,(Q-e%Q)%Q),r.e=-e||0):m[0]=r.e=0,r;if(o==0?(m.length=d,a=1,d--):(m.length=d+1,a=Oe(10,Q-o),m[d]=s>0?(l/Oe(10,i-s)%Oe(10,s)|0)*a:0),c)for(;;)if(d==0){for(o=1,s=m[0];s>=10;s/=10)o++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(r.e++,m[0]==bt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=bt)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return $&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function ht(r,e,t){if(!r.isFinite())return Ns(r);var n,i=r.e,o=ve(r.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+qt(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(r.e<0?"e":"e+")+r.e):i<0?(o="0."+qt(-i-1)+o,t&&(n=t-s)>0&&(o+=qt(n))):i>=s?(o+=qt(i+1-s),t&&(n=t-i-1)>0&&(o=o+"."+qt(n))):((n=i+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(o+="."),o+=qt(n))),o}function Er(r,e){var t=r[0];for(e*=Q;t>=10;t/=10)e++;return e}function _r(r,e,t){if(e>lc)throw $=!0,t&&(r.precision=t),Error(Bs);return z(new r(Nr),e,1,!0)}function yt(r,e,t){if(e>Mi)throw Error(Bs);return z(new r(Mr),e,t,!0)}function Rs(r){var e=r.length-1,t=e*Q+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 qt(r){for(var e="";r--;)e+="0";return e}function Ls(r,e,t,n){var i,o=new r(1),s=Math.ceil(n/Q+4);for($=!1;;){if(t%2&&(o=o.times(e),Ts(o.d,s)&&(i=!0)),t=Ge(t/2),t===0){t=o.d.length-1,i&&o.d[t]===0&&++o.d[t];break}e=e.times(e),Ts(e.d,s)}return $=!0,o}function hs(r){return r.d[r.d.length-1]&1}function Os(r,e,t){for(var n,i=new r(e[0]),o=0;++o<e.length;)if(n=new r(e[o]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function _i(r,e){var t,n,i,o,s,a,u,c=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?($=!1,u=y):u=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Oe(2,m))/Math.LN10*2+5|0,u+=n,t=o=s=new d(1),d.precision=u;;){if(o=z(o.times(r),u,1),t=t.times(++l),a=s.plus(Ae(o,t,u,1)),ve(a.d).slice(0,u)===ve(s.d).slice(0,u)){for(i=m;i--;)s=z(s.times(s),u,1);if(e==null)if(c<3&&Fn(s.d,u-n,p,c))d.precision=u+=10,t=o=a=new d(1),l=0,c++;else return z(s,d.precision=y,p,$=!0);else return d.precision=y,s}s=a}}function Ut(r,e){var t,n,i,o,s,a,u,c,l,m,d,p=1,y=10,f=r,b=f.d,g=f.constructor,P=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?($=!1,l=A):l=e,g.precision=l+=y,t=ve(b),n=t.charAt(0),Math.abs(o=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=ve(f.d),n=t.charAt(0),p++;o=f.e,n>1?(f=new g("0."+t),o++):f=new g(n+"."+t.slice(1))}else return c=_r(g,l+2,A).times(o+""),f=Ut(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?z(f,A,P,$=!0):f;for(m=f,u=s=f=Ae(f.minus(1),f.plus(1),l,1),d=z(f.times(f),l,1),i=3;;){if(s=z(s.times(d),l,1),c=u.plus(Ae(s,new g(i),l,1)),ve(c.d).slice(0,l)===ve(u.d).slice(0,l))if(u=u.times(2),o!==0&&(u=u.plus(_r(g,l+2,A).times(o+""))),u=Ae(u,new g(p),l,1),e==null)if(Fn(u.d,l-y,P,a))g.precision=l+=y,c=s=f=Ae(m.minus(1),m.plus(1),l,1),d=z(f.times(f),l,1),i=a=1;else return z(u,g.precision=A,P,$=!0);else return g.precision=A,u;u=c,i+=2}}function Ns(r){return String(r.s*r.s/0)}function Vi(r,e){var t,n,i;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(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%Q,t<0&&(n+=Q),n<i){for(n&&r.d.push(+e.slice(0,n)),i-=Q;n<i;)r.d.push(+e.slice(n,n+=Q));e=e.slice(n),n=Q-e.length}else n-=i;for(;n--;)e+="0";r.d.push(+e),$&&(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 dc(r,e){var t,n,i,o,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Cs.test(e))return Vi(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(ac.test(e))t=16,e=e.toLowerCase();else if(sc.test(e))t=2;else if(uc.test(e))t=8;else throw Error(Gt+e);for(o=e.search(/p/i),o>0?(u=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),o=e.indexOf("."),s=o>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,o=a-o,i=Ls(n,new n(t),o,o*2)),c=Or(e,t,bt),l=c.length-1,o=l;c[o]===0;--o)c.pop();return o<0?new n(r.s*0):(r.e=Er(c,l),r.d=c,$=!1,s&&(r=Ae(r,i,a*4)),u&&(r=r.times(Math.abs(u)<54?Oe(2,u):vn.pow(2,u))),$=!0,r)}function pc(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:wn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Fr(5,t)),e=wn(r,2,e,e);for(var i,o=new r(5),s=new r(16),a=new r(20);t--;)i=e.times(e),e=e.times(o.plus(i.times(s.times(i).minus(a))));return e}function wn(r,e,t,n,i){var o,s,a,u,c=1,l=r.precision,m=Math.ceil(l/Q);for($=!1,u=t.times(t),a=new r(n);;){if(s=Ae(a.times(u),new r(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=Ae(s.times(u),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(o=m;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,c++}return $=!0,s.d.length=m+1,s}function Fr(r,e){for(var t=r;--e;)t*=r;return t}function Ms(r,e){var t,n=e.s<0,i=yt(r,r.precision,1),o=i.times(.5);if(e=e.abs(),e.lte(o))return Lt=n?4:1,e;if(t=e.divToInt(i),t.isZero())Lt=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(o))return Lt=hs(t)?n?2:3:n?4:1,e;Lt=hs(t)?n?1:4:n?3:2}return e.minus(i).abs()}function Ei(r,e,t,n){var i,o,s,a,u,c,l,m,d,p=r.constructor,y=t!==void 0;if(y?(tt(t,1,Xt),n===void 0?n=p.rounding:tt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=Ns(r);else{for(l=ht(r),s=l.indexOf("."),y?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Or(ht(d),10,i),d.e=d.d.length),m=Or(l,10,i),o=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?o--:(r=new p(r),r.d=m,r.e=o,r=Ae(r,d,t,n,0,i),m=r.d,o=r.e,c=xs),s=m[t],a=i/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,c)for(;++m[--t]>i-1;)m[t]=0,t||(++o,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=Oi.charAt(m[s]);if(y){if(u>1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)l+="0";for(m=Or(l,i,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=Oi.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(o<0?"p":"p+")+o}else if(o<0){for(;++o;)l="0"+l;l="0."+l}else if(++o>u)for(o-=u;o--;)l+="0";else o<u&&(l=l.slice(0,o)+"."+l.slice(o))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function Ts(r,e){if(r.length>e)return r.length=e,!0}function fc(r){return new this(r).abs()}function yc(r){return new this(r).acos()}function bc(r){return new this(r).acosh()}function gc(r,e){return new this(r).plus(e)}function wc(r){return new this(r).asin()}function Ac(r){return new this(r).asinh()}function Pc(r){return new this(r).atan()}function kc(r){return new this(r).atanh()}function hc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,i=this.rounding,o=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=yt(this,o,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?yt(this,n,i):new this(0),t.s=r.s):!r.d||e.isZero()?(t=yt(this,o,1).times(.5),t.s=r.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(Ae(r,e,o,1)),e=yt(this,o,1),this.precision=n,this.rounding=i,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(Ae(r,e,o,1)),t}function Tc(r){return new this(r).cbrt()}function Ic(r){return z(r=new this(r),r.e+1,2)}function xc(r,e,t){return new this(r).clamp(e,t)}function Bc(r){if(!r||typeof r!="object")throw Error(Vr+"Object expected");var e,t,n,i=r.defaults===!0,o=["precision",1,Xt,"rounding",0,8,"toExpNeg",-gn,0,"toExpPos",0,gn,"maxE",0,gn,"minE",-gn,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],i&&(this[t]=Ni[t]),(n=r[t])!==void 0)if(Ge(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(Gt+t+": "+n);if(t="crypto",i&&(this[t]=Ni[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(Ss);else this[t]=!1;else throw Error(Gt+t+": "+n);return this}function Sc(r){return new this(r).cos()}function Kc(r){return new this(r).cosh()}function _s(r){var e,t,n;function i(o){var s,a,u,c=this;if(!(c instanceof i))return new i(o);if(c.constructor=i,Is(o)){c.s=o.s,$?!o.d||o.e>i.maxE?(c.e=NaN,c.d=null):o.e<i.minE?(c.e=0,c.d=[0]):(c.e=o.e,c.d=o.d.slice()):(c.e=o.e,c.d=o.d?o.d.slice():o.d);return}if(u=typeof o,u==="number"){if(o===0){c.s=1/o<0?-1:1,c.e=0,c.d=[0];return}if(o<0?(o=-o,c.s=-1):c.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;$?s>i.maxE?(c.e=NaN,c.d=null):s<i.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[o]):(c.e=s,c.d=[o]);return}else if(o*0!==0){o||(c.s=NaN),c.e=NaN,c.d=null;return}return Vi(c,o.toString())}else if(u!=="string")throw Error(Gt+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),c.s=-1):(a===43&&(o=o.slice(1)),c.s=1),Cs.test(o)?Vi(c,o):dc(c,o)}if(i.prototype=O,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Bc,i.clone=_s,i.isDecimal=Is,i.abs=fc,i.acos=yc,i.acosh=bc,i.add=gc,i.asin=wc,i.asinh=Ac,i.atan=Pc,i.atanh=kc,i.atan2=hc,i.cbrt=Tc,i.ceil=Ic,i.clamp=xc,i.cos=Sc,i.cosh=Kc,i.div=Cc,i.exp=Rc,i.floor=Lc,i.hypot=Oc,i.ln=Nc,i.log=Mc,i.log10=Vc,i.log2=_c,i.max=Ec,i.min=Fc,i.mod=vc,i.mul=Wc,i.pow=Dc,i.random=qc,i.round=Uc,i.sign=Gc,i.sin=Xc,i.sinh=zc,i.sqrt=Yc,i.sub=Hc,i.sum=Qc,i.tan=jc,i.tanh=Zc,i.trunc=Jc,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 i.config(r),i}function Cc(r,e){return new this(r).div(e)}function Rc(r){return new this(r).exp()}function Lc(r){return z(r=new this(r),r.e+1,3)}function Oc(){var r,e,t=new this(0);for($=!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 $=!0,new this(1/0);t=e}return $=!0,t.sqrt()}function Is(r){return r instanceof vn||r&&r.toStringTag===Ks||!1}function Nc(r){return new this(r).ln()}function Mc(r,e){return new this(r).log(e)}function _c(r){return new this(r).log(2)}function Vc(r){return new this(r).log(10)}function Ec(){return Os(this,arguments,"lt")}function Fc(){return Os(this,arguments,"gt")}function vc(r,e){return new this(r).mod(e)}function Wc(r,e){return new this(r).mul(e)}function Dc(r,e){return new this(r).pow(e)}function qc(r){var e,t,n,i,o=0,s=new this(1),a=[];if(r===void 0?r=this.precision:tt(r,1,Xt),n=Math.ceil(r/Q),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));o<n;)i=e[o],i>=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);o<n;)i=e[o]+(e[o+1]<<8)+(e[o+2]<<16)+((e[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(Ss);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],r%=Q,n&&r&&(i=Oe(10,Q-r),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=Q)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<Q&&(t-=Q-n)}return s.e=t,s.d=a,s}function Uc(r){return z(r=new this(r),r.e+1,this.rounding)}function Gc(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Xc(r){return new this(r).sin()}function zc(r){return new this(r).sinh()}function Yc(r){return new this(r).sqrt()}function Hc(r,e){return new this(r).sub(e)}function Qc(){var r=0,e=arguments,t=new this(e[r]);for($=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return $=!0,z(t,this.precision,this.rounding)}function jc(r){return new this(r).tan()}function Zc(r){return new this(r).tanh()}function Jc(r){return z(r=new this(r),r.e+1,1)}O[Symbol.for("nodejs.util.inspect.custom")]=O.toString;O[Symbol.toStringTag]="Decimal";var vn=O.constructor=_s(Ni);Nr=new vn(Nr);Mr=new vn(Mr);var E=vn;import{PublicKey as qi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as $c}from"@solana/spl-token";import{PublicKey as xe,SystemProgram as Vs,SYSVAR_RENT_PUBKEY as el}from"@solana/web3.js";function k({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var Fi=[k({pubkey:$c,isWritable:!1}),k({pubkey:Vs.programId,isWritable:!1}),k({pubkey:el,isWritable:!1})];function vi({publicKey:r,transformSol:e}){let t=Wi(r.toString());if(t instanceof xe)return e&&t.equals(Ne)?ne:t;if(e&&t.toString()===Ne.toBase58())return ne;if(typeof t=="string"){if(t===xe.default.toBase58())return xe.default;try{return new xe(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Wi(r){try{return new xe(r)}catch{return r}}var An=new xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Es=new xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),nt=new xe("SysvarRent111111111111111111111111111111111"),Di=new xe("SysvarC1ock11111111111111111111111111111111"),Pn=new xe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),vr=new xe("Sysvar1nstructions1111111111111111111111111"),Wr=Vs.programId,nf=new xe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),rf=new xe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),of=new xe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),sf=new xe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),af=new xe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),uf=new xe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),cf=new xe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),lf=new xe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),mf=new xe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),df=new xe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),pf=new xe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),ne=new xe("So11111111111111111111111111111111111111112"),Ne=xe.default;function kn(r){return vi({publicKey:r,transformSol:!0})}import{PublicKey as tl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fs}from"@solana/spl-token";var Tt={chainId:101,address:tl.default.toBase58(),programId:Fs.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Me={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Fs.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 Ui=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:o=!1,isToken2022:s=!1}){if(e===Ne.toBase58()||e instanceof qi&&Ne.equals(e)){this.decimals=Me.decimals,this.symbol=Me.symbol,this.name=Me.name,this.mint=new qi(Me.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=o?qi.default:vi({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},pe=Ui;pe.WSOL=new Ui(D(N({},Me),{mint:Me.address}));import qr from"big.js";import il from"bn.js";import ol from"decimal.js-light";import nl from"toformat";var rl=nl,Wn=rl;var Dr=ae("module/fraction"),Gi=Wn(qr),Dn=Wn(ol),sl={[0]:Dn.ROUND_DOWN,[1]:Dn.ROUND_HALF_UP,[2]:Dn.ROUND_UP},al={[0]:qr.roundDown,[1]:qr.roundHalfUp,[2]:qr.roundUp},ee=class{constructor(e,t=new il(1)){this.numerator=G(e),this.denominator=G(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new ee(this.denominator,this.numerator)}add(e){let t=e instanceof ee?e:new ee(G(e));return this.denominator.eq(t.denominator)?new ee(this.numerator.add(t.numerator),this.denominator):new ee(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof ee?e:new ee(G(e));return this.denominator.eq(t.denominator)?new ee(this.numerator.sub(t.numerator),this.denominator):new ee(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof ee?e:new ee(G(e));return new ee(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof ee?e:new ee(G(e));return new ee(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Dr.logWithError(`${e} is not an integer.`),e<=0&&Dr.logWithError(`${e} is not positive.`),Dn.set({precision:e+1,rounding:sl[n]});let i=new Dn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Dr.logWithError(`${e} is not an integer.`),e<0&&Dr.logWithError(`${e} is negative.`),Gi.DP=e,Gi.RM=al[n]||1,new Gi(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var ul=ae("Raydium_price"),Xe=class extends ee{constructor(t){let{baseToken:n,quoteToken:i,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=i,this.scalar=new ee(zi(n.decimals),zi(i.decimals))}get raw(){return new ee(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Xe({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&ul.logWithError("mul token not equals");let n=super.mul(t);return new Xe({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};var Yi=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},qn=Yi;qn.SOL=new Yi(Tt);function qf(r,e){return r instanceof pe&&e instanceof pe?r.equals(e):r instanceof pe||e instanceof pe?!1:r===e}import cl from"bn.js";var vs=new ee(new cl(100)),_e=class extends ee{toSignificant(e=5,t,n){return this.mul(vs).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(vs).toFixed(e,t,n)}};function Ce(r){if(r instanceof _e)return new ee(r.numerator,r.denominator);if(r instanceof Xe)return r.adjusted;if(r instanceof Te)try{return Ce(r.toExact())}catch{return new ee(Ke)}if(r instanceof ee)return r;let e=String(r),t=tn(e);return new ee(t.numerator,t.denominator)}function jf(r){var n;if(r instanceof _e)return{fr:new ee(r.numerator,r.denominator)};if(r instanceof Xe)return{fr:r.adjusted};if(r instanceof Te)return{fr:Ce(r.toExact()),decimals:r.token.decimals};if(r instanceof ee)return{fr:r};let e=String(r),t=tn(e);return{fr:new ee(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function Zf(r,e){if(r==null||e==null)return!1;let t=Ce(r),n=Ce(e);return t.sub(n).numerator,t.sub(n).numerator.lt(Ke)}function ll(r,e){if(r==null||e==null)return!1;let t=Ce(r),n=Ce(e);return t.sub(n).numerator.gt(Ke)}function Jf(r,e){if(r==null||e==null)return!1;let t=Ce(r),n=Ce(e);return t.sub(n).numerator.lte(Ke)}function $f(r,e){if(r==null||e==null)return!1;let t=Ce(r),n=Ce(e);return t.sub(n).numerator.gte(Ke)}function ml(r,e){if(r==null||e==null)return!1;let t=Ce(r),n=Ce(e);return t.sub(n).numerator.eq(Ke)}function ey(r,e){if(r==null||e==null)return;let t=Ce(r),n=Ce(e);try{return t.div(n)}catch{return t}}function ty(r,e){if(r==null||e==null)return;let t=Ce(r),n=Ce(e);return t.sub(n)}function ny(r){return r==null?!1:!ml(r,0)}function ry(r,e){return ll(e,r)?e:r}function Hi(r,e){if(r==null||e==null)return;let t=Ce(r),n=Ce(e);return t.mul(n)}function iy(r,e){if(r==null||e==null)return;let t=Ce(r),n=Ce(e);return t.add(n)}var Xi=(n=>(n[n.ROUND_DOWN=0]="ROUND_DOWN",n[n.ROUND_HALF_UP=1]="ROUND_HALF_UP",n[n.ROUND_UP=2]="ROUND_UP",n))(Xi||{}),Ke=new he(0),Us=new he(1),gy=new he(2),wy=new he(3),Ay=new he(5),nn=new he(10),Py=new he(100),ky=new he(1e3),hy=new he(1e4),Ws=9007199254740991;function G(r){let e=ae("Raydium_parseBigNumberish");if(r instanceof he)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new he(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Ws||r<=-Ws)&&e.logWithError(`BigNumberish number overflow: ${r}`),new he(String(r))):typeof r=="bigint"?new he(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new he(0))}function zi(r){return nn.pow(G(r))}function tn(r){var a;if(r===void 0)return{denominator:"1",numerator:"0"};if(r instanceof he)return{numerator:r.toString(),denominator:"1"};if(r instanceof ee)return{denominator:r.denominator.toString(),numerator:r.numerator.toString()};let e=String(r),[,t="",n="",i=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],o="1"+"0".repeat(i.length),s=t+(n==="0"?"":n)+i||"0";return{denominator:o,numerator:s,sign:t,int:n,dec:i}}function Ur(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function dl(r){var n;let[,e="",t=""]=(n=r.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function pl(r,e=0){return r instanceof he?r:new he(dl(Gs(r).mul(nn.pow(new he(String(e))))))}function Gs(r){if(r instanceof _e)return new ee(r.numerator,r.denominator);if(r instanceof Xe)return r.adjusted;if(r instanceof Te)try{return Gs(r.toExact())}catch{return new ee(Ke)}if(r instanceof ee)return r;let e=String(r),t=tn(e);return new ee(t.numerator,t.denominator)}function Ty(r,e){let{numerator:t,denominator:n}=tn(r);return new _e(new he(t),new he(n).mul(e!=null&&e.alreadyDecimaled?new he(100):new he(1)))}function Iy(r){let{token:e,numberPrice:t,decimalDone:n}=r,i=new pe({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:o,denominator:s}=tn(t),a=n?new he(o).mul(nn.pow(new he(e.decimals))):o,u=new he(s).mul(nn.pow(new he(i.decimals)));return new Xe({baseToken:i,denominator:u.toString(),quoteToken:new pe(D(N({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function Ds(r){let e=new qn({decimals:6,symbol:"usd",name:"usd"}),t=pl(Hi(r,10**e.decimals));return new rn(e,t)}function xy(r,e){return Ds(!e||!r?0:Hi(r,e))}function fl(r){if(r==null)return;let{numerator:e,denominator:t}=tn(r.toString());return new ee(e,t)}function yl(r){return r instanceof E}function qs(r){return yl(r)?fl(r):Array.isArray(r)?r.map(e=>qs(e)):Qi(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,qs(t)])):r}var gl=ae("Raydium_amount"),Gr=Wn(bl);function Xs(r,e){let t="0",n="0";if(r.includes(".")){let i=r.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):gl.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var Te=class extends ee{constructor(t,n,i=!0,o){let s=new zt(0),a=nn.pow(new zt(t.decimals));if(i)s=G(n);else{let u=new zt(0),c=new zt(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Xs(n.toString(),t.decimals);u=G(l),c=G(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=ae(o||"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 Te(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Te(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Gr.DP=this.token.decimals,new Gr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},rn=class extends ee{constructor(t,n,i=!0,o){let s=new zt(0),a=nn.pow(new zt(t.decimals));if(i)s=G(n);else{let u=new zt(0),c=new zt(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Xs(n.toString(),t.decimals);u=G(l),c=G(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=ae(o||"TokenAmount"),this.currency=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.currency.equals(t.currency)||this.logger.logWithError("gt currency not equals"),this.raw.gt(t.raw)}lt(t){return this.currency.equals(t.currency)||this.logger.logWithError("lt currency not equals"),this.raw.lt(t.raw)}add(t){return this.currency.equals(t.currency)||this.logger.logWithError("add currency not equals"),new rn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new rn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.currency.decimals,n,i=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Gr.DP=this.currency.decimals,new Gr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};async function zs(r){new Promise(e=>setTimeout(e,r))}function Qy(){return new Date().getTime()}function Qi(r){return typeof r=="object"&&r!==null&&![pe,Te,wl,ee,Al,Xe,_e].some(e=>typeof e=="object"&&r instanceof e)}function ye(r){return typeof r=="string"?Wi(r):Array.isArray(r)?r.map(e=>ye(e)):Qi(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,ye(t)])):r}import{PublicKey as Xn,sendAndConfirmTransaction as zn,Transaction as Yn,TransactionMessage as Hn,VersionedTransaction as Qn}from"@solana/web3.js";import Kl from"axios";var hn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(hn||{}),V={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 Hs,ComputeBudgetProgram as Ys,Transaction as zr,TransactionMessage as Pl,Keypair as Qs,VersionedTransaction as js}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as kl}from"@solana/spl-token";var Ot=ae("Raydium_txUtil"),Zs=1644;function Yr(r){let e=[],t=[];return r.microLamports&&(e.push(Ys.setComputeUnitPrice({microLamports:r.microLamports})),t.push(V.SetComputeUnitPrice)),r.units&&(e.push(Ys.setComputeUnitLimit({units:r.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Tn(r){var e,t;try{return((t=await((e=r.getLatestBlockhash)==null?void 0:e.call(r)))==null?void 0:t.blockhash)||(await r.getRecentBlockhash()).blockhash}catch{return(await r.getRecentBlockhash()).blockhash}}function Hr(r,e){r.length<1&&Ot.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Ot.logWithError(`no signers provided:, ${e.toString()}`);let t=new zr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Zs}catch{return!1}}async function Js(r,e,t,n=!0){let i=new Hs("RaydiumSimuLateTransaction11111111111111111"),o=[],s=new zr;s.feePayer=i;for(let c of e)Hr([...s.instructions,c],[i])||(o.push(s),s=new zr,s.feePayer=i),s.add(c);s.instructions.length>0&&o.push(s);let a=[];try{if(a=await hl(r,o,n),a.find(c=>c.err!==null))throw Error("rpc simulateTransaction error")}catch(c){c instanceof Error&&Ot.logWithError("failed to simulate for instructions","RPC_ERROR",{message:c.message})}let u=[];for(let c of a)if(Ot.debug("simulate result:",c),c.logs){let l=c.logs.filter(m=>m&&m.includes(t));Ot.debug("filteredLog:",u),l.length||Ot.logWithError("simulate log not match keyword","keyword",t),u.push(...l)}return u}function $s(r,e){let t=r.match(/{["\w:,]+}/g);return!t||t.length!==1?Ot.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Nt(r,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(r);return!n||n.length!==2?Ot.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function se(r,e){let[t,n]=Hs.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}async function hl(r,e,t){let n=[];if(t){let i=await r.getLatestBlockhash(),o=[];for(let c of e){c.recentBlockhash=i.blockhash,c.lastValidBlockHeight=i.lastValidBlockHeight;let m=c._compile().serialize(),p=c._serialize(m).toString("base64");o.push(p)}let s=o.map(c=>{let l=r._buildArgs([c],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],u=20;for(let c=0;c<Math.ceil(s.length/u);c++)a.push(s.slice(c*u,(c+1)*u));n=await(await Promise.all(a.map(async c=>(await r._rpcBatchRequest(c)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async i=>await(await r.simulateTransaction(i)).value))}catch(i){i instanceof Error&&Ot.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:i.message})}return n}function Un({instructions:r,payer:e,signers:t}){return Hr(r,[e,...t])}function Gn({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Qs.generate().publicKey.toString()}){let o=new Pl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new js(o).serialize()).toString("base64").length<Zs}catch{return!1}}var Xr={time:0,data:void 0};async function sb(r){if(!Xr.data||(Date.now()-Xr.time)/1e3>30){let e=await r.getEpochInfo();return Xr={time:Date.now(),data:e},e}else return Xr.data}var Tl=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r);function on(r){let e=[];return r.forEach(t=>{t instanceof zr&&(t.recentBlockhash||(t.recentBlockhash=kl.toBase58()),t.feePayer||(t.feePayer=Qs.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof js&&(n=Tl(n));let i=n.toString("base64");e.push(i)}),console.log("simulate tx string:",e),e}import{PublicKey as ea,AddressLookupTableAccount as Qr}from"@solana/web3.js";import{PublicKey as Il}from"@solana/web3.js";import{getTransferFeeConfig as xl,unpackMint as Bl}from"@solana/spl-token";var ji=ae("Raydium_accountInfo_util");async function It(r,e,t){let{batchRequest:n,commitment:i="confirmed"}=N({batchRequest:!1},t),o=Zi(e,100),s=new Array(o.length).fill([]);if(n){let a=o.map(l=>{let m=r._buildArgs([l.map(d=>d.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:m}}),u=Zi(a,10);s=(await(await Promise.all(u.map(async l=>await r._rpcBatchRequest(l)))).flat()).map(l=>(l.error&&ji.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${l.error.message}`),l.result.value.map(m=>{if(m){let{data:d,executable:p,lamports:y,owner:f,rentEpoch:b}=m;return d.length!==2&&d[1]!=="base64"&&ji.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(d[0],"base64"),executable:p,lamports:y,owner:new Il(f),rentEpoch:b}}return null})))}else try{s=await Promise.all(o.map(a=>r.getMultipleAccountsInfo(a,i)))}catch(a){a instanceof Error&&ji.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${a.message}`)}return s.flat()}async function In(r,e,t){let n=await It(r,e.map(i=>i.pubkey),t);return e.map((i,o)=>D(N({},i),{accountInfo:n[o]}))}var Sl=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(Sl||{}),yb=1;async function bb({connection:r,mints:e}){var i,o;if(e.length===0)return{};let t=await In(r,e.map(s=>({pubkey:s}))),n={};for(let s of t){let a=Bl(s.pubkey,s.accountInfo,(i=s.accountInfo)==null?void 0:i.owner);n[s.pubkey.toString()]=D(N({},a),{feeConfig:(o=xl(a))!=null?o:void 0})}return n}async function Ji({connection:r,address:e}){let t=await It(r,[...new Set(e.map(i=>i.toString()))].map(i=>new ea(i))),n={};for(let i=0;i<e.length;i++){let o=t[i],s=e[i];if(!o)continue;let a=new Qr({key:s,state:Qr.deserialize(o.data)});n[s.toString()]=a,jr[s.toString()]=a}return n}var jr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new Qr({key:new ea("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:Qr.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 Zr=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}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 Kl.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}=Yr(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:i=[],endInstructionTypes:o=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...o),this.lookupTableAddress.push(...s.filter(a=>a!==Xn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(N({},t||{})):this.build(t)}build(e){let t=new Yn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async n=>{var a;let{recentBlockHash:i,skipPreflight:o=!0}=n||{},s=i!=null?i:await Tn(this.connection);if(t.recentBlockhash=s,this.signers.length&&t.sign(...this.signers),on([t]),(a=this.owner)!=null&&a.isKeyPair)return{txId:await zn(this.connection,t,this.signers.find(u=>u.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:o}),signedTx:t};if(this.signAllTransactions){let u=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(u[0].serialize(),{skipPreflight:o}),signedTx:u[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),o=t.filter(c=>c.transaction.instructions.length>0),s=[i,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async c=>{var f;let{sequentially:l,onTxUpdate:m,recentBlockHash:d,skipPreflight:p=!0}=c||{},y=d!=null?d:await Tn(this.connection);if((f=this.owner)!=null&&f.isKeyPair){if(l){let b=[];for(let g of s){let P=await zn(this.connection,g,this.signers.find(A=>A.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:p});b.push(P)}return{txIds:b,signedTxs:s}}return{txIds:await await Promise.all(s.map(async(b,g)=>(b.recentBlockhash=y,await zn(this.connection,b,a[g].find(P=>P.publicKey.equals(this.owner.publicKey))?a[g]:[...a[g],this.owner.signer],{skipPreflight:p})))),signedTxs:s}}if(this.signAllTransactions){let b=s.map((P,A)=>(P.recentBlockhash=y,a[A].length&&P.sign(...a[A]),P));on(b);let g=await this.signAllTransactions(b);if(l){let P=0,A=[],T=async()=>{if(!g[P])return;let h=await this.connection.sendRawTransaction(g[P].serialize(),{skipPreflight:p});A.push({txId:h,status:"sent",signedTx:g[P]}),m==null||m([...A]),P++,this.connection.onSignature(h,I=>{let B=A.findIndex(x=>x.txId===h);B>-1&&(A[B].status=I.err?"error":"success"),m==null||m([...A]),I.err||T()},"processed"),this.connection.getSignatureStatus(h)};return await T(),{txIds:A.map(h=>h.txId),signedTxs:g}}else{let P=[];for(let A=0;A<g.length;A+=1){let T=await this.connection.sendRawTransaction(g[A].serialize(),{skipPreflight:p});P.push(T)}return{txIds:P,signedTxs:g}}}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){let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i}=d,o=Ie(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=N(N({},this.cluster==="devnet"?{}:jr),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let p of a)s[p]===void 0&&u.push(new Xn(p));let c=await Ji({connection:this.connection,address:u});for(let[p,y]of Object.entries(c))s[p]=y;let l=new Hn({payerKey:this.feePayer,recentBlockhash:i?Xn.default.toBase58():await Tn(this.connection),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s)),m=new Qn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async p=>{var b;let{recentBlockHash:y,skipPreflight:f=!0}=p||{};if(y&&(m.message.recentBlockhash=y),on([m]),(b=this.owner)!=null&&b.isKeyPair){this.signers.find(T=>T.publicKey.equals(this.owner.publicKey))||m.sign([this.owner.signer]);let g=await this.connection.sendTransaction(m,{skipPreflight:f}),{lastValidBlockHeight:P,blockhash:A}=await this.connection.getLatestBlockhash();return await this.connection.confirmTransaction({blockhash:A,lastValidBlockHeight:P,signature:g},"confirmed"),{txId:g,signedTx:m}}if(this.signAllTransactions){let g=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(g[0],{skipPreflight:f}),signedTx:g[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async buildV0MultiTx(e){let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),o=t.filter(c=>c.builder.instructions.length>0),s=[i,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return s.forEach(async(c,l)=>{c.sign(a[l])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async c=>{var y;let{sequentially:l,onTxUpdate:m,recentBlockHash:d,skipPreflight:p=!0}=c||{};if(d&&s.forEach(f=>f.message.recentBlockhash=d),on(s),(y=this.owner)!=null&&y.isKeyPair){let{lastValidBlockHeight:f,blockhash:b}=await this.connection.getLatestBlockhash();if(s.forEach((g,P)=>{a[P].find(A=>A.publicKey.equals(this.owner.publicKey))||g.sign([this.owner.signer])}),l){let g=[];for(let P of s){let A=await this.connection.sendTransaction(P,{skipPreflight:p}),{lastValidBlockHeight:T,blockhash:h}=await this.connection.getLatestBlockhash();await this.connection.confirmTransaction({blockhash:h,lastValidBlockHeight:T,signature:A},"confirmed"),g.push(A)}return{txIds:g,signedTxs:s}}return{txIds:await Promise.all(s.map(async g=>{let P=await this.connection.sendTransaction(g,{skipPreflight:p});return await this.connection.confirmTransaction({blockhash:b,lastValidBlockHeight:f,signature:P},"confirmed"),P})),signedTxs:s}}if(this.signAllTransactions){let f=await this.signAllTransactions(s);if(l){let b=0,g=[],P=async()=>{if(!f[b])return;let A=await this.connection.sendTransaction(f[b],{skipPreflight:p});g.push({txId:A,status:"sent",signedTx:f[b]}),m==null||m([...g]),b++,this.connection.onSignature(A,T=>{let h=g.findIndex(I=>I.txId===A);h>-1&&(g[h].status=T.err?"error":"success"),m==null||m([...g]),T.err||P()},"processed"),this.connection.getSignatureStatus(A)};return P(),{txIds:[],signedTxs:f}}else{let b=[];for(let g=0;g<f.length;g+=1){let P=await this.connection.sendTransaction(f[g],{skipPreflight:p});b.push(P)}return{txIds:b,signedTxs:f}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){let c=e||{},{computeBudgetConfig:t}=c,n=Ie(c,["computeBudgetConfig"]),i=t?Yr(t):{instructions:[],instructionTypes:[]},o=this.signers.reduce((l,m)=>D(N({},l),{[m.publicKey.toBase58()]:m}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(l=>{let m=[...u,l],d=t?[...i.instructions,...m]:m,y=[...new Set(m.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>new Xn(f));if(u.length<12&&Un({instructions:d,payer:this.feePayer,signers:y})||Un({instructions:m,payer:this.feePayer,signers:y}))u.push(l);else{if(u.length===0)throw Error("item ins too big");Un({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:y})?s.push(new Yn().add(...i.instructions,...u)):s.push(new Yn().add(...u)),a.push(Array.from(new Set(u.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat())).map(f=>o[f]).filter(f=>f!==void 0)),u=[l]}}),u.length>0){let m=[...new Set(u.map(d=>d.keys.filter(p=>p.isSigner).map(p=>p.pubkey.toString())).flat()).values()].map(d=>o[d]).filter(d=>d!==void 0);Un({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:m.map(d=>d.publicKey)})?s.push(new Yn().add(...i.instructions,...u)):s.push(new Yn().add(...u)),a.push(m)}return s.forEach(l=>l.feePayer=this.feePayer),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Tn(this.connection);if(s.forEach(async(g,P)=>{g.recentBlockhash=f,a[P].length&&g.sign(...a[P])}),on(s),(b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let P of s){let A=await zn(this.connection,P,this.signers.find(T=>T.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 Promise.all(s.map(async(g,P)=>await zn(this.connection,g,a[P].find(A=>A.publicKey.equals(this.owner.publicKey))?a[P]:[...a[P],this.owner.signer],{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let g=await this.signAllTransactions(s);if(m){let P=0,A=[],T=async()=>{if(!g[P])return;let h=await this.connection.sendRawTransaction(g[P].serialize(),{skipPreflight:y});A.push({txId:h,status:"sent",signedTx:g[P]}),d==null||d([...A]),P++,this.connection.onSignature(h,I=>{let B=A.findIndex(x=>x.txId===h);B>-1&&(A[B].status=I.err?"error":"success"),d==null||d([...A]),I.err||T()},"processed"),this.connection.getSignatureStatus(h)};return await T(),{txIds:A.map(h=>h.txId),signedTxs:g}}else{let P=[];for(let A=0;A<g.length;A+=1){let T=await this.connection.sendRawTransaction(g[A].serialize(),{skipPreflight:y});P.push(T)}return{txIds:P,signedTxs:g}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:i=[]}=b,o=Ie(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=N(N({},this.cluster==="devnet"?{}:jr),n),a=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let g of a)s[g]===void 0&&u.push(new Xn(g));let c=await Ji({connection:this.connection,address:u});for(let[g,P]of Object.entries(c))s[g]=P;let l=t?Yr(t):{instructions:[],instructionTypes:[]},m=await Tn(this.connection),d=this.signers.reduce((g,P)=>D(N({},g),{[P.publicKey.toBase58()]:P}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(g=>{let P=[...f,g],A=t?[...l.instructions,...P]:P;if(f.length<12&&Gn({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s})||Gn({instructions:P,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(g);else{if(f.length===0)throw Error("item ins too big");let T={};for(let h of[...new Set(a)])s[h]!==void 0&&(T[h]=s[h]);if(t&&Gn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let h=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Qn(h))}else{let h=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Qn(h))}y.push(Array.from(new Set(f.map(h=>h.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat())).map(h=>d[h]).filter(h=>h!==void 0)),f=[g]}}),f.length>0){let P=[...new Set(f.map(A=>A.keys.filter(T=>T.isSigner).map(T=>T.pubkey.toString())).flat()).values()].map(A=>d[A]).filter(A=>A!==void 0);if(t&&Gn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let A=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Qn(A))}else{let A=new Hn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Qn(A))}y.push(P)}return{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async g=>{var I;let{sequentially:P,onTxUpdate:A,recentBlockHash:T,skipPreflight:h=!0}=g||{};if(p.map(async(B,x)=>{y[x].length&&B.sign(y[x]),T&&(B.message.recentBlockhash=T)}),on(p),(I=this.owner)!=null&&I.isKeyPair){let{lastValidBlockHeight:B,blockhash:x}=await this.connection.getLatestBlockhash();if(p.forEach((K,M)=>{y[M].find(F=>F.publicKey.equals(this.owner.publicKey))||K.sign([this.owner.signer])}),P){let K=[];for(let M of p){let F=await this.connection.sendTransaction(M,{skipPreflight:h}),{lastValidBlockHeight:H,blockhash:v}=await this.connection.getLatestBlockhash();await this.connection.confirmTransaction({blockhash:v,lastValidBlockHeight:H,signature:F},"confirmed"),K.push(F)}return{txIds:K,signedTxs:p}}return{txIds:await Promise.all(p.map(async K=>{let M=await this.connection.sendTransaction(K,{skipPreflight:h});return await this.connection.confirmTransaction({blockhash:x,lastValidBlockHeight:B,signature:M},"confirmed"),M})),signedTxs:p}}if(this.signAllTransactions){let B=await this.signAllTransactions(p);if(P){let x=0,K=[],M=async()=>{if(!B[x])return;let F=await this.connection.sendTransaction(B[x],{skipPreflight:h});K.push({txId:F,status:"sent",signedTx:B[x]}),A==null||A([...K]),x++,this.connection.onSignature(F,H=>{let v=K.findIndex(j=>j.txId===F);v>-1&&(K[v].status=H.err?"error":"success"),A==null||A([...K]),H.err||M()},"processed"),this.connection.getSignatureStatus(F)};return M(),{txIds:[],signedTxs:B}}else{let x=[];for(let K=0;K<B.length;K+=1){let M=await this.connection.sendTransaction(B[K],{skipPreflight:h});x.push(M)}return{txIds:x,signedTxs:B}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}};var gt=class{constructor(e){this._owner=e}get publicKey(){return gt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return gt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return gt.isKeyPair(this._owner)}get isPublicKey(){return gt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!gt.isKeyPair(e)}};function Zi(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function Nb(r,...e){return r.filter(t=>e.every(n=>n.includes(t)))}function Mb(r,...e){return r.filter(t=>e.every(n=>!n.includes(t)))}function _b(r){return[...new Set(r)]}var ta=r=>typeof r=="number",na=r=>r?new Date(r):new Date,Cl=r=>na(r).getTime();function ra(r,e,t){let n=ta(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()<=n}function ia(r,e,t){let n=ta(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()>n}function Eb(r,e){let n=Cl(r)+(e.days?e.days*24*60*60*1e3:0)+(e.hours?e.hours*60*60*1e3:0)+(e.minutes?e.minutes*60*1e3:0)+(e.seconds?e.seconds*1e3:0)+(e.milliseconds?e.milliseconds:0);return na(n)}import{PublicKey as me}from"@solana/web3.js";var $i=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),eo=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),xn=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Rl=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Ll=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Jr=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),to=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Ol=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Nl=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Ml=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Wb=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),_l=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Vl=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),El=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Fl=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),vl=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Wl=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Dl=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),ql=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Ul=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Gl=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),jn={IDO_PROGRAM_ID_V1:_l,IDO_PROGRAM_ID_V2:Vl,IDO_PROGRAM_ID_V3:El,IDO_PROGRAM_ID_V4:Fl},Db={AMM_V4:to,AMM_STABLE:Ol,CLMM_PROGRAM_ID:Nl,FARM_PROGRAM_ID_V3:$i,FARM_PROGRAM_ID_V5:eo,FARM_PROGRAM_ID_V6:xn,OPEN_BOOK_PROGRAM:Ll,SERUM_PROGRAM_ID_V3:Jr,UTIL1216:Rl,Router:Ml,CREATE_CPMM_POOL_PROGRAM:vl,CREATE_CPMM_POOL_AUTH:Wl,CREATE_CPMM_POOL_FEE_ACC:Dl},qb={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:ql,CREATE_CPMM_POOL_AUTH:Ul,CREATE_CPMM_POOL_FEE_ACC:Gl,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Xl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as zl}from"@solana/spl-token";function be(r,e,t){return se([r.toBuffer(),(t!=null?t:zl).toBuffer(),e.toBuffer()],new Xl("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Le from"bn.js";var xt=1e4;function Qb(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,o=new Le(i.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===xt){let a=new Le(i.maximumFee.toString());return{amount:r.add(a),fee:a,expirationTime:s}}else{let a=Yt(r.mul(new Le(xt)),new Le(xt-i.transferFeeBasisPoints)),u=new Le(i.maximumFee.toString()),c=a.sub(r).gt(u)?r.add(u):a,l=Yt(c.mul(new Le(i.transferFeeBasisPoints)),new Le(xt)),m=l.gt(o)?o:l;return{amount:c,fee:m,expirationTime:s}}else{let a=Yt(r.mul(new Le(i.transferFeeBasisPoints)),new Le(xt)),u=a.gt(o)?o:a;return{amount:r,fee:u,expirationTime:s}}}function Pe(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=D(N({},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}}),o=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new Le(o.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===xt){let u=new Le(o.maximumFee.toString());return{amount:r.add(u),fee:u,expirationTime:a}}else{let u=Yt(r.mul(new Le(xt)),new Le(xt-o.transferFeeBasisPoints)),c=new Le(o.maximumFee.toString()),l=u.sub(r).gt(c)?r.add(c):u,m=Yt(l.mul(new Le(o.transferFeeBasisPoints)),new Le(xt)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=Yt(r.mul(new Le(o.transferFeeBasisPoints)),new Le(xt)),c=u.gt(s)?s:u;return{amount:r,fee:c,expirationTime:a}}}function sn(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function Yt(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Le(0))?t.add(new Le(1)):t}var no=(t=>(t.ALL="all",t.Strict="strict",t))(no||{}),oa=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(oa||{});var We={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-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://token.jup.ag/{type}",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"},yg=N({},We);var sa="ray_tab_hash",ro="ray_req_hash",Yl=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(sa);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(sa,r)),r},$r=async n=>{var i=n,{logCount:r=1e3,removeLastLog:e}=i,t=Ie(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(ro)||"[]").slice(0,r-1);e&&o.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),o.unshift(D(N({},t),{time:Date.now(),session:Yl()}));try{localStorage.setItem(ro,JSON.stringify(o))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(o[0].data=a+(a.length>100?"...":"");!s;){o.pop();let u=JSON.stringify(t.data).substring(0,100);o[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(ro,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(u=>u())}return $r(D(N({},t),{logCount:r,removeLastLog:!0}))}};var Bn=ae("Raydium_Api"),io=new Map;async function _g(r,e,t=1e3){let n;for(;n==null;)try{Bn.debug(`Request ${r} through endlessRetry`),n=await e()}catch(i){Bn.error(`Request ${r} failed, retry after ${t} ms`,i),await zs(t)}return n}var ei=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=i||1e3,this.api=Hl.create({baseURL:this.urlConfigs.BASE_HOST||We.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return Bn.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(Bn.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:u,status:c}=s,{method:l,baseURL:m,url:d}=a;return n&&$r({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),Bn.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:d}=a;return n&&$r({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Bn.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||We.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||We.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await this.api.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,o)=>i+o,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||We.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||We.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||We.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("/",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||We.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||We.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:o=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||We.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${o}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||We.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>io.has(s)?(n.push(io.get(s)),!1):!0),o=[];return i.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||We.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),o.forEach(a=>{io.set(a.id,a)})),n.concat(o)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:o="default",order:s="desc",page:a=1}=e,[u,c]=[t&&kn(t).toBase58(),n&&n!=="undefined"?kn(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||We.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||We.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||We.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||We.CHECK_AVAILABILITY)).data}};import{merge as Dp}from"lodash";var ti="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",aa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as Ao,TOKEN_PROGRAM_ID as Zt,AccountLayout as Kn,TOKEN_2022_PROGRAM_ID as id}from"@solana/spl-token";import{PublicKey as ui,SystemProgram as od}from"@solana/web3.js";var oo=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Be=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ae(t)}createTxBuilder(e){return this.scope.checkOwner(),new Zr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(oo(e))}logInfo(...e){this.logger.info(oo(e))}logAndCreateError(...e){let t=oo(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Jm,createCloseAccountInstruction as $m,createTransferInstruction as ed,TOKEN_PROGRAM_ID as Sn}from"@solana/spl-token";import{PublicKey as td,SystemProgram as nd}from"@solana/web3.js";import rd from"bn.js";import{PublicKey as Ta,Keypair as Hm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Qm}from"@solana/spl-token";import jm from"bn.js";import{PublicKey as Wm}from"@solana/web3.js";import fa,{isBN as ya}from"bn.js";import{bits as Ql,BitStructure as jl,blob as Zl,Blob as Jl,cstr as $l,f32 as em,f32be as tm,f64 as nm,f64be as rm,greedy as im,Layout as om,ns64 as sm,ns64be as am,nu64 as um,nu64be as cm,offset as lm,s16 as mm,s16be as dm,s24 as pm,s24be as fm,s32 as ym,s32be as bm,s40 as gm,s40be as wm,s48 as Am,s48be as Pm,s8 as km,seq as hm,struct as Hg,Structure as Tm,u16 as Im,u16be as xm,u24 as Bm,u24be as Sm,u32 as Km,u32be as Cm,u40 as Rm,u40be as Lm,u48 as Om,u48be as Nm,u8 as Mm,UInt as _m,union as Vm,Union as Em,unionLayoutDiscriminator as Fm,utf8 as vm}from"@solana/buffer-layout";var Zn=om,ua=Tm,ca=Em,Qg=jl,so=_m,la=Jl,jg=im,ni=Mm,Bt=Im,Zg=Bm,Jn=Km,Jg=Rm,$g=Om,ma=um,ew=xm,tw=Sm,nw=Cm,rw=Lm,iw=Nm,ow=cm,sw=km,aw=mm,uw=pm,De=ym,cw=gm,lw=Am,mw=sm,dw=dm,pw=fm,fw=bm,yw=wm,bw=Pm,gw=am,ww=em,Aw=tm,Pw=nm,kw=rm;var da=hm,pa=Vm,hw=Fm,fe=Zl,Tw=$l,Iw=vm,ao=Ql,uo=lm;var an=class extends Zn{constructor(t,n,i){super(t,i);this.blob=fe(t),this.signed=n}decode(t,n=0){let i=new fa(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new fa(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},ri=class extends Zn{constructor(t){super(8,t);this._lower=ao(Jn(),!1),this._upper=ao(Jn(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),o=this._upper.decode(t,n+this._lower.span);return N(N({},i),o)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function _(r){return new so(1,r)}function ze(r){return new so(4,r)}function w(r){return new an(8,!1,r)}function Y(r){return new an(16,!1,r)}function ba(r){return new an(1,!0,r)}function ii(r){return new an(8,!0,r)}function ga(r){return new an(16,!0,r)}var Mt=class extends Zn{constructor(t,n,i,o){super(t.span,o);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function S(r){return new Mt(fe(32),e=>new Wm(e),e=>e.toBuffer(),r)}var co=class extends Zn{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=ni()}encode(t,n,i=0){return t==null?this.discriminator.encode(0,n,i):(this.discriminator.encode(1,n,i),this.layout.encode(t,n,i+1)+1)}decode(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return null;if(i===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return 1;if(i===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function Cw(r,e){return new co(r,e)}function qe(r){return new Mt(ni(),Dm,qm,r)}function Dm(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function qm(r){return r?1:0}function Rw(r,e){let t=Jn("length"),n=L([t,q(r,uo(t,-t.span),"values")]);return new Mt(n,({values:i})=>i,i=>({values:i}),e)}function Lw(r,e,t){let n=L([w("tag"),e.replicate("data")]);function i({tag:o,data:s}){if(!o.eq(r))throw new Error("Invalid tag, expected: "+r.toString("hex")+", got: "+o.toString("hex"));return s}return new Mt(n,i,o=>({tag:r,data:o}),t)}function Um(r){let e=Jn("length"),t=L([e,fe(uo(e,-e.span),"data")]);return new Mt(t,({data:n})=>n,n=>({data:n}),r)}function Ow(r){return new Mt(Um(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),r)}function Nw(r,e){let t=pa(ni(),e);return r.forEach((n,i)=>t.addVariant(i,n,n.property)),t}function Mw(r,e,t){let n=L([q(r,e,"values")]);return new Mt(n,({values:i})=>i,i=>({values:i}),t)}var lo=class extends ua{decode(e,t){return super.decode(e,t)}};function L(r,e,t){return new lo(r,e,t)}var mo=class extends ca{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(i=>i.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function _w(r,e,t){return new mo(r,e,t)}var po=class extends la{decode(e,t){let n=super.decode(e,t);if(!n.every(i=>i===0))throw new Error("nonzero padding bytes");return n}};function Vw(r){return new po(r)}function q(r,e,t){let n,i=typeof e=="number"?e:ya(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=ya(a)?a.toNumber():a,Reflect.set(o,"count",n)}return Reflect.get(o,s)},set(o,s,a){return s==="count"&&(n=a),Reflect.set(o,s,a)}});return da(r,i,t)}var Ht=L([S("mint"),S("owner"),w("amount"),ze("delegateOption"),S("delegate"),_("state"),ze("isNativeOption"),w("isNative"),w("delegatedAmount"),ze("closeAuthorityOption"),S("closeAuthority")]);function Gm(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function fo(r,...e){if(!Gm(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 yo(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 wa(r,e){fo(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var si=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),wt=(r,e)=>r<<32-e|r>>>e;var Uw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Xm(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function bo(r){return typeof r=="string"&&(r=Xm(r)),fo(r),r}var oi=class{clone(){return this._cloneInto()}},Gw={}.toString;function Aa(r){let e=n=>r().update(bo(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function zm(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),u=n?4:0,c=n?0:4;r.setUint32(e+u,s,n),r.setUint32(e+c,a,n)}var Pa=(r,e,t)=>r&e^~r&t,ka=(r,e,t)=>r&e^r&t^e&t,ai=class extends oi{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=si(this.buffer)}update(e){yo(this);let{view:t,buffer:n,blockLen:i}=this;e=bo(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let u=si(e);for(;i<=o-s;s+=i)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){yo(this),wa(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let m=s;m<i;m++)t[m]=0;zm(n,i-8,BigInt(this.length*8),o),this.process(n,0);let a=si(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let c=u/4,l=this.get();if(c>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<c;m++)a.setUint32(4*m,l[m],o)}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:i,finished:o,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=o,e.destroyed=s,i%t&&e.buffer.set(n),e}};var Ym=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]),Qt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),jt=new Uint32Array(64),go=class extends ai{constructor(){super(64,32,8,!1),this.A=Qt[0]|0,this.B=Qt[1]|0,this.C=Qt[2]|0,this.D=Qt[3]|0,this.E=Qt[4]|0,this.F=Qt[5]|0,this.G=Qt[6]|0,this.H=Qt[7]|0}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:u}=this;return[e,t,n,i,o,s,a,u]}set(e,t,n,i,o,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=u|0}process(e,t){for(let m=0;m<16;m++,t+=4)jt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=jt[m-15],p=jt[m-2],y=wt(d,7)^wt(d,18)^d>>>3,f=wt(p,17)^wt(p,19)^p>>>10;jt[m]=f+jt[m-7]+y+jt[m-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=wt(a,6)^wt(a,11)^wt(a,25),p=l+d+Pa(a,u,c)+Ym[m]+jt[m]|0,f=(wt(n,2)^wt(n,13)^wt(n,22))+ka(n,i,o)|0;l=c,c=u,u=a,a=s+p|0,s=o,o=i,i=n,n=p+f|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,u=u+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(n,i,o,s,a,u,c,l)}roundClean(){jt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ha=Aa(()=>new go);var aA=ae("Raydium_Util");function Ia({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:o,account:s}of t.value){let a=Ht.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:o,mint:u,amount:c,isAssociated:be(r,u,s.owner).publicKey.equals(o),isNative:!1,programId:s.owner}),i.push({pubkey:o,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Ta.default,amount:new jm(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function Ye({fromPublicKey:r,programId:e=Qm}){let t=Hm.generate().publicKey.toBase58().slice(0,32);return{publicKey:Zm(r,t,e),seed:t}}function Zm(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),i=ha(n);return new Ta(i)}function wo(r){let{mint:e,tokenAccount:t,owner:n,programId:i=Sn}=r;return Jm(t,e,n,i)}function _t(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:o=Sn}=r;return $m(e,t,i,n,o)}async function Vt(r){let{connection:e,amount:t,commitment:n,payer:i,owner:o,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Ht.span,n),u=G(t).add(new rd(a)),c=Ye({fromPublicKey:i,programId:Sn});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[nd.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:Ht.span,programId:Sn}),wo({mint:new td(Me.address),tokenAccount:c.publicKey,owner:o,programId:Sn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[_t({tokenAccount:c.publicKey,payer:i,owner:o})]}}function $n({source:r,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:o=Sn}){return ed(r,e,t,BigInt(String(n)),i,o)}var er=class extends Be{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._clientOwnedToken=!!(n||i)}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 be(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=N(N({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Zt},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:id},i.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=Ia({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,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:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=Zt,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let o=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of o){let{publicKey:u}=a;if(u&&(!i||i&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new ui(t.tokenProgram||Zt),m=this.getAssociatedTokenAccount(n,new ui(l)),d=(a?[]:this.tokenAccountRawInfos).filter(P=>P.accountInfo.mint.equals(n)&&(!o||P.pubkey.equals(m))).sort((P,A)=>P.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(i===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(o){let P=Ao(s,m,s,n,l);if(c){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(P),p.instructionTypes.push(V.CreateATA);else if(!(A.owner.equals(l)&&Kn.decode(A.data).mint.equals(n)&&Kn.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(P),p.instructionTypes.push(V.CreateATA);if(n.equals(ne)&&i.amount){let A=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(f=i.amount)!=null?f:0,skipCloseAccount:u});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),i.amount&&(p.instructions.push($n({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:Zt})),p.instructionTypes.push(V.TransferAmount))}return u||(p.endInstructions.push(_t({owner:s,payer:i.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:p}}else{let P=Ye({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(Kn.span),T=od.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:P.seed,newAccountPubkey:P.publicKey,lamports:A+Number((g=(b=i.amount)==null?void 0:b.toString())!=null?g:0),space:Kn.span,programId:l});return p.instructions.push(T,wo({mint:n,tokenAccount:P.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(V.CreateAccount),p.instructionTypes.push(V.InitAccount),u||(p.endInstructions.push(_t({owner:s,payer:i.payer||s,tokenAccount:P.publicKey,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:P.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=Zt,autoUnwrapWSOLToSOL:i}){var u;await this.fetchWalletTokenAccounts();let o=(u=this.scope.account.tokenAccounts.find(({mint:c})=>(c==null?void 0:c.toBase58())===t.toBase58()))==null?void 0:u.publicKey,s=this.scope.ownerPubKey,a={};if(!o){let c=this.getAssociatedTokenAccount(t,n),l=await Ao(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],o=c}return i&&ne.toBase58()===t.toBase58()&&(a.endInstructions=[_t({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:o,programId:s=Zt,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new ui(ne).equals(o)){let p=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:i,skipCloseAccount:l});return N({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=Ao(this.scope.ownerPubKey,d,this.scope.ownerPubKey,o,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(Zt)&&Kn.decode(f.data).mint.equals(o)&&Kn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${o.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=Zt,amount:o,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new ui(ne))&&s){let l=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=l,p=Ie(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=m,p=Ie(m,["tokenAccount"]);u=d,c.addInstruction(p)}return N({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as Bd}from"@solana/spl-token";import{PublicKey as ke,SystemProgram as Sd}from"@solana/web3.js";import{PublicKey as La}from"@solana/web3.js";var Po=L([_("instruction")]),ko=L([_("instruction")]),sd=L([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Y("accRewardPerShare"),S("rewardVault"),S("rewardMint"),S("rewardSender"),w("rewardType"),q(w(),15,"padding")]),ad=L([w("state"),w("nonce"),S("lpVault"),S("rewardVault"),S(),S(),w(),w(),w("totalReward"),Y("perShareReward"),w("lastSlot"),w("perSlotReward")]),ud=L([w("state"),w("nonce"),S("lpVault"),S("rewardVaultA"),w("totalRewardA"),Y("perShareRewardA"),w("perSlotRewardA"),_("option"),S("rewardVaultB"),fe(7),w("totalRewardB"),Y("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),S()]),cd=L([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Y("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),S("lpMint"),S("lpVault"),q(sd,5,"rewardInfos"),S("creator"),S(),q(w(),32,"padding")]),xa=new Proxy(ad,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(N({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(r,e,t)}}),Ba=new Proxy(ud,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(N({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(r,e,t)}}),tr=new Proxy(cd,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(N({},i),{version:6,rewardInfos:i.rewardInfos.map(o=>{var s;return D(N({},o),{rewardType:((s=Object.entries(Jt).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),ld=L([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),ho=L([_("instruction"),w("nonce"),q(ld,5,"rewardTimeInfo")]),To=L([_("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Io=L([_("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),vA=L([w("state"),S("id"),S("owner"),w("deposited"),q(w(),1,"rewardDebts")]),nr=L([w("state"),S("id"),S("owner"),w("deposited"),q(Y(),1,"rewardDebts"),w(""),w("voteLockedBalance"),q(w(),15)]),WA=L([w("state"),S("id"),S("owner"),w("deposited"),q(w(),2,"rewardDebts")]),Sa=L([w("state"),S("id"),S("owner"),w("deposited"),q(Y(),2,"rewardDebts"),q(w(),17)]),Ka=L([w(),w("state"),S("id"),S("owner"),w("deposited"),q(Y(),5,"rewardDebts"),q(w(),16)]),$e=L([_("instruction"),w("amount")]),md=L([S("mint"),S("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),ba("digitShift"),q(_(),7,"reserved1"),q(w(),7,"reserved2")]),Ca=L([fe(8),S("governanceProgramId"),S("realm"),S("realmGoverningTokenMint"),S("realmAuthority"),q(_(),32,"reserved1"),q(md,4,"votingMints"),ii("timeOffset"),_("bump"),q(_(),7,"reserved2"),q(w(),11,"reserved3")]),dd=L([ii("startTime"),ii("endTime"),_("kind"),q(_(),15,"reserved")]),pd=L([q(dd,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),_("votingMintConfigIdx"),q(_(),29,"reserved")]),Ra=L([fe(8),S("voterAuthority"),S("registrar"),q(pd,32,"deposits"),_("voterBump"),_("voterWweightRecordBump"),q(_(),94,"reserved")]);var HA=ae("Raydium_farm_config"),Oa=new La("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Na=new La("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Ma={3:xa,5:Ba,6:tr},_a={3:nr,5:Sa,6:Ka},xo=r=>[3,5,6].indexOf(r)!==-1,Bo=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,o={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=o[e])==null?void 0:s.call(o)},Jt={"Standard SPL":0,"Option tokens":1},At={[$i.toString()]:3,[eo.toString()]:5,[xn.toString()]:6};import{PublicKey as oe,SystemProgram as un,SYSVAR_RENT_PUBKEY as bd,SYSVAR_CLOCK_PUBKEY as or,TransactionInstruction as Ee}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as gd,TOKEN_PROGRAM_ID as st,ASSOCIATED_TOKEN_PROGRAM_ID as wd}from"@solana/spl-token";import li from"bn.js";function So(r,e,t){return se([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],r)}function Ko(r,e){return se([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],r)}function Co(r,e){return se([e.toBuffer()],r)}function Ro(r,e,t){return se([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],r)}function Lo(r,e,t){return se([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],r)}function Oo(r,e,t,n){return se([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}import rt from"bn.js";var rr=ae("Raydium.farm.util");function ir({programId:r,poolId:e,mint:t,type:n}){let{publicKey:i}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return i}function it({programId:r,poolId:e,owner:t,version:n}){let{publicKey:i}=se([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return i}var Va=({programId:r,poolId:e})=>se([e.toBuffer()],r);function Ea(r){return{isSet:new rt(1),rewardPerSecond:G(r.perSecond),rewardOpenTime:G(r.openTime),rewardEndTime:G(r.endTime),rewardType:G(Jt[r.rewardType])}}function No(r){return G(r.endTime).sub(G(r.openTime)).mul(G(r.perSecond))}function ci(r){let e=_a[r];return e||rr.logWithError("invalid version",r),e}function fd(r){let e=Ma[r];return e||rr.logWithError("invalid version",r),e}function yd(r,e,t,n){if(r.version===3||r.version===5){if(r.lastSlot.gte(new rt(t)))return r;let i=new rt(t).sub(r.lastSlot);r.lastSlot=new rt(t);for(let o of r.rewardInfos){if(e.amount.eq(new rt(0)))continue;let s=o.perSlotReward.mul(i);o.perShareReward=o.perShareReward.add(s.mul(new rt(10).pow(new rt(r.version===3?9:15))).div(e.amount)),o.totalReward=o.totalReward.add(s)}}else if(r.version===6)for(let i of r.rewardInfos){if(i.rewardState.eq(new rt(0)))continue;let o=rt.min(new rt(n),i.rewardEndTime);if(i.rewardOpenTime.gte(o))continue;let a=o.sub(i.rewardLastUpdateTime).mul(i.rewardPerSecond),u=i.totalReward.sub(i.totalRewardEmissioned);u.lt(a)?(a=u,i.rewardLastUpdateTime=i.rewardLastUpdateTime.add(u.div(i.rewardPerSecond))):i.rewardLastUpdateTime=o,!e.amount.eq(new rt(0))&&(i.accRewardPerShare=i.accRewardPerShare.add(a.mul(r.rewardMultiplier).div(e.amount)),i.totalRewardEmissioned=i.totalRewardEmissioned.add(a))}return r}async function mP({connection:r,farmPools:e,owner:t,config:n,chainTime:i}){let o=!1,s=!1,a=new rt(10),u=[];for(let d of e){let p=ye(d);p.version===6?s=!0:o=!0,u.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&u.push({pubkey:it({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let c={},l=await In(r,u,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(c[g]=N({},c[g]),y==="state"){let P=fd(p);(!b||!b.data||b.data.length!==P.span)&&rr.logWithError(`invalid farm state account info, pools.id, ${d}`),c[g].state=P.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Ht.span)&&rr.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),c[g].lpVault=Ht.decode(b.data);else if(y==="ledger"){let P=ci(p);b&&b.data&&(b.data.length!==P.span&&rr.logWithError(`invalid farm ledger account info, ledger, ${d}`),c[g].ledger=P.decode(b.data))}}let m=s||o?await r.getSlot():0;for(let d of Object.keys(c))c[d]!==void 0&&(c[d].state=yd(c[d].state,c[d].lpVault,m,i));for(let[d,{state:p,ledger:y}]of Object.entries(c))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new rt(9)):a.pow(new rt(15)),b=p.rewardInfos.map((g,P)=>{let A=y.rewardDebts[P];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(A)});c[d].wrapped=D(N({},c[d].wrapped),{pendingRewards:b})}return c}function dP(r,e=Date.now()){if(r.version===6){let t=r.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>ra(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ia(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 Mo(r,e,t,n){let i=await r.getAccountInfo(e);if(i===null)throw Error("registrar info check error");let s=Ca.decode(i.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 c=Ra.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return c===-1?{index:s,isInit:!1}:{index:c,isInit:!0}}var Ad=ae("Raydium_farm_instruction"),sr={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 Fa(r){let{version:e,id:t,ledger:n,programId:i,owner:o}=r,s={3:9,5:10}[e];s||Ad.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Po.span);Po.encode({instruction:s},a);let u=[k({pubkey:t}),k({pubkey:n}),k({pubkey:o,isWritable:!1}),k({pubkey:un.programId,isWritable:!1}),k({pubkey:bd,isWritable:!1})];return{instruction:new Ee({programId:i,keys:u,data:a}),instructionType:V.FarmV3CreateLedger}}function va(r){var n;let e=Buffer.alloc(ho.span);ho.encode({instruction:0,nonce:new li(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...Fi,k({pubkey:r.farmId}),k({pubkey:r.farmAuthority,isWritable:!1}),k({pubkey:r.lpVault}),k({pubkey:r.lpMint,isWritable:!1}),k({pubkey:r.lockVault}),k({pubkey:r.lockMint,isWritable:!1}),k({pubkey:(n=r.lockUserAccount)!=null?n:Ne}),k({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let i of r.rewardInfo)t.push(k({pubkey:i.rewardMint,isWritable:!1}),k({pubkey:i.rewardVault}),k({pubkey:i.userRewardToken}));return{instruction:new Ee({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function Wa(r){let e=Buffer.alloc(ko.span);ko.encode({instruction:5},e);let t=[k({pubkey:st,isWritable:!1}),k({pubkey:r.id}),k({pubkey:r.authority,isWritable:!1}),k({pubkey:r.lpVault,isWritable:!1}),k({pubkey:r.rewardVault}),k({pubkey:r.userRewardToken}),k({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ee({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function Pd(r,e,t,n,i,o,s,a,u,c,l,m,d){let p=L([_("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:vr,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...sr.voterStakeRegistryDeposit,...f]);return new Ee({keys:y,programId:r,data:b})}function kd(r,e,t,n){let i=L([]),o=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([...sr.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ee({keys:o,programId:r,data:a})}function hd(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y){let f=L([_("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:vr,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let P=Buffer.from([...sr.voterStakeRegistryWithdraw,...g]);return new Ee({keys:b,programId:r,data:P})}function Td(r,e,t,n,i,o){let s=L([_("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);return s.encode({ins:23},u),new Ee({keys:a,programId:r,data:u})}function Id(r,e,t,n,i,o,s,a){let u=L([_("voterBump"),_("voterWeightRecordBump")]),c=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1},{pubkey:vr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...sr.voterStakeRegistryCreateVoter,...l]);return new Ee({keys:c,programId:r,data:m})}function xd(r,e,t,n,i,o,s,a,u,c,l,m){let d=L([_("depositEntryIndex"),_("kind"),_("option"),w("startTs"),ze("periods"),qe("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:wd,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:u,option:c===void 0?0:1,startTs:c,periods:l,allowClawback:m},y);let f=Buffer.from([...sr.voterStakeRegistryCreateDepositEntry,...y]);return new Ee({keys:p,programId:r,data:f})}async function CP({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:o,owner:s,poolId:a,tokenProgram:u}){let c=So(n,i,o).publicKey,l=it({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=nr.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new li(0)))throw Error("user do not has new stake amount");let y=Ko(e,a).publicKey,f=Co(e,a).publicKey,{publicKey:b,nonce:g}=Ro(n,c,s),P=be(b,y,u).publicKey,{publicKey:A,nonce:T}=Lo(n,c,s),h=Oo(t,i,o,s).publicKey,I=[],B=be(s,y,u).publicKey;if(await r.getAccountInfo(B)===null&&I.push(gd(s,B,s,y)),await r.getAccountInfo(b)===null){let H=Td(t,i,s,o,s,h);I.push(H,Id(n,c,b,A,s,s,g,T))}let{index:M,isInit:F}=await Mo(r,c,b,y);return F||I.push(xd(n,c,b,P,s,s,y,M,0,void 0,0,!1)),I.push(Pd(n,c,b,P,B,s,l,a,y,f,e,M,p),kd(n,c,b,A)),I}async function RP({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:o,owner:s,poolId:a,tokenProgram:u}){let c=So(n,i,o).publicKey,l=it({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=nr.decode(m.data);if(d.voteLockedBalance.eq(new li(0)))throw Error("user has vote locked balance = 0");let p=Ko(e,a).publicKey,y=Co(e,a).publicKey,{publicKey:f}=Ro(n,c,s),b=be(f,p,u).publicKey,{publicKey:g}=Lo(n,c,s),P=Oo(t,i,o,s).publicKey,A=[],{index:T,isInit:h}=await Mo(r,c,f,p);if(!h)throw Error("deposit entry index check error");return A.push(hd(n,c,f,s,P,g,b,be(s,p,u).publicKey,l,a,p,y,e,T,d.voteLockedBalance)),A}function _o({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let o=Buffer.alloc(To.span);To.encode({instruction:3,rewardReopenTime:G(i.openTime),rewardEndTime:G(i.endTime),rewardPerSecond:G(i.perSecond)},o);let s=[k({pubkey:st,isWritable:!1}),k({pubkey:n.id}),k({pubkey:n.lpVault,isWritable:!1}),k({pubkey:e}),k({pubkey:t}),k({pubkey:r,isWritable:!1,isSigner:!0})];return new Ee({programId:n.programId,keys:s,data:o})}function Vo({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let o=Buffer.alloc(Io.span);Io.encode({instruction:4,isSet:new li(1),rewardPerSecond:G(i.perSecond),rewardOpenTime:G(i.openTime),rewardEndTime:G(i.endTime),rewardType:G(Jt[i.rewardType])},o);let s=[...Fi,k({pubkey:t.id}),k({pubkey:t.authority,isWritable:!1}),k({pubkey:i.mint,isWritable:!1}),k({pubkey:n}),k({pubkey:e}),k({pubkey:r,isWritable:!1,isSigner:!0})];return new Ee({programId:t.programId,keys:s,data:o})}function LP(r){let{farmInfo:e,farmKeys:t,version:n,lpAccount:i,rewardAccounts:o,owner:s,instruction:a,amount:u,deposit:c}=r,[l,m]=[new oe(e.programId),new oe(e.id)],d=it({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc($e.span);$e.encode({instruction:a,amount:u},p);let y=n===6?[k({pubkey:st,isWritable:!1}),...c?[k({pubkey:un.programId,isWritable:!1})]:[],k({pubkey:m}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:new oe(t.lpVault)}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i})]:[k({pubkey:m}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i}),k({pubkey:new oe(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:or,isWritable:!1}),k({pubkey:st,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(k({pubkey:o[f]})),y.push(k({pubkey:new oe(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(k({pubkey:new oe(t.rewardInfos[f].vault)})),y.push(k({pubkey:o[f]}));return new Ee({programId:l,keys:y,data:p})}function ar(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,u]=[new oe(e.programId),new oe(e.id)],c=it({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:2,amount:G(s)},l);let m=[k({pubkey:st,isWritable:!1}),k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:new oe(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new oe(t.rewardInfos[d].vault)})),m.push(k({pubkey:i[d]}));return new Ee({programId:a,keys:m,data:l})}function ur(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new oe(e.programId),new oe(e.id)],l=it({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:12,amount:G(s)},m);let d=[k({pubkey:c}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:or,isWritable:!1}),k({pubkey:st,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:i[p]})),d.push(k({pubkey:new oe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Ee({programId:u,keys:d,data:m})}function cr(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new oe(e.programId),new oe(e.id)],l=it({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:G(s)},m);let d=[k({pubkey:c}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:or,isWritable:!1}),k({pubkey:st,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Ee({programId:u,keys:d,data:m})}function Da(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new oe(e.programId),new oe(e.id)],l=it({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:10,amount:G(s)},m);let d=[k({pubkey:c}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:or,isWritable:!1}),k({pubkey:st,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Ee({programId:u,keys:d,data:m})}function qa(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new oe(e.programId),new oe(e.id)],l=it({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:G(s)},m);let d=[k({pubkey:c}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new oe(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new oe(t.rewardInfos[0].vault)}),k({pubkey:or,isWritable:!1}),k({pubkey:st,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:i[p]})),d.push(k({pubkey:new oe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Ee({programId:u,keys:d,data:m})}function Ua(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,u]=[new oe(e.programId),new oe(e.id)],c=it({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:1,amount:G(s)},l);let m=[k({pubkey:st,isWritable:!1}),k({pubkey:un.programId,isWritable:!1}),k({pubkey:u}),k({pubkey:new oe(t.authority),isWritable:!1}),k({pubkey:new oe(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new oe(t.rewardInfos[d].vault)})),m.push(k({pubkey:i[d]}));return new Ee({programId:a,keys:m,data:l})}var lr=class extends Be{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ne)){let n=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:No(D(N({},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:i=xn,txVersion:o}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new ke(e.lpMint.address),lockInfo:{lockMint:Oa,lockVault:Na},version:6,rewardInfos:t,programId:i},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=Ye({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(tr.span);u.addInstruction({instructions:[Sd.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:tr.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Va({programId:new ke(a.programId),poolId:l.publicKey}),y=ir({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let h of a.rewardInfos){h.openTime>=h.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",h.openTime.toString()),isNaN(Jt[h.rewardType])&&this.logAndCreateError("rewardType error",h.rewardType),Number(h.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",h.perSecond),f.push(Ea(h));let{rewardPubKey:I,newInstruction:B}=await this._getUserRewardInfo({rewardInfo:h,payer:c});B&&u.addInstruction(B),I||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=h.mint.equals(Ne)?new ke(Me.address):h.mint;b.push({rewardMint:x,rewardVault:ir({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:I})}let{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({mint:new ke(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});P&&u.addInstruction(P),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:T}=va({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 u.addInstruction({instructions:[A],instructionTypes:[T]}).versionBuild({txVersion:o,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var b;let o=At[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=ye((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 u=t||this.scope.ownerPubKey,c=n.mint.equals(Ne)?new ke(Me.address):n.mint,l=a.rewardInfos.findIndex(g=>new ke(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let d=(b=m.vault)!=null?b:Ne,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[_o({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let o=At[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=ye((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 u=t||this.scope.ownerPubKey,c=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Ne)?new ke(Me.address):m.mint,p=a.rewardInfos.findIndex(A=>new ke(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:Ne,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:u});g&&c.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let P=_o({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[P],instructionTypes:[V.FarmV6Restart]})}return c.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:o}=e,s=At[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ye((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder(),l=i.mint.equals(Ne)?new ke(Me.address):i.mint,m=ir({programId:new ke(n.programId),poolId:new ke(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:i,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,c.addInstruction({instructions:[Vo({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:o}=e,s=At[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ye((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of i){let m=l.mint.equals(Ne)?new ke(Me.address):l.mint,d=ir({programId:new ke(n.programId),poolId:new ke(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Vo({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:D(N({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[V.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:o,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=At[d];xo(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new ke(n.programId),new ke(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=it({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),P=this.createTxBuilder();P.addCustomComputeBudget(l);let A={};for(let v of this.scope.account.tokenAccounts)if(a){let j=be(this.scope.ownerPubKey,v.mint,v.programId).publicKey;v.publicKey&&j.equals(v.publicKey)&&(A[v.mint.toString()]=v.publicKey)}else A[v.mint.toString()]=v.publicKey;let T=b.lpMint,h=A[T.address];h||this.logAndCreateError("you don't have any lp","lp zero",A);let I=[];for(let v of m){let j=s&&v.mint.address===ne.toString(),te=A[v.mint.address];if(!te){let{account:ie,instructionParams:ft}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:v.mint.programId,mint:new ke(v.mint.address),notUseTokenAccount:j,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!j,associatedOnly:j?!1:a,checkCreateATAOwner:u});te=ie,ft&&P.addInstruction(ft)}A[v.mint.address]=te,I.push(te)}let B,x=await this.scope.connection.getAccountInfo(g);if(x&&(B=ci(p).decode(x.data)),n.programId!==xn.toString()&&!B){let{instruction:v,instructionType:j}=Fa({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});P.addInstruction({instructions:[v],instructionTypes:[j]})}let K=Bo({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:I});K&&this.logAndCreateError(K);let M={amount:G(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:h,rewardAccounts:I,userAuxiliaryLedgers:c==null?void 0:c.map(v=>new ke(v))},F=p===6?Ua(M):p===5?qa(M):Da(M),H={3:V.FarmV3Deposit,5:V.FarmV5Deposit,6:V.FarmV6Deposit};return P.addInstruction({instructions:[F],instructionTypes:[H[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:o,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!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=At[n.programId];xo(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 K of this.scope.account.tokenAccounts)if(u){let M=be(this.scope.ownerPubKey,K.mint).publicKey;K.publicKey&&M.equals(K.publicKey)&&(b[K.mint.toString()]=K.publicKey)}else b[K.mint.toString()]=K.publicKey;if(o)o.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let K=it({programId:new ke(n.programId),poolId:new ke(n.id),owner:this.scope.ownerPubKey,version:p}),M=await this.scope.connection.getAccountInfo(K);M||this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:M}),ci(p).decode(M.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id})}let g=y.lpMint.address,P=s&&g===ne.toString(),A=b[g.toString()];if(!A){let{account:K,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new ke(g),notUseTokenAccount:P,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:P?!1:u,checkCreateATAOwner:c});A=K,M&&f.addInstruction(M)}b[g.toString()]=A;let T=[];for(let K of d){let M=s&&K.mint.address===ne.toString(),F=b[K.mint.address];if(!F){let{account:H,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:K.mint.programId,mint:new ke(K.mint.address),notUseTokenAccount:M,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!M,associatedOnly:M?!1:u,checkCreateATAOwner:c});F=H,v&&f.addInstruction(v)}b[K.mint.address]=F,T.push(F)}let h=Bo({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:T});h&&this.logAndCreateError(h);let I={amount:G(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:T,userAuxiliaryLedgers:l==null?void 0:l.map(K=>new ke(K))},B=p===6?ar(I):p===5?ur(I):cr(I),x={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};return f.addInstruction({instructions:[B],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let i=ye((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),o=At[e.programId];o!==6&&this.logAndCreateError("invalid farm version",o);let s=e.rewardInfos.findIndex(y=>y.mint.address===Ne.toString()?new ke(Me.address):t),a=i.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Ne,c=this.createTxBuilder(),l;if(t.equals(Ne)){let y=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:No(D(N({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new E(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,c.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),c.addInstruction({instructions:[Bd(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Wa({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(o){let f=be(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)=>D(N({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:P}=y,A=At[f],T=b.address,h=n&&T===ne.toString(),I=m[T];if(!I){let{account:H,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new ke(T),notUseTokenAccount:h,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:o,checkCreateATAOwner:s});I=H,v&&l.addInstruction(v)}m[T.toString()]=I;let B=[];for(let H of g){let v=n&&H.mint.address===ne.toString(),j=m[H.mint.address];if(!j){let{account:te,instructionParams:ie}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:H.mint.programId,mint:new ke(H.mint.address),notUseTokenAccount:v,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!v,associatedOnly:v?!1:o,checkCreateATAOwner:s});j=te,ie&&l.addInstruction(ie)}m[H.mint.address]=j,B.push(j)}let x=p[P],K={amount:Ke,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:I,rewardAccounts:B,userAuxiliaryLedgers:a==null?void 0:a.map(H=>new ke(H))},M=A===6?ar(K):A===5?ur(K):cr(K),F={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};l.addInstruction({instructions:[M],instructionTypes:[F[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as je}from"@solana/web3.js";import{AccountLayout as fp,NATIVE_MINT as Bu,TOKEN_PROGRAM_ID as wi}from"@solana/spl-token";var ek=L([ze("mintAuthorityOption"),S("mintAuthority"),w("supply"),_("decimals"),_("isInitialized"),ze("freezeAuthorityOption"),S("freezeAuthority")]);import{PublicKey as Kd}from"@solana/web3.js";import{MintLayout as Ga,TOKEN_PROGRAM_ID as Cd}from"@solana/spl-token";var uk=async({connection:r,mint:e})=>{let t=await r.getAccountInfo(new Kd(e));return!t||t.data.length!==Ga.span?void 0:Ga.decode(t.data)},ck=({mint:r,decimals:e,programId:t=Cd,logoURI:n="",priority:i=3})=>{let o=r.toBase58().substring(0,6);return{address:r.toBase58(),decimals:e,symbol:o,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:o,tags:[],priority:i}},Xa=r=>new pe({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),lk=i=>{var o=i,{amount:r,isRaw:e,name:t}=o,n=Ie(o,["amount","isRaw","name"]);return new Te(new pe({mint:n.address,decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};function mk(r){return r.address===Tt.address?Me:r}function dk(r){return r.address===Me.address?Tt:r}import{TOKEN_PROGRAM_ID as Ln,ASSOCIATED_TOKEN_PROGRAM_ID as Ud}from"@solana/spl-token";import{PublicKey as ge,TransactionInstruction as Et,SystemProgram as $a,SYSVAR_RENT_PUBKEY as Gd}from"@solana/web3.js";var Eo=L([_("instruction"),w("amountIn"),w("minAmountOut")]),Fo=L([_("instruction"),w("maxAmountIn"),w("amountOut")]),Ik=L([_("instruction"),_("nonce")]),vo=L([_("instruction"),_("nonce"),w("startTime")]),Wo=L([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),S("baseVault"),S("quoteVault"),S("baseMint"),S("quoteMint"),S("lpMint"),S("openOrders"),S("marketId"),S("marketProgramId"),S("targetOrders"),S("withdrawQueue"),S("lpVault"),S("owner"),w("lpReserve"),q(w(),3,"padding")]),Rd=L([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),S("baseVault"),S("quoteVault"),S("baseMint"),S("quoteMint"),S("lpMint"),S("modelDataAccount"),S("openOrders"),S("marketId"),S("marketProgramId"),S("targetOrders"),S("owner"),q(w(),64,"padding")]),Do=L([_("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),qo=L([_("instruction"),w("amountIn")]),xk={4:Wo,5:Rd},za=L([w("fee")]);import{PublicKey as Ld}from"@solana/web3.js";var Rn=new Ld("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ln=5e4,Od=L([w("x"),w("y"),w("price")]),Nd=L([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),q(Od,ln,"DataElement")]);function Md(r,e){return[0,ln-2]}function _d(r){return[0,ln-2]}function Vd(r){return[0,ln-2]}function Ed(r,e,t){let[n,i]=Md(e,t),o=n,s=i,a=0,u=e*r.multiplier/t;for(;o<=s;){if(a=Math.floor((s+o)/2),a===0||a>=ln-2)return[a,a,!1];let c=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(u===c)return[a,a,!0];if(u===l)return[a-1,a-1,!0];if(u===m)return[a+1,a+1,!0];if(u<l)s=a-1;else{if(u>l&&u<c)return[a-1,a,!0];if(u>c&&u<m)return[a,a+1,!0];o=a+1}}return[a,a,!1]}function Uo(r,e,t){let[n,i,o]=Ed(r,e,t);if(!o)return 0;if(n===i){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,u=r.DataElement[i].x,c=r.DataElement[i].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*r.multiplier*l/p}}function cn(r,e,t){return e*r.multiplier/t}function Ya(r,e,t){return e*t/r.multiplier}function Fd(r,e){let[t,n]=_d(e),i=t,o=n,s=0,a=e;for(;i<o;){if(s=Math.floor((o+i)/2),s<=0||s>ln-2)return[s,s,!1];let u=r.DataElement[s].x,c=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<c)o=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function vd(r,e){let[t,n]=Vd(e),i=t,o=n,s=0,a=e;for(;i<=o;){if(s=Math.floor((o+i)/2),s<=0||s>=ln-2)return[s,s,!1];let u=r.DataElement[s].y,c=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<c&&a>u)return[s-1,s,!0];if(a<u&&a>l)return[s,s+1,!0];o=s-1}}return[s,s,!1]}function Ha(r,e,t,n){let i=n?e+t:e-t,[o,s,a]=Fd(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let u=r.DataElement[o].x,c=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].y;if(e>=u&&e<=c)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=d-(i-u)*r.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-i)*r.multiplier/l),[y,f,!1,a]}}}function Wd(r,e,t,n){let i=n?e-t:e+t,[o,s,a]=vd(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let u=r.DataElement[o].x,c=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=u+m*(d-i)/r.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(i-p)/r.multiplier),[y,f,!1,a]}}}function Dd(r,e){let t=Ha(r,e,0,!1);return t[3]?t[0]:0}function Qa(r,e,t,n){let i=Uo(r,e,t),o=cn(r,e,i),s=cn(r,t,i),a=cn(r,n,i),u=!0,[c,l,m,d]=Ha(r,o,a,u);if(!d)return 0;if(m)return n*r.multiplier/c;{let p=s-l;return Ya(r,p,i)}}function ja(r,e,t,n){let i=Uo(r,e,t),o=cn(r,e,i),s=cn(r,t,i),a=cn(r,n,i),u=!1,[c,l,m,d]=Wd(r,s,a,u);if(!d)return 0;if(m)return n*c/r.multiplier;{let p=o-l;return Ya(r,p,i)}}function qd(r){let e=Nd.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 Za(r,e,t,n){let i=Dd(r,cn(r,e,Uo(r,e,t)))/r.multiplier;return n?i:1/i}var Cn=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(Rn);e&&(this._layoutData=qd(e==null?void 0:e.data))}}};var Ja=ae("Raydium_liquidity_instruction");function eu(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:o,fixedSide:s}=r,a=Buffer.alloc(Do.span);Do.encode({instruction:3,baseAmountIn:G(i),quoteAmountIn:G(o),fixedSide:s==="base"?Ke:Us},a);let u=[k({pubkey:Ln,isWritable:!1}),k({pubkey:new ge(e.id)}),k({pubkey:new ge(t.authority),isWritable:!1}),k({pubkey:new ge(t.openOrders),isWritable:!1}),k({pubkey:new ge(t.targetOrders)}),k({pubkey:new ge(e.lpMint.address)}),k({pubkey:new ge(t.vault.A)}),k({pubkey:new ge(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(k({pubkey:Rn})),u.push(k({pubkey:new ge(e.marketId),isWritable:!1}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:new ge(t.marketEventQueue),isWritable:!1})),new Et({programId:new ge(e.programId),keys:u,data:a})}function Go(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:i}=r,o=ye(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(qo.span);qo.encode({instruction:4,amountIn:G(i)},a);let u=[k({pubkey:Ln,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.mintLp.address}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return s===5?u.push(k({pubkey:Rn})):(u.push(k({pubkey:o.id})),u.push(k({pubkey:o.id}))),u.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks})),new Et({programId:o.programId,keys:u,data:a})}return new Et({programId:o.programId,keys:[]})}function tu({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:o,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:P,openTime:A,coinAmount:T,pcAmount:h,ammConfigId:I,feeDestinationId:B}){let x=L([_("instruction"),_("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),K=[{pubkey:Ln,isSigner:!1,isWritable:!1},{pubkey:Ud,isSigner:!1,isWritable:!1},{pubkey:$a.programId,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:I,isSigner:!1,isWritable:!1},{pubkey:B,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}],M=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:P,openTime:A,coinAmount:T,pcAmount:h},M),{instruction:new Et({keys:K,programId:r,data:M}),instructionType:V.AmmV4CreatePool}}function Dk(r){let e=L([_("instruction"),_("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new ge(r.id),isWritable:!1}),k({pubkey:new ge(r.authority),isWritable:!1}),k({pubkey:new ge(r.openOrders),isWritable:!1}),k({pubkey:new ge(r.vault.A),isWritable:!1}),k({pubkey:new ge(r.vault.B),isWritable:!1}),k({pubkey:new ge(r.mintLp.address),isWritable:!1}),k({pubkey:new ge(r.marketId),isWritable:!1}),k({pubkey:new ge(r.marketEventQueue),isWritable:!1})];return new Et({programId:new ge(r.programId),keys:n,data:t})}function Xd({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},i){let o=ye(r),s=Buffer.alloc(Eo.span);Eo.encode({instruction:9,amountIn:G(t),minAmountOut:G(n)},s);let a=[k({pubkey:Ln,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders})];return i===4&&a.push(k({pubkey:o.targetOrders})),a.push(k({pubkey:o.vault.A}),k({pubkey:o.vault.B})),i===5&&a.push(k({pubkey:Rn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1})),new Et({programId:o.programId,keys:a,data:s})}function zd({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},i){let o=ye(r),s=Buffer.alloc(Fo.span);Fo.encode({instruction:11,maxAmountIn:G(t),amountOut:G(n)},s);let a=[k({pubkey:Ln,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return i===5&&a.push(k({pubkey:Rn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Et({programId:o.programId,keys:a,data:s})}function mi(r){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:o,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return Xd(D(N({},a),{amountIn:i,minAmountOut:o}),t);if(s==="out")return zd(D(N({},a),{maxAmountIn:i,amountOut:o}),t);Ja.logWithError("invalid params","params",r)}throw Ja.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function qk({poolKeys:r,userKeys:e,startTime:t}){let n=Buffer.alloc(vo.span);vo.encode({instruction:0,nonce:5,startTime:G(t)},n);let i=ye(r),o=[k({pubkey:Ln,isWritable:!1}),k({pubkey:$a.programId,isWritable:!1}),k({pubkey:Gd,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.authority,isWritable:!1}),k({pubkey:i.openOrders}),k({pubkey:i.mintLp.address}),k({pubkey:i.mintA.address,isWritable:!1}),k({pubkey:i.mintB.address,isWritable:!1}),k({pubkey:i.vault.A,isWritable:!1}),k({pubkey:i.vault.B,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.targetOrders}),k({pubkey:e.lpTokenAccount}),k({pubkey:i.id,isWritable:!1}),k({pubkey:i.marketProgramId,isWritable:!1}),k({pubkey:i.marketId,isWritable:!1}),k({pubkey:e.payer,isSigner:!0})];return new Et({programId:i.programId,keys:o,data:n})}function nu({poolKeys:r}){let e=L([_("instruction"),_("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new ge(r.id),isWritable:!1}),k({pubkey:new ge(r.authority),isWritable:!1}),k({pubkey:new ge(r.openOrders),isWritable:!1}),k({pubkey:new ge(r.vault.A),isWritable:!1}),k({pubkey:new ge(r.vault.B),isWritable:!1}),k({pubkey:new ge(r.mintLp.address),isWritable:!1}),k({pubkey:new ge(r.marketId),isWritable:!1}),k({pubkey:new ge(r.marketEventQueue),isWritable:!1})];return{instruction:new Et({programId:new ge(r.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as Ue,TOKEN_2022_PROGRAM_ID as $t,ASSOCIATED_TOKEN_PROGRAM_ID as wu}from"@solana/spl-token";import{PublicKey as W,TransactionInstruction as Pt,SystemProgram as On,Keypair as Jo}from"@solana/web3.js";import Au from"bn.js";import rp from"bn.js";function ru(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function Gk(r){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,r,!1),new Uint8Array(e)}function Xk(r){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,r,!1),new Uint8Array(e)}function di(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Xo(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function zo(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function mr(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function iu(r,e){return mr(r,e)?null:Xo(r,e)}function ou(r,e){return mr(r,e)?null:zo(r,e)}var Yd=Buffer.from("amm_config","utf8"),Hd=Buffer.from("pool","utf8"),Qd=Buffer.from("pool_vault","utf8"),jd=Buffer.from("pool_reward_vault","utf8"),su=Buffer.from("position","utf8"),Zd=Buffer.from("tick_array","utf8"),Jd=Buffer.from("operation","utf8"),$d=Buffer.from("pool_tick_array_bitmap_extension","utf8");function Qk(r,e){return se([Yd,ru(e)],r)}function au(r,e,t,n){return se([Hd,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Yo(r,e,t){return se([Qd,e.toBuffer(),t.toBuffer()],r)}function uu(r,e,t){return se([jd,e.toBuffer(),t.toBuffer()],r)}function we(r,e,t){return se([Zd,e.toBuffer(),di(t)],r)}function mn(r,e,t,n){return se([su,e.toBuffer(),di(t),di(n)],r)}function ct(r,e){return se([su,e.toBuffer()],r)}function pi(r){return se([Buffer.from("metadata","utf8"),Pn.toBuffer(),r.toBuffer()],Pn)}function dr(r){return se([Jd],r)}function lt(r,e){return se([$d,e.toBuffer()],r)}import St from"bn.js";var de=new St(0),at=new St(1),Ft=new St(-1),ut=new St(1).shln(64),fi=new St(1).shln(128),Ho=ut.sub(at),pr=64,cu=fi.subn(1),He=-443636,et=-He,Kt=new St("4295048016"),Ct=new St("79226673521066979257578248091"),lu=16,mu="59543866431248",du="184467440737095516",pu="15793534762490258745",yi=new St(10).pow(new St(6)),ep=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(ep||{}),Jk={[500]:10,[3e3]:60,[1e4]:200},$k={version:6,liquidity:de,tickCurrent:0,observationIndex:0,observationUpdateDuration: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},fu={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:[]},eh=new St("18446744073700000000");var tp=15,le=class{static async getTickArrays(e,t,n,i,o,s,a){let u=[],c=X.getTickArrayStartIndexByTick(i,o),l=X.getInitializedTickArrayInRange(s,a,o,c,Math.floor(tp/2));for(let p=0;p<l.length;p++){let{publicKey:y}=we(t,n,l[p]);u.push(y)}let m=(await It(e,u)).map(p=>p!==null?fr.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=D(N({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,i,o,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,i,o,s);for(;a==null||a.liquidityGross.lten(0);){if(c=X.getNextTickArrayStartIndex(c,o,s),this.checkIsValidStartIndex(c,o))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,i,o){let s=Math.floor(e/le.tickCount(t)),a=n?X.searchLowBitFromStart(i,o,s-1,1,t):X.searchHightBitFromStart(i,o,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let o;if(i){let a=Ve-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a-1}}else{let a=0;for(;a<Ve;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a+1}}let{publicKey:s}=we(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,o,s){let a=X.getTickArrayStartIndexByTick(i,o),u=Math.floor((i-a)/o),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u-1}else for(u=u+1;u<Ve;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=we(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:c.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(X.checkIsOutOfBoundary(e)){if(e>et)return!1;let n=X.getTickArrayStartIndexByTick(He,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ve*e}};import re from"bn.js";import{PublicKey as Wt}from"@solana/web3.js";import Re from"bn.js";var Qo=14,vt=class{static maxTickInTickarrayBitmap(e){return e*Ve*dn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let o=n*i;return e<0?{minValue:-o,maxValue:-o+n}:{minValue:o,maxValue:o+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=i?t-le.tickCount(n):t+le.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*Ve,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(i){let l=e.shln(1024-c-1),m=iu(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-o}}else{let l=e.shrn(c),m=ou(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-le.tickCount(n)}}}},yr=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=vt.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=vt.maxTickInTickarrayBitmap(e),n=-t;if(et<=t)throw Error(`extensionTickBoundary check error: ${et}, ${t}`);if(n<=He)throw Error(`extensionTickBoundary check error: ${n}, ${He}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),o=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:X.mergeTickArrayBitmap(i).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let o=le.tickCount(t),s=n?e-o:e+o,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:o,maxValue:s}=vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let u=X.mergeTickArrayBitmap(e).shln(dn-1-a),c=mr(512,u)?null:Xo(512,u);if(c!==null){let l=t-c*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let u=X.mergeTickArrayBitmap(e).shrn(a),c=mr(512,u)?null:zo(512,u);if(c!==null){let l=t+c*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)%vt.maxTickInTickarrayBitmap(t),i=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(i=dn-i),i}};import Rt from"bn.js";var br=class{static getfeeGrowthInside(e,t,n){let i=new Rt(0),o=new Rt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,o=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),o=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Rt(0),a=new Rt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let u=J.wrappingSubU128(J.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),c=J.wrappingSubU128(J.wrappingSubU128(e.feeGrowthGlobalX64B,o),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=J.mulDivFloor(J.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,ut),u=t.tokenFeesOwedA.add(a),c=J.mulDivFloor(J.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,ut),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=J.mulDivFloor(J.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,ut),u=t.tokenFeesOwedA.add(a),c=J.mulDivFloor(J.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,ut),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let o=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=J.wrappingSubU128(u,c.growthInsideLastX64),m=J.mulDivFloor(l,t.liquidity,ut),d=c.rewardAmountOwed.add(m);o.push(d)}return o}static GetPositionRewards(e,t,n,i){let o=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=J.wrappingSubU128(u,c.growthInsideLastX64),m=J.mulDivFloor(l,t.liquidity,ut),d=c.rewardAmountOwed.add(m);o.push(d)}return o}static getRewardGrowthInside(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Rt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Rt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(J.wrappingSubU128(J.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return o}static getRewardGrowthInsideV2(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Rt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Rt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(J.wrappingSubU128(J.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:o,epochInfo:s}){var b,g,P,A;let a=Z.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),u=Z.getSqrtPriceX64FromTick(t.tickLower),c=Z.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+i:1-i,m=ce.getAmountsFromLiquidity(a,u,c,n,o),[d,p]=[Pe(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Pe(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[Pe(new Rt(new E(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,s,!0),Pe(new Rt(new E(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:sn(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as yu}from"@solana/spl-token";var Qe=class{static getOutputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintA.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,c,o);return a.push(...d),{expectedAmountOut:m.mul(Ft),remainingAccounts:a,executionPrice:p,feeAmount:y}}static getInputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintB.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=we(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Ft),c,o);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Qe.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?yr.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):X.checkTickArrayIsInitialized(X.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=we(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=we(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)),i=t?X.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):X.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:o}=vt.nextInitializedTickArrayStartIndex(X.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=yr.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<He||t>et)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:o}){var a,u,c;let s=[];for(let l=0;l<o.length;l++){let m=o[l],d=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(d===void 0)throw Error("get new reward mint info error");let p=D(N({},m),{perSecond:J.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Wt(d)});if(p.tokenMint.equals(Wt.default))continue;if(n<=p.openTime.toNumber()||i.eq(de)){s.push(p);continue}let y=new Re(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=J.mulDivFloor(f,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(b),P=J.mulDivFloor(f,p.emissionsPerSecondX64,ut),A=p.rewardTotalEmissioned.add(P);s.push(D(N({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let o of t){let s=X.getTickArrayStartIndexByTick(o,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=vt.maxTickInTickarrayBitmap(e),n=-t;return t>et&&(t=le.getArrayStartIndex(et,e)+le.tickCount(e)),n<He&&(n=le.getArrayStartIndex(He,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)*dn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await In(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of i)s.accountInfo!==null&&(o[s.pubkey.toString()]=bu.decode(s.accountInfo.data));return o}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},o=[];for(let u of t){let c=X.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=X.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=we(u.programId,u.id,m);o.push({pubkey:d}),i[d.toString()]=u.id}}let s=await In(e,o,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=i[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=fr.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=D(N({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:o=!0}){var a;let s=[];for(let u=0;u<e.length;u++){let c=e[u];c!==null&&(s.find(l=>l.equals(c.state.programId))||s.push(c.state.programId))}if(n){let u=n.tokenAccounts.map(d=>d.accountInfo.mint),c=[];for(let d of u)for(let p of s)c.push(ct(p,d).publicKey);let l=await It(t,c,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=gi.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=X._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),P=X._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:T}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,p.liquidity,!1),h=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:P.price,amountA:A,amountB:T,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>D(N({},x),{pendingReward:new Re(0)})),leverage:h,tokenFeeAmountA:new Re(0),tokenFeeAmountB:new Re(0)}];let I=await X.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),B=await X.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=I,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=B}if(o){let d=Object.values(m),p=await It(t,d,{batchRequest:i}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=fr.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let P=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,T=y[m[P].toString()],h=y[m[A].toString()],I=T.ticks[X.getTickOffsetInArray(g.tickLower,f.tickSpacing)],B=h.ticks[X.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:K}=await br.GetPositionFees(f,g,I,B),M=await br.GetPositionRewards(f,g,I,B);g.tokenFeeAmountA=x.gte(new Re(0))?x:new Re(0),g.tokenFeeAmountB=K.gte(new Re(0))?K:new Re(0);for(let F=0;F<M.length;F++)g.rewardInfos[F].pendingReward=M[F].gte(new Re(0))?M[F]:new Re(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:o,slippage:s,priceLimit:a=new E(0)}){var M;let u,c=n.toBase58()===e.mintA.address,[l,m]=c?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new E(0))?u=c?Kt.add(new Re(1)):Ct.sub(new Re(1)):u=Z.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let d=Pe(o,l,i,!1),{expectedAmountOut:p,remainingAccounts:y,executionPrice:f,feeAmount:b}=Qe.getOutputAmountAndRemainAccounts(e,t,n,d.amount.sub((M=d.fee)!=null?M:de),u),g=Pe(p,m,i,!1),P=Z.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),A=c?P:new E(1).div(P),T=p.mul(new Re(Math.floor((1-s)*1e10))).div(new Re(1e10)),h=Pe(T,m,i,!1),I=c?e.currentPrice:new E(1).div(e.currentPrice),B=new E(A).sub(I).abs(),x=I,K=new _e(new E(B).mul(10**15).toFixed(0),new E(x).mul(10**15).toFixed(0));return{realAmountIn:d,amountOut:g,minAmountOut:h,expirationTime:sn(d.expirationTime,g.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:K,fee:b,remainingAccounts:y}}static async computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:o,epochInfo:s}){let a=i.address===e.mintB.address,[u,c]=a?[e.mintA,e.mintB]:[e.mintB,e.mintA],[l,m]=[new pe(D(N({},u),{mint:u.address,isToken2022:u.programId===yu.toBase58()})),new pe(D(N({},c),{mint:c.address,isToken2022:c.programId===yu.toBase58()}))],{realAmountIn:d,amountOut:p,minAmountOut:y,expirationTime:f,currentPrice:b,executionPrice:g,priceImpact:P,fee:A,remainingAccounts:T}=await Qe.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Wt(u.address),amountIn:n,slippage:o,epochInfo:s}),h=D(N({},d),{amount:new Te(l,d.amount),fee:d.fee===void 0?void 0:new Te(l,d.fee)}),I=D(N({},p),{amount:new Te(m,p.amount),fee:p.fee===void 0?void 0:new Te(m,p.fee)}),B=D(N({},y),{amount:new Te(m,y.amount),fee:y.fee===void 0?void 0:new Te(m,y.fee)}),x=new Xe({baseToken:l,denominator:new Re(10).pow(new Re(20+l.decimals)),quoteToken:m,numerator:b.mul(new E(10**(20+m.decimals))).toFixed(0)}),K=new Xe({baseToken:l,denominator:new Re(10).pow(new Re(20+l.decimals)),quoteToken:m,numerator:g.mul(new E(10**(20+m.decimals))).toFixed(0)}),M=new Te(l,A);return{realAmountIn:h,amountOut:I,minAmountOut:B,expirationTime:f,currentPrice:x,executionPrice:K,priceImpact:P,fee:M,remainingAccounts:T}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var y,f,b;let o=e[t],s=X.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=X.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),u=Math.max(s,o.priceMin),l=Math.min(a,o.priceMax)-u,m=a-s,d=o.priceMax-o.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:o.feeApr*p,rewardsApr:[(y=o.rewardApr[0])!=null?y:0*p,(f=o.rewardApr[1])!=null?f:0*p,(b=o.rewardApr[2])!=null?b:0*p],apr:o.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:o,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[kn(e.mintA.address).toString()],d=i[kn(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=Z.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),b=Z.getSqrtPriceX64FromTick(s),g=Z.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:h}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,o,!1,!1,0),I=new E(P.toString()).div(new E(10).pow(p)).mul(m.value).add(new E(A.toString()).div(new E(10).pow(y)).mul(d.value)),B=new E(T.toString()).div(new E(10).pow(p)).mul(m.value).add(new E(h.toString()).div(new E(10).pow(y)).mul(d.value)),x=B.div(I.add(B)).div(B),M=new E(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),F=3600*24*365,H=e.rewardDefaultInfos.map(v=>{var ie,ft;let j=v.mint.decimals,te=i[v.mint.address];return u<((ie=v.startTime)!=null?ie:0)||u>((ft=v.endTime)!=null?ft:0)||!v.perSecond||!te||j===void 0?0:new E(te.value).mul(new E(v.perSecond).mul(F)).div(new E(10).pow(j)).mul(x).mul(100).toNumber()});return{feeApr:M,rewardsApr:H,apr:M+H.reduce((v,j)=>v+j,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:o,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,P;let l=Z.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),m=Z.getSqrtPriceX64FromTick(n),d=Z.getSqrtPriceX64FromTick(i),p=a?1-s:1+s,y=Pe(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new Re(new E(y.amount.sub((P=y.fee)!=null?P:de).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Re(0);else if(l.lte(d)){let A=ce.getLiquidityFromTokenAmountA(l,d,f,!a),T=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:T}else b=t?new Re(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Qe.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:o,slippage:s,add:a}){var b,g,P,A;let u=Z.getSqrtPriceX64FromTick(n),c=Z.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(Z.priceToSqrtPriceX64(new E(t.price),t.mintA.decimals,t.mintB.decimals),u,c,o,a),[d,p]=[Pe(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Pe(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[Pe(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.feeConfig,e,!0),Pe(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:o,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:sn(d.expirationTime,p.expirationTime)}}static async fetchComputeClmmInfo({connection:e,poolInfo:t}){let n=await e.getAccountInfo(new Wt(t.id));if(!n)throw new Error(`pool not found ${t.id}`);let i=bi.decode(n.data),o=lt(new Wt(t.programId),new Wt(t.id)).publicKey,s=await Qe.fetchExBitmaps({connection:e,exBitmapAddress:[o],batchRequest:!1});return D(N({},i),{id:new Wt(t.id),programId:new Wt(t.programId),mintA:t.mintA,mintB:t.mintB,ammConfig:D(N({},t.config),{id:new Wt(t.config.id),fundOwner:""}),currentPrice:new E(t.price),exBitmapInfo:s[o.toBase58()],startTime:i.startTime.toNumber()})}};function vh({poolInfo:r,tickLower:e,tickUpper:t,amountA:n,amountB:i,slippage:o,add:s,epochInfo:a,amountHasFee:u}){var A,T,h,I;let[c,l,m,d]=e<t?[e,t,n,i]:[t,e,i,n],p=Z.priceToSqrtPriceX64(new E(r.price),r.mintA.decimals,r.mintB.decimals),y=Z.getSqrtPriceX64FromTick(c),f=Z.getSqrtPriceX64FromTick(l),[b,g]=[Pe(m,(A=r.mintA.extensions)==null?void 0:A.feeConfig,a,!u),Pe(d,(T=r.mintB.extensions)==null?void 0:T.feeConfig,a,!u)],P=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((h=b.fee)!=null?h:de),g.amount.sub((I=g.fee)!=null?I:de));return ce.getAmountsOutFromLiquidity({poolInfo:r,tickLower:e,tickUpper:t,liquidity:P,slippage:o,add:s,epochInfo:a,amountAddFee:!u})}var J=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),o=i.div(n);return i.mod(n).eq(de)||(o=o.add(at)),o}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(at)).div(n)}static x64ToDecimal(e,t){return new E(e.toString()).div(E.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(E.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(fi).sub(t).mod(fi)}};function Fe(r,e){return jo(r.mul(e),64,256)}function np(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function jo(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var Z=class{static sqrtPriceX64ToPrice(e,t,n){return J.x64ToDecimal(e).pow(2).mul(E.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return J.decimalToX64(e.mul(E.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){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 i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){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 i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(de))return e;let o=t.shln(pr);if(i){let s=o,a=o.add(n.mul(e));return a.gte(s)?J.mulDivCeil(s,e,a):J.mulDivRoundingUp(s,at,s.div(e).add(n))}else{let s=n.mul(e);if(!o.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=o.sub(s);return J.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let o=n.shln(pr);if(i)return e.add(o.div(t));{let s=J.mulDivRoundingUp(o,at,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<He||e>et)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=Fe(n,new re("18444899583751176192"))),(t&4)!=0&&(n=Fe(n,new re("18443055278223355904"))),(t&8)!=0&&(n=Fe(n,new re("18439367220385607680"))),(t&16)!=0&&(n=Fe(n,new re("18431993317065453568"))),(t&32)!=0&&(n=Fe(n,new re("18417254355718170624"))),(t&64)!=0&&(n=Fe(n,new re("18387811781193609216"))),(t&128)!=0&&(n=Fe(n,new re("18329067761203558400"))),(t&256)!=0&&(n=Fe(n,new re("18212142134806163456"))),(t&512)!=0&&(n=Fe(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=Fe(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=Fe(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=Fe(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=Fe(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=Fe(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=Fe(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=Fe(n,new re("696457651848324352"))),(t&131072)!=0&&(n=Fe(n,new re("26294789957507116"))),(t&262144)!=0&&(n=Fe(n,new re("37481735321082"))),e>0&&(n=cu.div(n)),n}static getTickFromPrice(e,t,n){return Z.getTickFromSqrtPriceX64(Z.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Ct)||e.lt(Kt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),i=np(n,32,128),o=new re("8000000000000000","hex"),s=0,a=new re(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new re(0))&&s<lu;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(o.mul(y)),o=o.shrn(1),s+=1}let c=a.shrn(32),m=i.add(c).mul(new re(mu)),d=jo(m.sub(new re(du)),64,128).toNumber(),p=jo(m.add(new re(pu)),64,128).toNumber();return d==p?d:Z.getSqrtPriceX64FromTick(p).lte(e)?p:d}},fn=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=Z.getTickFromSqrtPriceX64(Z.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let o=fn.getTickWithPriceAndTickspacing(e,t,n,i),s=Z.getSqrtPriceX64FromTick(o);return Z.sqrtPriceX64ToPrice(s,n,i)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(pr),s=t.sub(e);return i?J.mulDivRoundingUp(J.mulDivCeil(o,s,t),at,e):J.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");return i?J.mulDivCeil(n,t.sub(e),ut):J.mulDivFloor(n,t.sub(e),ut)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let o=n.mul(e).mul(t),s=t.sub(e),a=o.div(s);return i?J.mulDivRoundingUp(a,at,Ho):a.shrn(pr)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),J.mulDivFloor(n,Ho,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,i,!1),a=ce.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,i,o),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,i,o),a=ce.getTokenAmountBFromLiquidity(t,e,i,o);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,i,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,o,s,a){let{amountA:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,i,s),l=o?1+a:1-a,m=new re(new E(u.toString()).mul(l).toFixed(0)),d=new re(new E(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:o,add:s,epochInfo:a,amountAddFee:u}){var P,A,T,h;let c=Z.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),l=Z.getSqrtPriceX64FromTick(t),m=Z.getSqrtPriceX64FromTick(n),d=s?1+o:1-o,p=ce.getAmountsFromLiquidity(c,l,m,i,s),[y,f]=[Pe(p.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,u),Pe(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[Pe(new re(new E(p.amountA.toString()).mul(d).toFixed(0)),(T=e.mintA.extensions)==null?void 0:T.feeConfig,a,u),Pe(new re(new E(p.amountB.toString()).mul(d).toFixed(0)),(h=e.mintB.extensions)==null?void 0:h.feeConfig,a,u)];return{liquidity:i,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:sn(y.expirationTime,f.expirationTime)}}},pn=class{static swapCompute(e,t,n,i,o,s,a,u,c,l,m,d,p,y){if(d.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?Kt.add(at):Ct.sub(at)),s){if(y.lt(Kt))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(Ct))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let f=d.gt(de),b={amountSpecifiedRemaining:d,amountCalculated:de,sqrtPriceX64:m,tick:c>p?Math.min(p+le.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new re(0)},g=p,P=n[p],A=0,T=!s&&P.startTickIndex===b.tick;for(;!b.amountSpecifiedRemaining.eq(de)&&!b.sqrtPriceX64.eq(y);){if(A>10)throw Error("liquidity limit");let h={};h.sqrtPriceStartX64=b.sqrtPriceX64;let I=X.nextInitTick(P,b.tick,l,s,T),B=I||null,x=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let M=Qe.nextInitializedTickArrayStartIndex({tickCurrent:b.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:o},g,s);if(!M.isExist)throw Error("swapCompute LiquidityInsufficient");g=M.nextStartIndex;let{publicKey:F}=we(e,t,g);x=F,P=n[g],B=X.firstInitializedTick(P,s)}h.tickNext=B.tick,h.initialized=B.liquidityGross.gtn(0),p!==g&&x&&(b.accounts.push(x),p=g),h.tickNext<He?h.tickNext=He:h.tickNext>et&&(h.tickNext=et),h.sqrtPriceNextX64=Z.getSqrtPriceX64FromTick(h.tickNext);let K;if(s&&h.sqrtPriceNextX64.lt(y)||!s&&h.sqrtPriceNextX64.gt(y)?K=y:K=h.sqrtPriceNextX64,[b.sqrtPriceX64,h.amountIn,h.amountOut,h.feeAmount]=pn.swapStepCompute(b.sqrtPriceX64,K,b.liquidity,b.amountSpecifiedRemaining,a),b.feeAmount=b.feeAmount.add(h.feeAmount),f?(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.sub(h.amountIn.add(h.feeAmount)),b.amountCalculated=b.amountCalculated.sub(h.amountOut)):(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.add(h.amountOut),b.amountCalculated=b.amountCalculated.add(h.amountIn.add(h.feeAmount))),b.sqrtPriceX64.eq(h.sqrtPriceNextX64)){if(h.initialized){let M=B.liquidityNet;s&&(M=M.mul(Ft)),b.liquidity=ce.addDelta(b.liquidity,M)}T=h.tickNext!=b.tick&&!s&&P.startTickIndex===h.tickNext,b.tick=s?h.tickNext-1:h.tickNext}else if(b.sqrtPriceX64!=h.sqrtPriceStartX64){let M=Z.getTickFromSqrtPriceX64(b.sqrtPriceX64);T=M!=b.tick&&!s&&P.startTickIndex===M,b.tick=M}++A}try{let{nextStartIndex:h,isExist:I}=le.nextInitializedTickArray(b.tick,l,s,i,o);I&&p!==h&&(b.accounts.push(we(e,t,h).publicKey),p=h)}catch{}return{amountCalculated:b.amountCalculated,feeAmount:b.feeAmount,sqrtPriceX64:b.sqrtPriceX64,liquidity:b.liquidity,tickCurrent:b.tick,accounts:b.accounts}}static swapStepCompute(e,t,n,i,o){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),u=i.gte(de);if(u){let l=J.mulDivFloor(i,yi.sub(new re(o.toString())),yi);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=Z.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Ft).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=Z.getNextSqrtPriceX64FromOutput(e,n,i.mul(Ft),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(i.mul(Ft))&&(s.amountOut=i.mul(Ft)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=i.sub(s.amountIn):s.feeAmount=J.mulDivCeil(s.amountIn,new re(o),yi.sub(new re(o))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ve=60,dn=512,X=class{static getTickArrayAddressByTick(e,t,n,i){let o=X.getTickArrayStartIndexByTick(n,i),{publicKey:s}=we(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=X.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=Ve)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=le.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ve,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*Ve,o=Math.floor(t/i)+512,s=Math.abs(o);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Ve:e+t*Ve}static mergeTickArrayBitmap(e){let t=new rp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,o){let s=Math.floor(i/(n*Ve));return[...X.searchLowBitFromStart(e,t,s-1,o,n),...X.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return X.searchHightBitFromStart(e,t,0,dn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,o){let s=[],a=X.getAllInitializedTickArrayStartIndex(n,i,o);for(let u of a){let{publicKey:c}=we(e,t,u);s.push({tickArrayStartIndex:u,tickArrayAddress:c})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>X.mergeTickArrayBitmap(c)),a=[];for(;n>=-7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n--,a.length===i)break}let u=le.tickCount(o);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>X.mergeTickArrayBitmap(c)),a=[];for(;n<7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n++,a.length===i)break}let u=le.tickCount(o);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<He||e>et}static nextInitTick(e,t,n,i,o){if(le.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(o||(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 i=Z.getSqrtPriceX64FromTick(t),o=Z.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new E(1).div(o),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new E(1).div(t),o=fn.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=Z.getSqrtPriceX64FromTick(o),a=Z.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new E(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=Z.getSqrtPriceX64FromTick(t),o=Z.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new E(1).div(o),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new E(1).div(t),o=fn.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=Z.getSqrtPriceX64FromTick(o),a=Z.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new E(1).div(a)}}};var cT=L([fe(8),_("bump"),Bt("index"),S(""),ze("protocolFeeRate"),ze("tradeFeeRate"),Bt("tickSpacing"),q(w(),8,"")]),ip=L([ze("blockTimestamp"),Y("sqrtPriceX64"),Y("cumulativeTimePriceX64"),q(Y(),1,"")]),Zo=L([fe(8),qe("initialized"),S("poolId"),q(ip,1e3,"observations"),q(Y(),5,"")]),op=L([_("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Y("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),S("tokenMint"),S("tokenVault"),S("creator"),Y("rewardGrowthGlobalX64")]),bi=L([fe(8),_("bump"),S("ammConfig"),S("creator"),S("mintA"),S("mintB"),S("vaultA"),S("vaultB"),S("observationId"),_("mintDecimalsA"),_("mintDecimalsB"),Bt("tickSpacing"),Y("liquidity"),Y("sqrtPriceX64"),De("tickCurrent"),Bt("observationIndex"),Bt("observationUpdateDuration"),Y("feeGrowthGlobalX64A"),Y("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Y("swapInAmountTokenA"),Y("swapOutAmountTokenB"),Y("swapInAmountTokenB"),Y("swapOutAmountTokenA"),_("status"),q(_(),7,""),q(op,3,"rewardInfos"),q(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),q(w(),15*4-3,"padding")]),sp=L([Y("growthInsideLastX64"),w("rewardAmountOwed")]),gi=L([fe(8),_("bump"),S("nftMint"),S("poolId"),De("tickLower"),De("tickUpper"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(sp,3,"rewardInfos"),q(w(),8,"")]),lT=L([fe(8),_("bump"),S("poolId"),De("tickLowerIndex"),De("tickUpperIndex"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(Y(),3,"rewardGrowthInside"),q(w(),8,"")]),ap=L([De("tick"),ga("liquidityNet"),Y("liquidityGross"),Y("feeGrowthOutsideX64A"),Y("feeGrowthOutsideX64B"),q(Y(),3,"rewardGrowthsOutsideX64"),q(ze(),13,"")]),fr=L([fe(8),S("poolId"),De("startTickIndex"),q(ap,Ve,"ticks"),_("initializedTickCount"),q(_(),115,"")]),gu=L([fe(329),q(S(),100,"whitelistMints")]),bu=L([fe(8),S("poolId"),q(q(w(),8),Qo,"positiveTickArrayBitmap"),q(q(w(),8),Qo,"negativeTickArrayBitmap")]);var Pu=ae("Raydium_Clmm"),kt={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]},Se=class{static createPoolInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y){let f=L([Y("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let P=Buffer.from([...kt.createPool,...g]);return new Pt({keys:b,programId:e,data:P})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:i,mintA:o,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=Ye({fromPublicKey:i,programId:n}),[d,p]=[new W(o.address),new W(s.address)],y=[On.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Zo.span),space:Zo.span,programId:n})],{publicKey:f}=au(n,a,d,p),{publicKey:b}=Yo(n,f,d),{publicKey:g}=Yo(n,f,p);return y.push(this.createPoolInstruction(n,f,i,a,m.publicKey,d,b,new W(o.programId||Ue),p,g,new W(s.programId||Ue),lt(n,f).publicKey,u,c)),{signers:[],instructions:y,instructionTypes:[V.CreateAccount,V.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P,A,T,h,I,B,x,K,M){let F=L([De("tickLowerIndex"),De("tickUpperIndex"),De("tickArrayLowerStartIndex"),De("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),_("optionBaseFlag"),qe("baseFlag")]),H=[...M?[{pubkey:M,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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:nt,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:wu,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...H],j=Buffer.alloc(F.span);F.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:I,amountMaxA:B,amountMaxB:x,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},j);let te=Buffer.from([...kt.openPosition,...j]);return new Pt({keys:v,programId:e,data:te})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new W(e.programId),new W(e.id)],y;if(l)y=new W((await l(1))[0]);else{let x=Jo.generate();m.push(x),y=x.publicKey}let f=X.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=X.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:P}=we(d,p,b),{publicKey:A}=be(n.wallet,y,Ue),{publicKey:T}=pi(y),{publicKey:h}=ct(d,y),{publicKey:I}=mn(d,p,i,o),B=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,T,I,g,P,h,n.tokenAccountA,n.tokenAccountB,new W(t.vault.A),new W(t.vault.B),new W(e.mintA.address),new W(e.mintB.address),i,o,f,b,s,a,u,c);return{signers:m,instructions:[B],instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:T,personalPosition:h,protocolPosition:I}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new W(e.programId),new W(e.id)],y;if(l)y=new W((await l(1))[0]);else{let x=Jo.generate();m.push(x),y=x.publicKey}let f=X.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=X.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:P}=we(d,p,b),{publicKey:A}=be(n.wallet,y,Ue),{publicKey:T}=pi(y),{publicKey:h}=ct(d,y),{publicKey:I}=mn(d,p,i,o),B=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,T,I,g,P,h,n.tokenAccountA,n.tokenAccountB,new W(t.vault.A),new W(t.vault.B),new W(e.mintA.address),new W(e.mintB.address),i,o,f,b,c,s,a,u,Qe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:T,personalPosition:h,protocolPosition:I},instructions:[B],signers:m,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P,A,T,h,I,B,x,K,M){let F=L([De("tickLowerIndex"),De("tickUpperIndex"),De("tickArrayLowerStartIndex"),De("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),_("optionBaseFlag"),qe("baseFlag")]),H=[...M?[{pubkey:M,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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:nt,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:wu,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...H],j=Buffer.alloc(F.span);F.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:new Au(0),amountMaxA:B==="MintA"?x:K,amountMaxB:B==="MintA"?K:x,withMetadata:I==="create",baseFlag:B==="MintA",optionBaseFlag:1},j);let te=Buffer.from([...kt.openPosition,...j]);return new Pt({keys:v,programId:e,data:te})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new W((await l(1))[0]);else{let x=Jo.generate();d.push(x),m=x.publicKey}let[p,y]=[new W(e.programId),new W(e.id)],f=X.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=X.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=we(p,y,f),{publicKey:P}=we(p,y,b),{publicKey:A}=be(n.wallet,m,Ue),{publicKey:T}=pi(m),{publicKey:h}=ct(p,m),{publicKey:I}=mn(p,y,i,o),B=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,T,I,g,P,h,n.tokenAccountA,n.tokenAccountB,new W(t.vault.A),new W(t.vault.B),new W(t.mintA.address),new W(t.mintB.address),i,o,f,b,s,a,u,c,Qe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:T,personalPosition:h,protocolPosition:I},instructions:[B],signers:d,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,o){let s=L([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...kt.closePosition,...u]);return new Pt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i}){let o=new W(e.programId),{publicKey:s}=be(n.wallet,i.nftMint,Ue),{publicKey:a}=ct(o,i.nftMint),u=[];return u.push(this.closePositionInstruction(o,n.wallet,i.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P){let A=L([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),_("optionBaseFlag"),qe("baseFlag")]),T=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],I=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},I);let B=Buffer.from([...kt.increaseLiquidity,...I]);return new Pt({keys:h,programId:e,data:B})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMaxA:s,amountMaxB:a}){let[u,c]=[new W(e.programId),new W(e.id)],l=X.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=X.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(u,c,l),{publicKey:p}=we(u,c,m),{publicKey:y}=be(i.wallet,n.nftMint,Ue),{publicKey:f}=ct(u,n.nftMint),{publicKey:b}=mn(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,i.wallet,y,f,c,b,d,p,i.tokenAccountA,i.tokenAccountB,new W(t.vault.A),new W(t.vault.B),new W(e.mintA.address),new W(e.mintB.address),o,s,a,Qe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:o,baseAmount:s,otherAmountMax:a}){let[u,c]=[new W(e.programId),new W(e.id)],l=X.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=X.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(u,c,l),{publicKey:p}=we(u,c,m),{publicKey:y}=be(i.wallet,n.nftMint,Ue),{publicKey:f}=ct(u,n.nftMint),{publicKey:b}=mn(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,y,f,c,b,d,p,i.tokenAccountA,i.tokenAccountB,new W(t.vault.A),new W(t.vault.B),new W(e.mintA.address),new W(e.mintB.address),o,s,a,Qe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(u,c).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P){let A=L([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),_("optionBaseFlag"),qe("baseFlag")]),T=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],I=Buffer.alloc(A.span);A.encode({liquidity:new Au(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},I);let B=Buffer.from([...kt.increaseLiquidity,...I]);return new Pt({keys:h,programId:e,data:B})}static decreaseLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P,A){let T=L([Y("liquidity"),w("amountMinA"),w("amountMinB")]),h=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,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:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],B=Buffer.alloc(T.span);T.encode({liquidity:b,amountMinA:g,amountMinB:P},B);let x=Buffer.from([...kt.decreaseLiquidity,...B]);return new Pt({keys:I,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new W(e.programId),new W(e.id)],m=X.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=X.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(c,l,m),{publicKey:y}=we(c,l,d),{publicKey:f}=be(i.wallet,n.nftMint,u),{publicKey:b}=ct(c,n.nftMint),{publicKey:g}=mn(c,l,n.tickLower,n.tickUpper),P=[];for(let T=0;T<e.rewardDefaultInfos.length;T++)P.push({poolRewardVault:new W(t.rewardInfos[T].vault),ownerRewardVault:i.rewardAccounts[T],rewardMint:new W(e.rewardDefaultInfos[T].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,i.wallet,f,b,l,g,p,y,i.tokenAccountA,i.tokenAccountB,new W(t.vault.A),new W(t.vault.B),new W(e.mintA.address),new W(e.mintB.address),P,o,s,a,Qe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?lt(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[V.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g){let P=L([w("amount"),w("otherAmountThreshold"),Y("sqrtPriceLimitX64"),qe("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(B=>({pubkey:B,isSigner:!1,isWritable:!0}))],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],h=Buffer.alloc(P.span);P.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},h);let I=Buffer.from([...kt.swap,...h]);return new Pt({keys:T,programId:e,data:I})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:o,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new W(e.programId),new W(e.id)],[d,p]=[new W(t.vault.A),new W(t.vault.B)],[y,f]=[new W(e.mintA.address),new W(e.mintB.address)],b=e.mintA.address===o.toString(),g=[this.swapInstruction(l,i.wallet,m,new W(e.config.id),b?i.tokenAccountA:i.tokenAccountB,b?i.tokenAccountB:i.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,lt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,o,s,a,u,c,l,m,d){let p=L([w("openTime"),w("endTime"),Y("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:On.programId,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:G(l),endTime:G(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...kt.initReward,...f]);return new Pt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new W(e.programId),new W(e.id)],a=uu(o,s,i.mint).publicKey,u=dr(o).publicKey,c=[this.initRewardInstruction(o,n.wallet,s,u,new W(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,o,s,a,u,c,l,m,d){let p=L([_("rewardIndex"),Y("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:G(l),endTime:G(m)},f);let b=Buffer.from([...kt.setRewardEmissions,...f]);return new Pt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new W(e.programId),new W(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,u=new W(t.rewardInfos[d].vault),c=new W(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&Pu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=dr(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new W(e.config.id),n.tokenAccount,u,c,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,o,s,a){let u=L([_("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...kt.collectReward,...l]);return new Pt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[o,s]=[new W(e.programId),new W(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,u=new W(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&Pu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(o,n.wallet,s,n.tokenAccount,u,i,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[V.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:i,amountOut:o,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new W(e.programId),new W(e.id)],[m,d]=[new W(t.vault.A),new W(t.vault.B)],[p,y]=[new W(e.mintA.address),new W(e.mintB.address)],f=e.mintA.address===i.toString(),b=[this.swapInstruction(c,n.wallet,l,new W(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,u,m,o,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[V.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as mp}from"@solana/web3.js";import{PublicKey as cp}from"@solana/web3.js";import ku from"bn.js";var hu=new ku(25),Tu=new ku(1e4),up={4:3,5:3};var lp=ae("Raydium_liquidity_serum");function Iu({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let o=t.concat(Buffer.from([n]),Buffer.alloc(7));i=cp.createProgramAddressSync(o,r)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:i,nonce:n}}throw lp.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 gr from"bn.js";function es({programId:r}){let{publicKey:e}=se([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function yn({name:r,programId:e,marketId:t}){let{publicKey:n}=se([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function dp({programId:r,marketId:e}){let{publicKey:t}=se([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function pp({programId:r}){return se([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function xu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:u}){let c=yn({name:"amm_associated_seed",programId:a,marketId:t}),l=yn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=pp({programId:a}),p=yn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=yn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=yn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=dp({programId:a,marketId:t}),g=yn({name:"target_associated_seed",programId:a,marketId:t}),P=yn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=Iu({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:o,quoteDecimals:s,lpDecimals:o,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:P,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:A,lookupTableAccount:mp.default,configId:es({programId:a})}}var $o;async function vT({connection:r,poolKeysList:e,config:t}){$o||($o=new Cn({connection:r}),await $o.initStableModelLayout());let n=e.map(s=>nu({poolKeys:s}));return(await Js(r,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=$s(s,"GetPoolData"),u=new gr(Nt(a,"status")),c=Number(Nt(a,"coin_decimals")),l=Number(Nt(a,"pc_decimals")),m=Number(Nt(a,"lp_decimals")),d=new gr(Nt(a,"pool_coin_amount")),p=new gr(Nt(a,"pool_pc_amount")),y=new gr(Nt(a,"pool_lp_supply")),f="0";try{f=Nt(a,"pool_open_time")}catch{}return{status:u,baseDecimals:c,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new gr(f)}})}import ot from"bn.js";var wr=class extends Be{constructor(t){super(t);this.stableLayout=new Cn({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:o}){let s=new ot(new E(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=Xa(t[o?"mintB":"mintA"]),[u,c]=[new ot(new E(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new ot(new E(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new ot(new E(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,E.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",o?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",o?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",c.toString());let m=o?"base":"quote";this.logDebug("input side:",m);let d=Ke;s.isZero()||(d=m==="base"?Ur(s.mul(c),u):Ur(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Ur(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let f=new _e(new ot(1)).add(i).mul(d).quotient,b=new Te(a,d),g=new Te(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,amountInA:i,amountInB:o,fixedSide:s,config:a,txVersion:u,computeBudgetConfig:c}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",o),(i.isZero()||o.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:o.toFixed()});let{account:l}=this.scope,{bypassAssociatedCheck:m,checkCreateATAOwner:d}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},a),[p,y]=[i.token,o.token],f=await l.getCreatedTokenAccount({mint:p.mint,associatedOnly:!1}),b=await l.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1});!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let g=await l.getCreatedTokenAccount({mint:new je(n.lpMint.address)}),P=[p,y],A=[f,b],T=[i.raw,o.raw],h=i.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(h)||this.logAndCreateError("invalid fixedSide","fixedSide",s),h==="quote"?(P.reverse(),A.reverse(),T.reverse(),I=s==="a"?"quote":"base"):h==="base"&&(I=s==="a"?"base":"quote");let[B,x]=P,[K,M]=A,[F,H]=T,v=await this.getAmmPoolKeys(n.id),j=this.createTxBuilder(),Dt=await l.handleTokenAccount({side:"in",amount:F,mint:B.mint,tokenAccount:K,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:te}=Dt,ie=Ie(Dt,["tokenAccount"]);j.addInstruction(ie);let Rr=await l.handleTokenAccount({side:"in",amount:H,mint:x.mint,tokenAccount:M,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:ft}=Rr,Vn=Ie(Rr,["tokenAccount"]);j.addInstruction(Vn);let En=await l.handleTokenAccount({side:"out",amount:0,mint:new je(n.lpMint.address),tokenAccount:g,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:Si}=En,Ki=Ie(En,["tokenAccount"]);return j.addInstruction(Ki),j.addInstruction({instructions:[eu({poolInfo:n,poolKeys:v,userKeys:{baseTokenAccount:te,quoteTokenAccount:ft,lpTokenAccount:Si,owner:this.scope.ownerPubKey},baseAmountIn:F,quoteAmountIn:H,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5AddLiquidity:V.AmmV4AddLiquidity],lookupTableAddress:v.lookupTableAccount?[v.lookupTableAccount]:[]}),j.addCustomComputeBudget(c),u===0&&await j.buildV0(),j.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,amountIn:i,config:o,txVersion:s,computeBudgetConfig:a}=t,u=await this.getAmmPoolKeys(n.id),[c,l,m]=[new je(n.mintA.address),new je(n.mintB.address),new je(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:d}=this.scope,p=await d.getCreatedTokenAccount({mint:m,associatedOnly:!1});p||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",d.tokenAccounts);let y=await d.getCreatedTokenAccount({mint:c}),f=await d.getCreatedTokenAccount({mint:l}),b=this.createTxBuilder(),{bypassAssociatedCheck:g,checkCreateATAOwner:P}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},o),B=await d.handleTokenAccount({side:"out",amount:0,mint:c,tokenAccount:y,bypassAssociatedCheck:g,checkCreateATAOwner:P}),{tokenAccount:A}=B,T=Ie(B,["tokenAccount"]);b.addInstruction(T);let x=await d.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:g,checkCreateATAOwner:P}),{tokenAccount:h}=x,I=Ie(x,["tokenAccount"]);return b.addInstruction(I),b.addInstruction({instructions:[Go({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:p,baseTokenAccount:A,quoteTokenAccount:h,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity]}),b.addCustomComputeBudget(a),s===0?await b.buildV0():b.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,tokenProgram:m=wi,checkCreateATAOwner:d=!0,getEphemeralSigners:p,txVersion:y}){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 f=this.createTxBuilder();f.addCustomComputeBudget(c);let b={};for(let te of this.scope.account.tokenAccountRawInfos)(b[te.accountInfo.mint.toString()]===void 0||be(this.scope.ownerPubKey,te.accountInfo.mint,wi).publicKey.equals(te.pubkey))&&(b[te.accountInfo.mint.toString()]=te.pubkey);let g=b[t.lpMint.address];if(g===void 0)throw Error("find lp account error in trade accounts");let P=i.add(a!=null?a:new ot(0)),A=t.mintA.address===pe.WSOL.mint.toString(),T=t.mintB.address===pe.WSOL.mint.toString(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:wi,mint:new je(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!0,checkCreateATAOwner:d});if(f.addInstruction(I||{}),h===void 0)throw new Error("base token account not found");let{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:wi,mint:new je(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!0,checkCreateATAOwner:d});if(f.addInstruction(x||{}),B===void 0)throw new Error("quote token account not found");if(b[t.mintA.address]=h,b[t.mintB.address]=B,s!==void 0&&!(a!=null&&a.isZero())){let te=[];for(let Dt of s.rewardInfos){let Rr=Dt.mint.address===pe.WSOL.mint.toString();if(b[Dt.mint.address])te.push(b[Dt.mint.address]);else{let{account:En,instructionParams:ys}=await this.scope.account.getOrCreateTokenAccount({mint:new je(Dt.mint.address),tokenProgram:m,owner:this.scope.ownerPubKey,skipCloseAccount:!Rr,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:d});En||this.logAndCreateError("farm reward account not found:",Dt.mint.address),ys&&f.addInstruction(ys),te.push(En)}}let ie=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],ft={amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:ie,lpAccount:g,rewardAccounts:te},Vn=At[s.programId],Si=Vn===6?ar(ft):Vn===5?ur(ft):cr(ft),Ki={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};f.addInstruction({instructions:[Si],instructionTypes:[Ki[Vn]]})}let K=await this.getAmmPoolKeys(t.id),M=Go({poolInfo:t,poolKeys:K,userKeys:{lpTokenAccount:g,baseTokenAccount:h,quoteTokenAccount:B,owner:this.scope.ownerPubKey},amountIn:P});f.addInstruction({instructions:[M],instructionTypes:[t.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity],lookupTableAddress:K.lookupTableAccount?[K.lookupTableAccount]:[]});let[F,H]=t.mintA.address===n.mintA.address?[h,B]:[B,h],v=await this.scope.clmm.getClmmPoolKeys(t.id),j=await Se.openPositionFromBaseInstructions(D(N({poolInfo:n,poolKeys:v,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:F,tokenAccountB:H},withMetadata:"create"},o),{base:u,getEphemeralSigners:p}));return f.addInstruction({instructions:[...j.instructions],signers:j.signers,instructionTypes:[...j.instructionTypes],lookupTableAddress:v.lookupTableAccount?[v.lookupTableAccount]:[]}),y===0?f.sizeCheckBuildV0():f.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:o,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var H;let b=c.feePayer||((H=this.scope.owner)==null?void 0:H.publicKey),g=c.useSOLBalance&&i.mint.equals(Bu),P=c.useSOLBalance&&o.mint.equals(Bu),A=this.createTxBuilder(),{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:i.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(h||{});let{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:P?{payer:b,amount:a}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:l,checkCreateATAOwner:m});if(A.addInstruction(B||{}),T===void 0||I===void 0)throw Error("you don't has some token account");let x=xu({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:o.mint,baseDecimals:i.decimals,quoteDecimals:o.decimals,programId:t,marketProgramId:n.programId}),K={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:M,instructionType:F}=tu(D(N({},K),{userWallet:this.scope.ownerPubKey,userCoinVault:T,userPcVault:I,userLpVault:be(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[M],instructionTypes:[F]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:K}})}async getCreatePoolFee({programId:t}){let n=es({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return za.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:o,slippage:s}){if(i!==t.mintA.address&&i!==t.mintB.address)throw new Error("toke not match");if(o!==t.mintA.address&&o!==t.mintB.address)throw new Error("toke not match");let{baseReserve:a,quoteReserve:u}=t,c=[a,u],l=i==t.mintA.address?"base":"quote";l==="quote"&&c.reverse();let[m,d]=c,p=t.programId===to.toBase58(),y;if(p)y=new E(d.toString()).div(m.toString());else{let x=Za(this.stableLayout.stableModelData,a.toNumber(),u.toNumber(),!1);l==="quote"?y=new E(1e6).div(x*1e6):y=new E(x*1e6).div(1e6)}let f=n,b=new ot(0),g=new ot(0);if(!f.isZero())if(p){g=Yt(f.mul(hu),Tu);let x=f.sub(g),K=m.add(x);b=d.mul(x).div(K)}else{g=f.mul(new ot(2)).div(new ot(1e4));let x=f.sub(g);l==="quote"?b=new ot(Qa(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber())):b=new ot(ja(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber()))}let P=new ot(new E(b.toString()).mul(1-s).toFixed(0)),A=b,T=P,h=new E(b.toString()).div(new E(f.sub(g).toString()).toFixed(0));!f.isZero()&&!b.isZero()&&(h=new E(b.toString()).div(f.sub(g).toString()));let I=y.sub(h).div(y).mul(100);return{amountOut:A,minAmountOut:T,currentPrice:y,executionPrice:h,priceImpact:I,fee:g}}async swap({poolInfo:t,amountIn:n,amountOut:i,inputMint:o,fixedSide:s,txVersion:a,computeBudgetConfig:u}){let c=this.createTxBuilder(),[l,m]=o===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],d=await this.scope.account.getCreatedTokenAccount({mint:new je(l.address),programId:new je(l.programId),associatedOnly:!1}),p=await this.scope.account.getCreatedTokenAccount({mint:new je(m.address),programId:new je(m.programId),associatedOnly:!1}),T=await this.scope.account.handleTokenAccount({side:"in",amount:n,mint:new je(l.address),tokenAccount:d,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:y}=T,f=Ie(T,["tokenAccount"]);c.addInstruction(f);let h=await this.scope.account.handleTokenAccount({side:"out",amount:0,mint:new je(m.address),tokenAccount:p,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:b}=h,g=Ie(h,["tokenAccount"]);c.addInstruction(g);let P=await this.getAmmPoolKeys(t.id),A=4;return t.pooltype.includes("StablePool")&&(A=5),c.addInstruction({instructions:[mi({version:A,poolKeys:P,userKeys:{tokenAccountIn:y,tokenAccountOut:b,owner:this.scope.ownerPubKey},amountIn:n,amountOut:i,fixedSide:s})],instructionTypes:[A===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),c.addCustomComputeBudget(u),c.versionBuild({txVersion:a})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t){let n=await this.scope.connection.getMultipleAccountsInfo(t.map(c=>new je(c))),i={},o=[];for(let c=0;c<t.length;c++){let l=n[c];if(l===null)throw Error("fetch pool info error: "+String(t[c]));let m=Wo.decode(l.data);i[String(t[c])]=m,o.push(m.baseVault,m.quoteVault)}let s={},a=await this.scope.connection.getMultipleAccountsInfo(o.map(c=>new je(c)));for(let c=0;c<o.length;c++){let l=a[c];if(l===null)throw Error("fetch vault info error: "+o[c]);s[String(o[c])]=new ot(fp.decode(l.data).amount.toString())}let u={};for(let[c,l]of Object.entries(i)){let m=s[l.baseVault.toString()].sub(l.baseNeedTakePnl),d=s[l.quoteVault.toString()].sub(l.quoteNeedTakePnl);u[c]=D(N({},l),{baseReserve:m,quoteReserve:d,poolPrice:new E(d.toString()).div(new E(10).pow(l.quoteDecimal.toString())).div(new E(m.toString()).div(new E(10).pow(l.baseDecimal.toString())))})}return u}};import{PublicKey as ue}from"@solana/web3.js";import mt from"bn.js";var Ar=class extends Be{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var P;let{programId:t,owner:n=((P=this.scope.owner)==null?void 0:P.publicKey)||ue.default,mint1:i,mint2:o,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new mt(new ue(i.address).toBuffer()).gt(new mt(new ue(o.address).toBuffer()))?[o,i,new E(1).div(a)]:[i,o,a],b=Z.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await Se.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(c),d.versionBuild({txVersion:m,extInfo:{address:D(N({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:u.toString(),vault:{A:g.address.mintAVault.toString(),B:g.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:N({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:u.toString(),programId:t.toString(),price:f.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:[]}},fu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!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,P=n.useSOLBalance&&e.mintA.address===ne.toString(),A=n.useSOLBalance&&e.mintB.address===ne.toString(),[T,h]=s==="MintA"?[a,u]:[u,a],{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||T.isZero()?{payer:this.scope.ownerPubKey,amount:T}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:c,checkCreateATAOwner:l});I&&(b=I),f.addInstruction(B||{});let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||h.isZero()?{payer:this.scope.ownerPubKey,amount:h}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(K||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let M=t||await this.getClmmPoolKeys(e.id),F=await Se.openPositionFromBaseInstructions({poolInfo:e,poolKeys:M,ownerInfo:D(N({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(F),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:F.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:o,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===ne.toBase58(),P=n.useSOLBalance&&e.mintB.address===ne.toBase58(),{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(T||{});let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:c,checkCreateATAOwner:l});h&&(b=h),y.addInstruction(I||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=t||await this.getClmmPoolKeys(e.id),x=await Se.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:i,amountMaxB:o,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,ownerPosition:n,amountMaxA:i,amountMaxB:o,liquidity:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===ne.toString(),b=a.useSOLBalance&&t.mintB.address===ne.toString(),{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(P||{});let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(T||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let h=await this.getClmmPoolKeys(t.id),I=Se.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:h,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},liquidity:s,amountMaxA:i,amountMaxB:o});return d.addInstruction(I),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:I.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:i,baseAmount:o,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===ne.toString(),b=a.useSOLBalance&&t.mintB.address===ne.toString(),{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(i==="MintA"?o:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?o:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(P||{});let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(i==="MintA"?s:o).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(T||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let h=await this.getClmmPoolKeys(t.id),I=Se.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:h,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:i,baseAmount:o,otherAmountMax:s});return d.addInstruction(I),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:I.address}})}async decreaseLiquidity(e){let{poolInfo:t,ownerPosition:n,ownerInfo:i,amountMinA:o,amountMinB:s,liquidity:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let d=this.createTxBuilder(),p=i.useSOLBalance&&t.mintA.address===ne.toString(),y=i.useSOLBalance&&t.mintB.address===ne.toString(),f,b,{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!p,associatedOnly:p?!1:u,checkCreateATAOwner:c});f=g,P&&d.addInstruction(P);let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:c});b=A,T&&d.addInstruction(T);let h=[];for(let K of t.rewardDefaultInfos){let M=i.useSOLBalance&&K.mint.address===ne.toString(),F;if(K.mint.address===t.mintA.address)F=f;else if(K.mint.address===t.mintB.address)F=b;else{let{account:H,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(K.mint.programId),mint:new ue(K.mint.address),notUseTokenAccount:M,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!M,associatedOnly:M?!1:u,checkCreateATAOwner:c});F=H,v&&d.addInstruction(v)}h.push(F)}!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=await this.getClmmPoolKeys(t.id),B=await Se.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:h},liquidity:a,amountMinA:o,amountMinB:s});d.addInstruction({instructions:B.instructions,instructionTypes:[V.ClmmDecreasePosition]});let x=N({},B.address);if(i.closePosition){let K=await Se.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});d.addInstruction({endInstructions:K.instructions,endInstructionTypes:K.instructionTypes}),x=N(N({},x),K.address)}return d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:x}})}async closePosition({poolInfo:e,ownerPosition:t,txVersion:n}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),o=await this.getClmmPoolKeys(e.id),s=Se.closePositionInstructions({poolInfo:e,poolKeys:o,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:t});return i.addInstruction(s).versionBuild({txVersion:n,extInfo:{address:s.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.address.toString()===ne.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(n.mint.address),mint:new ue(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new E(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:i,checkCreateATAOwner:o});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Se.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ue(n.mint.programId),mint:new ue(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:J.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){for(let l of n)l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let u=this.createTxBuilder(),c={};for(let l of n){let m=t.useSOLBalance&&l.mint.address===ne.toString(),d=l.perSecond.mul(l.endTime-l.openTime),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(l.mint.programId),mint:new ue(l.mint.address),notUseTokenAccount:!!m,skipCloseAccount:!m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new E(d.toFixed(0)).gte(d)?d.toFixed(0):d.add(1).toFixed(0))}:void 0,associatedOnly:m?!1:i,checkCreateATAOwner:o});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),b=Se.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{programId:new ue(l.mint.programId),mint:new ue(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:J.decimalToX64(l.perSecond)}});c=N(N({},c),b.address),u.addInstruction(b)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.equals(ne),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new E(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:c?!1:i,checkCreateATAOwner:o});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Se.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:J.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){let u=this.createTxBuilder(),c={};for(let l of n){l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let m=t.useSOLBalance&&l.mint.address===ne.toString(),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(l.mint.programId),mint:new ue(l.mint.address),notUseTokenAccount:m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new mt(new E(l.perSecond.sub(l.endTime-l.openTime).toFixed(0)).gte(l.perSecond.sub(l.endTime-l.openTime))?l.perSecond.sub(l.endTime-l.openTime).toFixed(0):l.perSecond.sub(l.endTime-l.openTime).add(1).toFixed(0))}:void 0,associatedOnly:m?!1:i,checkCreateATAOwner:o});p&&u.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),f=Se.setRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:new ue(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:J.decimalToX64(l.perSecond)}});u.addInstruction(f),c=N(N({},c),f.address)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:o=!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(),u=t.useSOLBalance&&n.equals(ne),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(s.mint.programId),mint:n,notUseTokenAccount:u,owner:this.scope.ownerPubKey,skipCloseAccount:!u,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:u?!1:i,checkCreateATAOwner:o});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Se.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1}){let s=this.createTxBuilder(),a={};for(let u of n){let c=e.rewardDefaultInfos.find(f=>f.mint.address===u.toString());if(!c){this.logAndCreateError("reward mint error","not found reward mint",u);continue}let l=t.useSOLBalance&&u.equals(ne),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(c.mint.programId),mint:u,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:i,checkCreateATAOwner:o});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Se.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=N(N({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,inputMint:t,amountIn:n,amountOutMin:i,priceLimit:o,observationId:s,ownerInfo:a,remainingAccounts:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,txVersion:m}){let d=this.createTxBuilder(),p=a.useSOLBalance&&e.mintA.address===ne.toBase58(),y=a.useSOLBalance&&e.mintB.address===ne.toBase58(),f;!o||o.equals(new E(0))?f=t.toString()===e.mintA.address?Kt.add(new mt(1)):Ct.sub(new mt(1)):f=Z.priceToSqrtPriceX64(o,e.mintA.decimals,e.mintB.decimals);let b;if(!b){let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:c,checkCreateATAOwner:l});b=A,T&&d.addInstruction(T)}let g;if(!g){let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:c,checkCreateATAOwner:l});g=A,T&&d.addInstruction(T)}(!b||!g)&&this.logAndCreateError("user do not have token account",this.scope.account.tokenAccountRawInfos);let P=await this.getClmmPoolKeys(e.id);return d.addInstruction(Se.makeSwapBaseInInstructions({poolInfo:e,poolKeys:P,observationId:s,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},inputMint:new ue(t),amountIn:n,amountOutMin:i,sqrtPriceLimitX64:f,remainingAccounts:u})),d.versionBuild({txVersion:m})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)i?be(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(c[m.accountInfo.mint.toString()]=m.pubkey):c[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(T=>!T.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===ne.toString(),y=n.useSOLBalance&&d.mintB.address===ne.toString(),f=c[d.mintA.address];if(!f){let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ue(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:i,checkCreateATAOwner:o});f=A,T&&l.addInstruction(T)}let b=c[d.mintB.address];if(!b){let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ue(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:i,checkCreateATAOwner:o});b=A,T&&l.addInstruction(T)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let T=n.useSOLBalance&&A.mint.address===ne.toString(),h=c[A.mint.address];if(!h){let{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(A.mint.programId),mint:new ue(A.mint.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,skipCloseAccount:!T,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:T?!1:i});h=I,B&&l.addInstruction(B)}c[A.mint.address]=h,g.push(h)}let P=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let T=Se.decreaseLiquidityInstructions({poolInfo:d,poolKeys:P,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new mt(0),amountMinA:new mt(0),amountMinB:new mt(0)});l.addInstruction(T)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(dr(e).publicKey);return t?gu.decode(t.data).whitelistMints.filter(i=>!i.equals(ue.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new mt(1))).map(s=>ct(new ue(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return i.forEach(s=>{if(!s)return;let a=gi.decode(s.data);o.push(a)}),o}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e}){let t=await this.scope.connection.getMultipleAccountsInfo(e.map(i=>new ue(i))),n={};for(let i=0;i<e.length;i++){let o=t[i];if(o===null)throw Error("fetch pool info error: "+String(e[i]));let s=bi.decode(o.data),a=Z.sqrtPriceX64ToPrice(s.sqrtPriceX64,s.mintDecimalsA,s.mintDecimalsB).toNumber();n[String(e[i])]=D(N({},s),{currentPrice:a})}return n}};import{PublicKey as U}from"@solana/web3.js";import{NATIVE_MINT as Pi,TOKEN_PROGRAM_ID as en,AccountLayout as Kp}from"@solana/spl-token";var yp=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),bp=Buffer.from("amm_config","utf8"),gp=Buffer.from("pool","utf8"),wp=Buffer.from("pool_lp_mint","utf8"),Ap=Buffer.from("pool_vault","utf8"),Pp=Buffer.from("observation","utf8");function kp(r){return se([yp],r)}function hp(r,e){return se([bp,xp(e)],r)}function Tp(r,e,t,n){return se([gp,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Ip(r,e){return se([wp,e.toBuffer()],r)}function Su(r,e,t){return se([Ap,e.toBuffer(),t.toBuffer()],r)}function Ai(r,e){return se([Pp,e.toBuffer()],r)}function xp(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function Ku({programId:r,mintA:e,mintB:t}){let n=hp(r,0).publicKey,i=kp(r).publicKey,o=Tp(r,n,e,t).publicKey,s=Ip(r,o).publicKey,a=Su(r,o,e).publicKey,u=Su(r,o,t).publicKey,c=Ai(r,o).publicKey;return{poolId:o,configId:n,authority:i,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as Pr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ts,TOKEN_2022_PROGRAM_ID as Cu,ASSOCIATED_TOKEN_PROGRAM_ID as Bp}from"@solana/spl-token";var Sp=ae("Raydium_cpmm"),kr={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 Ru(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P,A){let T=L([w("amountMaxA"),w("amountMaxB"),w("openTime")]),h=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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:ts,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Bp,isSigner:!1,isWritable:!1},{pubkey:Wr,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1}],I=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:P,openTime:A},I),new Pr({keys:h,programId:r,data:Buffer.from([...kr.initialize,...I])})}function Lu(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y){let f=L([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:ts,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Sp.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Pr({keys:b,programId:r,data:Buffer.from([...kr.deposit,...g])})}function Ou(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y){let f=L([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:ts,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Es,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Pr({keys:b,programId:r,data:Buffer.from([...kr.withdraw,...g])})}function Nu(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y,f){let b=L([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},P),new Pr({keys:g,programId:r,data:Buffer.from([...kr.swapBaseInput,...P])})}function Mu(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y,f){let b=L([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},P),new Pr({keys:g,programId:r,data:Buffer.from([...kr.swapBaseOutput,...P])})}import Ze from"bn.js";var _u=L([fe(8),_("bump"),qe("disableCreatePool"),Bt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),S("protocolOwner"),S("fundOwner"),q(w(),16)]),Vu=L([fe(8),S("configId"),S("poolCreator"),S("vaultA"),S("vaultB"),S("mintLp"),S("mintA"),S("mintB"),S("mintProgramA"),S("mintProgramB"),S("observationId"),_("bump"),_("status"),_("lpDecimals"),_("mintDecimalA"),_("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),q(w(),32)]);var hr=class extends Be{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 this.scope.connection.getMultipleAccountsInfo(e.map(m=>new U(m))),i={},o=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d===null)throw Error("fetch pool info error: "+String(e[m]));let p=Vu.decode(d.data);i[String(e[m])]=p,o.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...o],d=await this.scope.connection.getMultipleAccountsInfo(m.map(p=>new U(p)));for(let p=0;p<m.length;p++){let y=d[p];if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=_u.decode(y.data)}}let u={},c=await this.scope.connection.getMultipleAccountsInfo(s.map(m=>new U(m)));for(let m=0;m<s.length;m++){let d=c[m];if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new Ze(Kp.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=D(N({},d),{baseReserve:p,quoteReserve:y,configInfo:a[d.configId.toString()],poolPrice:new E(y.toString()).div(new E(10).pow(d.mintDecimalB)).div(new E(p.toString()).div(new E(10).pow(d.mintDecimalA)))})}return l}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:i,associatedOnly:o=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=Ie(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var H,v,j;let d=i.feePayer||((H=this.scope.owner)==null?void 0:H.publicKey),p=new Ze(new U(c.mintA.address).toBuffer()).lte(new Ze(new U(c.mintB.address).toBuffer())),[y,f]=p?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=p?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],P=i.useSOLBalance&&y.address===Pi.toBase58(),A=i.useSOLBalance&&f.address===Pi.toBase58(),[T,h]=[new U(y.address),new U(f.address)],I=this.createTxBuilder(),{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:T,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:d,amount:b}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:o,checkCreateATAOwner:s});I.addInstruction(x||{});let{account:K,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({mint:new U(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:d,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:o,checkCreateATAOwner:s});if(I.addInstruction(M||{}),B===void 0||K===void 0)throw Error("you don't has some token account");let F=Ku({programId:e,mintA:T,mintB:h});return I.addInstruction({instructions:[Ru(e,this.scope.ownerPubKey,F.configId,F.authority,F.poolId,T,h,F.lpMint,B,K,be(this.scope.ownerPubKey,F.lpMint).publicKey,F.vaultA,F.vaultB,t,new U((v=y.programId)!=null?v:en),new U((j=f.programId)!=null?j:en),F.observationId,b,g,n)],instructionTypes:[V.CpmmCreatePool]}),I.addCustomComputeBudget(u),I.versionBuild({txVersion:a,extInfo:{address:D(N({},F),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,inputAmount:n,baseIn:i,slippage:o,computeResult:s,computeBudgetConfig:a,config:u,txVersion:c}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),n.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:n.toString()});let{account:l}=this.scope,{bypassAssociatedCheck:m,checkCreateATAOwner:d}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),p=s?void 0:await this.getRpcPoolInfo(t.id),{liquidity:y,inputAmountFee:f,anotherAmount:b}=s||this.computePairAmount({poolInfo:D(N({},t),{lpAmount:new E(p.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:p.baseReserve,quoteReserve:p.quoteReserve,slippage:new _e(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new E(n.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),g=b.amount,P=t.mintA.address===Pi.toString(),A=t.mintB.address===Pi.toString(),T=this.createTxBuilder(),[h,I]=[new U(t.mintA.address),new U(t.mintB.address)],{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(i?n:g).isZero()?{payer:this.scope.ownerPubKey,amount:i?n:g}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:d});T.addInstruction(x||{});let{account:K,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(i?g:n).isZero()?{payer:this.scope.ownerPubKey,amount:i?g:n}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:d});T.addInstruction(M||{}),!B&&!K&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let F=await l.getCreatedTokenAccount({mint:new U(t.lpMint.address)}),ie=await l.handleTokenAccount({side:"out",amount:0,mint:new U(t.lpMint.address),tokenAccount:F,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:H}=ie,v=Ie(ie,["tokenAccount"]);T.addInstruction(v);let j=await this.getCpmmPoolKeys(t.id),te=new _e(new Ze(1)).sub(o);return T.addInstruction({instructions:[Lu(new U(t.programId),this.scope.ownerPubKey,new U(j.authority),new U(t.id),H,B,K,new U(j.vault.A),new U(j.vault.B),h,I,new U(t.lpMint.address),s?s==null?void 0:s.liquidity:te.mul(y).quotient,i?f.amount:g,i?g:f.amount)],instructionTypes:[V.CpmmAddLiquidity],lookupTableAddress:j.lookupTableAccount?[j.lookupTableAccount]:[]}),T.addCustomComputeBudget(a),T.versionBuild({txVersion:c})}async withdrawLiquidity(e){var H,v;let{poolInfo:t,lpAmount:n,slippage:i,computeBudgetConfig:o,txVersion:s}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let a=new _e(new Ze(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[c,l]=[a.mul(n.mul(u.baseReserve).div(u.lpAmount)).quotient,a.mul(n.mul(u.quoteReserve).div(u.lpAmount)).quotient],m=await this.scope.fetchEpochInfo(),[d,p]=[Pe(c,t.mintA.extensions.feeConfig,m,!0),Pe(l,t.mintB.extensions.feeConfig,m,!0)],{account:y}=this.scope,f=this.createTxBuilder(),[b,g]=[new U(t.mintA.address),new U(t.mintB.address)],P=b.equals(ne),A=g.equals(ne),T,h,{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});T=I,B&&f.addInstruction(B);let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});h=x,K&&f.addInstruction(K),(!T||!h)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",y.tokenAccounts);let M=await y.getCreatedTokenAccount({mint:new U(t.lpMint.address)});M||this.logAndCreateError("cannot found lp token account","tokenAccounts",y.tokenAccounts);let F=await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[Ou(new U(t.programId),this.scope.ownerPubKey,new U(F.authority),new U(t.id),M,T,h,new U(F.vault.A),new U(F.vault.B),b,g,new U(t.lpMint.address),n,c.sub((H=d.fee)!=null?H:new Ze(0)),l.sub((v=p.fee)!=null?v:new Ze(0)))],instructionTypes:[V.CpmmWithdrawLiquidity],lookupTableAddress:F.lookupTableAccount?[F.lookupTableAccount]:[]}),f.addCustomComputeBudget(o),f.versionBuild({txVersion:s})}async swap(e){var h,I,K,M,F,H;let{poolInfo:t,baseIn:n,swapResult:i,slippage:o=0,config:s,computeBudgetConfig:a,txVersion:u}=e,{bypassAssociatedCheck:c,checkCreateATAOwner:l}=N({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),m=this.createTxBuilder(),[d,p]=[new U(t.mintA.address),new U(t.mintB.address)],y=await this.scope.account.getCreatedTokenAccount({programId:new U((h=t.mintA.programId)!=null?h:en),mint:d,associatedOnly:!1}),f=await this.scope.account.getCreatedTokenAccount({programId:new U((I=t.mintB.programId)!=null?I:en),mint:p,associatedOnly:!1});i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new Ze((1-o)*1e4)).div(new Ze(1e4));let B=await this.scope.account.handleTokenAccount({side:n?"in":"out",amount:n?i.sourceAmountSwapped:i.destinationAmountSwapped,programId:new U(t.mintA.programId),mint:d,tokenAccount:y,bypassAssociatedCheck:c,checkCreateATAOwner:l}),{tokenAccount:b}=B,g=Ie(B,["tokenAccount"]);m.addInstruction(g);let x=await this.scope.account.handleTokenAccount({side:n?"out":"in",amount:n?i.destinationAmountSwapped:i.sourceAmountSwapped,programId:new U(t.mintB.programId),mint:p,tokenAccount:f,bypassAssociatedCheck:c,checkCreateATAOwner:l}),{tokenAccount:P}=x,A=Ie(x,["tokenAccount"]);m.addInstruction(A),!b&&!P&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getCpmmPoolKeys(t.id);return m.addInstruction({instructions:[n?Nu(new U(t.programId),this.scope.ownerPubKey,new U(T.authority),new U(T.config.id),new U(t.id),b,P,new U(T.vault.A),new U(T.vault.B),new U((K=t.mintA.programId)!=null?K:en),new U((M=t.mintB.programId)!=null?M:en),d,p,Ai(new U(t.programId),new U(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):Mu(new U(t.programId),this.scope.ownerPubKey,new U(T.authority),new U(T.config.id),new U(t.id),P,b,new U(T.vault.B),new U(T.vault.A),new U((F=t.mintB.programId)!=null?F:en),new U((H=t.mintA.programId)!=null?H:en),p,d,Ai(new U(t.programId),new U(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[n?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut]}),m.addCustomComputeBudget(a),m.versionBuild({txVersion:u})}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:o,epochInfo:s,baseIn:a}){var P,A,T,h,I,B,x,K;let u=1-Number(o.toSignificant())/100,c=new Ze(new E(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=Pe(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((P=l.fee)!=null?P:new Ze(0)),d=new Ze(new E(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,E.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.toString(),"amountInFee:",(T=(A=l.fee)==null?void 0:A.toString())!=null?T:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${o.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:Ke,fee:void 0,expirationTime:void 0};if(!m.isZero()){let M=Cp(y,t,n,d);this.logDebug("lpAmountData:",{amountA:M.amountA.toString(),amountB:M.amountB.toString()}),f=Pe(M[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new _e(new Ze(1)).add(o),g=Pe(b.mul(f.amount.sub((h=f.fee)!=null?h:new Ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(B=(I=f.fee)==null?void 0:I.toString())!=null?B:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(K=(x=g.fee)==null?void 0:x.toString())!=null?K:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function Cp(r,e,t,n){let i=r.mul(e).div(n);!i.isZero()&&!r.mul(e).mod(n).isZero()&&(i=i.add(new Ze(1)));let o=r.mul(t).div(n);return!o.isZero()&&!r.mul(t).mod(n).isZero()&&(o=o.add(new Ze(1))),{amountA:i,amountB:o}}var Tr=class extends Be{constructor(e){super(e)}static getAddLiquidityDefaultPool({addLiquidityPools:e,poolInfosCache:t}){if(e.length===0)return;if(e.length===1||(e.sort((i,o)=>o.version-i.version),e[0].version!==e[1].version))return e[0];let n=e.filter(i=>i.version===e[0].version);return n.sort((i,o)=>this.comparePoolSize(i,o,t)),n[0]}static comparePoolSize(e,t,n){let i=n[e.id],o=n[t.id];return i===void 0?1:o===void 0?-1:e.baseMint===t.baseMint?i.baseReserve.sub(o.baseReserve).gte(Ke)?-1:1:i.baseReserve.sub(o.quoteReserve).gte(Ke)?-1:1}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(ne));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}=e,i=await this.getWSolAccounts(),o=this.createTxBuilder();o.addCustomComputeBudget(e.computeBudgetConfig);let s=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});o.addInstruction(s);let a=G(t);for(let u=0;u<i.length;u++)a.gte(i[u].amount)?(o.addInstruction({instructions:[_t({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),a.sub(i[u].amount)):(o.addInstruction({instructions:[_t({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),$n({destination:s.addresses.newAccount,source:i[u].publicKey,amount:a,owner:this.scope.ownerPubKey,tokenProgram:n}));return o.build()}async wrapWSol(e,t){let n=await this.getWSolAccounts(),i=this.createTxBuilder(),o=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(o),n.length&&i.addInstruction({instructions:[$n({destination:n[0].publicKey,source:o.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[_t({tokenAccount:o.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.build()}};import{TOKEN_PROGRAM_ID as Rp}from"@solana/spl-token";import{PublicKey as Lp,Transaction as ns,TransactionInstruction as Op}from"@solana/web3.js";import Eu from"bn.js";var Je=class extends Be{static getPdaPoolId(e,t){return se([Je.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return se([Je.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Eu(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:o}){if(n.length===0)return[];let s=n.map(l=>Je.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Je.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Je.getPdaOwnerId(t,m,i,l).publicKey));let u=await It(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=u[d],b=u[n.length+l];if(!(f&&b)||f.data.length!==Je.POOL_LAYOUT.span||b.data.length!==Je.OWNER_LAYOUT.span)continue;let g=Je.POOL_LAYOUT.decode(f.data),P=Je.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),T=g.endTime.toNumber(),h=P.tokenInfo.map(x=>x.debtAmount.gt(new Eu(0))).filter(x=>!x).length!==3,I=o>A&&o<T&&g.status===1,B=h&&I;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:P.lpAmount,project:Je.VERSION_PROJECT[m],openTime:A,endTime:T,canClaim:B,canClaimErrorType:h?I?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,K)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:P.tokenInfo[K].debtAmount.add(P.tokenInfo[K].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o=[];for(let u of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(pe.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(pe.WSOL.mint),associatedOnly:u.mintAddress.equals(pe.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),o.push(c)}n.addInstruction({instructions:[Je.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:o}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(pe.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(pe.WSOL.mint),associatedOnly:m.mintAddress.equals(pe.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(o[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[Je.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:i,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return Hr(u,[i,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ns().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ns().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ns().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=L([]),o=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:Rp,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Op({keys:o,programId:e,data:a})}},dt=Je;dt.CLAIMED_NUM=3,dt.POOL_LAYOUT=L([fe(8),_("bump"),_("status"),w("openTime"),w("endTime"),S("ammId"),q(L([_("mintDecimals"),S("mintAddress"),S("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),Je.CLAIMED_NUM,"tokenInfo"),q(w(),10,"padding")]),dt.OWNER_LAYOUT=L([fe(8),_("bump"),_("version"),S("poolId"),S("owner"),w("lpAmount"),q(L([S("mintAddress"),w("debtAmount"),w("claimedAmount")]),Je.CLAIMED_NUM,"tokenInfo"),q(w(),4,"padding")]),dt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Lp(e)),dt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},dt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Ir}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as qu}from"@solana/spl-token";import xr from"bn.js";import{TransactionInstruction as Mp,SYSVAR_RENT_PUBKEY as _p}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fu}from"@solana/spl-token";import{createInitializeAccountInstruction as vu}from"@solana/spl-token";import{SystemProgram as bn,Transaction as Wu}from"@solana/web3.js";function Np(r="accountFlags"){let e=new ri(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 rs=L([fe(5),Np("accountFlags"),S("ownAddress"),w("vaultSignerNonce"),S("baseMint"),S("quoteMint"),S("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),S("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),S("requestQueue"),S("eventQueue"),S("bids"),S("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]);function Vp({programId:r,marketInfo:e}){let t=L([_("version"),ze("instruction"),w("baseLotSize"),w("quoteLotSize"),Bt("feeRateBps"),w("vaultSignerNonce"),w("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:_p,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}:[]),i=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},i),new Mp({keys:n,programId:r,data:i})}async function Du({connection:r,wallet:e,marketInfo:t}){let n=new Wu,i=await r.getMinimumBalanceForRentExemption(165);n.add(bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:Fu}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:Fu}),vu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),vu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let o=new Wu;return o.add(bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(rs.span),space:rs.span,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(5120+12),space:5120+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(262144+12),space:262144+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),Vp({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:[V.CreateAccount,V.CreateAccount,V.InitAccount,V.InitAccount]},{transaction:o,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.InitMarket]}]}var Nn=class extends Be{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:o,txVersion:s,computeBudgetConfig:a}){let u=this.scope.ownerPubKey,c=Ye({fromPublicKey:u,programId:o}),l=Ye({fromPublicKey:u,programId:o}),m=Ye({fromPublicKey:u,programId:o}),d=Ye({fromPublicKey:u,programId:o}),p=Ye({fromPublicKey:u,programId:o}),y=Ye({fromPublicKey:u,programId:qu}),f=Ye({fromPublicKey:u,programId:qu}),b=0,g=new xr(100);function P(){let K=new xr(0);for(;;)try{return{vaultOwner:Ir.createProgramAddressSync([c.publicKey.toBuffer(),K.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:K}}catch{if(K.iaddn(1),K.gt(new xr(25555)))throw Error("find vault owner error")}}let{vaultOwner:A,vaultSignerNonce:T}=P(),h=new xr(Math.round(10**e.decimals*n)),I=new xr(Math.round(n*10**t.decimals*i));if(h.eq(Ke))throw Error("lot size is too small");if(I.eq(Ke))throw Error("tick size or lot size is too small");let B=await Du({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:c,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:A,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:T,baseLotSize:h,quoteLotSize:I}}),x=this.createTxBuilder();x.addInstruction({instructions:B[0].transaction.instructions,signers:B[0].signer});for await(let K of B.slice(1,B.length))x.addInstruction({instructions:K.transaction.instructions,signers:K.signer,instructionTypes:K.instructionTypes});return s===0?x.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Ir(e.mint),quoteMin:new Ir(t.mint)}}):x.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Ir(e.mint),quoteMin:new Ir(t.mint)}})}};import{PublicKey as Sr}from"@solana/web3.js";import{TransactionInstruction as os,SYSVAR_CLOCK_PUBKEY as Ep}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ss}from"@solana/spl-token";var is=L([_("instruction"),ma("amount")]),Br=L([_("instruction")]);function CB({programId:r,amount:e,instructionKeys:t}){let n=[{pubkey:Wr,isSigner:!1,isWritable:!1},{pubkey:ss,isSigner:!1,isWritable:!1},{pubkey:nt,isSigner:!1,isWritable:!1},{pubkey:Di,isSigner:!1,isWritable:!1},...Object.entries(t).map(([o,s])=>({pubkey:s,isSigner:o==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(o)}))],i=Buffer.alloc(is.span);return is.encode({instruction:1,amount:Number(e)},i),new os({keys:n,programId:r,data:i})}function ki({programId:r},e){let t=[{pubkey:ss,isSigner:!1,isWritable:!1},{pubkey:Di,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,o])=>({pubkey:o,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(Br.span);return Br.encode({instruction:2},n),new os({keys:t,programId:r,data:n})}function as(r){let{poolConfig:e,userKeys:t,side:n}=r,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,o=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Br.span);Br.encode({instruction:2},s);let a=[{pubkey:ss,isWritable:!1,isSigner:!1},{pubkey:Ep,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new os({programId:e.programId,keys:a,data:s})}import Uu from"bn.js";var Fp={[jn.IDO_PROGRAM_ID_V1.toString()]:1,[jn.IDO_PROGRAM_ID_V2.toString()]:2,[jn.IDO_PROGRAM_ID_V3.toString()]:3,[jn.IDO_PROGRAM_ID_V4.toString()]:4},Mn=class extends Be{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:o}){let s=this.createTxBuilder(),a=Fp[t.programId];a||this.logAndCreateError("invalid version",a);let u=ye(t),[c,l]=[!new Uu(e.coin).isZero(),!new Uu(e.pc).isZero()],m=u.projectInfo.mint.address.equals(ne),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:i});!d&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&p&&s.addInstruction(p);let y=u.buyInfo.mint.address.equals(ne),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:i});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:[...c?[ki({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Sr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[ki({programId:new Sr(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Sr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[ki({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Sr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});let g={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new Sr(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[as(D(N({},g),{side:"base"}))]:[],...l?[as(D(N({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};import{PublicKey as vp}from"@solana/web3.js";import{MintLayout as Wp,TOKEN_2022_PROGRAM_ID as us,TOKEN_PROGRAM_ID as cs}from"@solana/spl-token";var Kr=class extends Be{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:i="strict"}=t||{},{mintList:o,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(i,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(Tt.address,Tt),this._mintGroup.official.add(Tt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,D(N({},c),{priority:-1}))}),o.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,D(N({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?us.toBase58():cs.toBase58()})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,D(N({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?us.toBase58():cs.toBase58()})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,D(N({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?us.toBase58():cs.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[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(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Tt;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,D(N({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new vp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Wp.decode(s.data),u=n.toString().substring(0,6),c={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var hi=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new gt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.api=o,this._apiCacheTime=u||5*60*1e3,this.logger=ae("Raydium"),this.farm=new lr({scope:this,moduleName:"Raydium_Farm"}),this.account=new er({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new wr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Kr({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Tr({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Ar({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new hr({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new dt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Nn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Mn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let c=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:c,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=Dp({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:o,logRequests:s,urlConfigs:a}=t,u=new ei({cluster:n,timeout:i,urlConfigs:a,logCount:o,logRequests:s}),c=new hi(D(N({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(ti);return this._owner.publicKey}setOwner(e){return this._owner=e?new gt(e):void 0,this}get connection(){if(!this._connection)throw new Error(aa);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(ti),new Error(ti)}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;let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}async fetchJupTokenList(e,t){var o;let n=(o=this.apiData.jupTokenList)==null?void 0:o[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;let i=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=D(N({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:i}}),this.apiData.jupTokenList[e].data}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{}}}};import{TOKEN_PROGRAM_ID as ds,TOKEN_2022_PROGRAM_ID as ls}from"@solana/spl-token";import{PublicKey as pt,TransactionInstruction as ps,SystemProgram as Xu}from"@solana/web3.js";import ms from"bn.js";function _S(r,e,t,n,i,o,s,a,u,c,l,m){let d=L([_("instruction"),w("amountIn"),w("amountOut")]),p=[{pubkey:Xu.programId,isSigner:!1,isWritable:!1},{pubkey:ds,isSigner:!1,isWritable:!1},{pubkey:new pt(t.programId),isSigner:!1,isWritable:!1},{pubkey:new pt(t.id),isSigner:!1,isWritable:!0},{pubkey:new pt(n.id),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=ye(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(u)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(u)?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=ye(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 pt("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=ye(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:c,amountOut:l},y),new ps({keys:p,programId:r,data:y})}function VS(r,e,t,n,i,o,s,a,u,c){let l=L([_("instruction")]),m=[{pubkey:Xu.programId,isSigner:!1,isWritable:!1},{pubkey:ds,isSigner:!1,isWritable:!1},{pubkey:new pt(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new pt(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new pt(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=ye(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(u)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(u)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...c.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=ye(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 pt("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=ye(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 ps({keys:m,programId:r,data:d})}function Gu(r,e,t,n,i,o){if(r.pooltype.includes("StablePool")){let s=ye(e);return[{pubkey:s.programId,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.authority,isSigner:!1,isWritable:!1},{pubkey:s.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:new pt("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:s.openOrders,isSigner:!1,isWritable:!0},{pubkey:s.vault.A,isSigner:!1,isWritable:!0},{pubkey:s.vault.B,isSigner:!1,isWritable:!0},{pubkey:s.marketId,isSigner:!1,isWritable:!0},{pubkey:s.marketBids,isSigner:!1,isWritable:!0},{pubkey:s.marketAsks,isSigner:!1,isWritable:!0},{pubkey:s.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0}]}else if(r.type==="Concentrated"){let s=r,a=ye(e),u=s.mintA.address===t;return[{pubkey:new pt(String(r.programId)),isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a.config.id,isSigner:!1,isWritable:!1},{pubkey:a.id,isSigner:!1,isWritable:!0},{pubkey:u?a.vault.A:a.vault.B,isSigner:!1,isWritable:!0},{pubkey:u?a.vault.B:a.vault.A,isSigner:!1,isWritable:!0},{pubkey:a.id,isSigner:!1,isWritable:!0},...a.mintA.programId.equals(ls)||a.mintB.programId.equals(ls)?[{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:An,isSigner:!1,isWritable:!1},{pubkey:u?a.mintA.address:a.mintB.address,isSigner:!1,isWritable:!1},{pubkey:u?a.mintB.address:a.mintA.address,isSigner:!1,isWritable:!1}]:[],...(o!=null?o:[]).map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:lt(new pt(String(r.programId)),new pt(r.id)).publicKey,isSigner:!1,isWritable:!0}]}else{let s=ye(e);return[{pubkey:s.programId,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.authority,isSigner:!1,isWritable:!1},{pubkey:s.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:s.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:s.openOrders,isSigner:!1,isWritable:!0},{pubkey:s.vault.A,isSigner:!1,isWritable:!0},{pubkey:s.vault.B,isSigner:!1,isWritable:!0},{pubkey:s.marketId,isSigner:!1,isWritable:!0},{pubkey:s.marketBids,isSigner:!1,isWritable:!0},{pubkey:s.marketAsks,isSigner:!1,isWritable:!0},{pubkey:s.marketEventQueue,isSigner:!1,isWritable:!0},...s.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:s.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:s.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0}]]}}function qp(r,e,t,n,i,o,s,a,u,c,l,m,d,p){let y=L([_("instruction"),w("amountIn"),w("amountOut")]),f=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:ds,isSigner:!1,isWritable:!1}];f.push(...Gu(a,c,o,t,n,p[0])),f.push(...Gu(u,l,s,n,i,p[1]));let b=Buffer.alloc(y.span);return y.encode({instruction:8,amountIn:m,amountOut:d},b),new ps({keys:f,programId:r,data:b})}async function ES({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var i,o,s,a,u,c;if(n.routeType==="amm")if(n.poolInfo[0].type==="Concentrated"){let l=ye(n.poolKey[0]),m=t.equals(l.mintA.address)?Kt.add(at):Ct.sub(at);return await Se.makeSwapBaseInInstructions({poolInfo:l,poolKeys:l,observationId:l.vault.A,ownerInfo:{wallet:e.wallet,tokenAccountA:l.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:l.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((o=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?o:new ms(0)),sqrtPriceLimitX64:m,remainingAccounts:n.remainingAccounts[0]})}else{let l=n.poolKey[0];return{signers:[],instructions:[mi({poolKeys:l,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((a=(s=n.minAmountOut.fee)==null?void 0:s.raw)!=null?a:new ms(0)),fixedSide:"in"})],lookupTableAddress:l.lookupTableAccount?[l.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?V.AmmV5SwapBaseIn:V.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let l=n.poolInfo[0],m=n.poolInfo[1],d=n.poolKey[0],p=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[qp(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.minMiddleAmountFee.token.mint.toString(),l,m,d,p,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((c=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?c:new ms(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[d.lookupTableAccount,p.lookupTableAccount].filter(y=>y!==void 0),address:{}}}else throw Error("route type error")}import Yu from"bn.js";var fs=new Yu(1e6);function Up(r,e,t){return r.mul(e).add(t).sub(new Yu(1)).div(t)}function zu(r,e,t){return r.mul(e).div(t)}var Ti=class{static tradingFee(e,t){return Up(e,t,fs)}static protocolFee(e,t){return zu(e,t,fs)}static fundFee(e,t){return zu(e,t,fs)}};import Cr from"bn.js";function Ii(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Gp(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=Ii(r,e);if(n.gt(_n)){t=t.add(new Cr(1));let i=r.div(t);n=Ii(r,t),n.gt(_n)&&(i=i.add(new Cr(1)))}return[t,e]}var _n=new Cr(0),xi=class{static swapWithoutFees(e,t,n){let i=t.mul(n),o=t.add(e),[s,a]=Gp(i,o),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}static lpTokensToTradingTokens(e,t,n,i,o){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(o===0)return{tokenAmount0:s,tokenAmount1:a};if(o===1)return Ii(e.mul(n),t).gt(_n)&&s.gt(_n)&&(s=s.add(new Cr(1))),Ii(e.mul(i),t).gt(_n)&&a.gt(_n)&&(a=a.add(new Cr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Hu=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Hu||{}),Qu=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,i){let o=Ti.tradingFee(e,i),s=e.sub(o),{sourceAmountSwapped:a,destinationAmountSwapped:u}=xi.swapWithoutFees(s,t,n),c=a.add(o);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:o}}};var ju={[Jr.toBase58()]:3},Zu={3:Jr};var Xp=L([fe(5),fe(8),S("ownAddress"),w("vaultSignerNonce"),S("baseMint"),S("quoteMint"),S("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),S("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),S("requestQueue"),S("eventQueue"),S("bids"),S("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]),Ju={3:Xp};import{PublicKey as $u}from"@solana/web3.js";var Bi=ae("Serum"),ec=class{static getProgramId(e){let t=Zu[e];return t||Bi.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=ju[t];return n||Bi.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Ju[e];return t||Bi.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()],i=0,o;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));o=$u.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:o,nonce:i}}return Bi.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:$u.default,nonce:i}}};var LK=r=>r;export{yb as ACCOUNT_TYPE_SIZE,Db as ALL_PROGRAM_ID,Yd as AMM_CONFIG_SEED,Ol as AMM_STABLE,to as AMM_V4,df as ANAMint,We as API_URLS,Sl as AccountType,cT as AmmConfigLayout,ei as Api,lu as BIT_PRECISION,Yt as BNDivCeil,an as BNLayout,Py as BN_100,ky as BN_1000,hy as BN_10000,Ay as BN_FIVE,Us as BN_ONE,nn as BN_TEN,wy as BN_THREE,gy as BN_TWO,Ke as BN_ZERO,Qg as BitStructure,la as Blob,Nl as CLMM_PROGRAM_ID,Di as CLOCK_PROGRAM_ID,Wl as CREATE_CPMM_POOL_AUTH,Dl as CREATE_CPMM_POOL_FEE_ACC,vl as CREATE_CPMM_POOL_PROGRAM,Ar as Clmm,Se as ClmmInstrument,xi as ConstantProductCurve,_u as CpmmConfigInfoLayout,Ti as CpmmFee,Vu as CpmmPoolInfoLayout,qn as Currency,rn as CurrencyAmount,Qu as CurveCalculator,qb as DEVNET_PROGRAM_ID,yg as DEV_API_URLS,Ul as DEV_CREATE_CPMM_POOL_AUTH,Gl as DEV_CREATE_CPMM_POOL_FEE_ACC,ql as DEV_CREATE_CPMM_POOL_PROGRAM,Od as DataElement,pf as ETHMint,Qo as EXTENSION_TICKARRAY_BITMAP_SIZE,Oa as FARM_LOCK_MINT,Na as FARM_LOCK_VAULT,$i as FARM_PROGRAM_ID_V3,eo as FARM_PROGRAM_ID_V5,xn as FARM_PROGRAM_ID_V6,At as FARM_PROGRAM_TO_VERSION,_a as FARM_VERSION_TO_LEDGER_LAYOUT,Ma as FARM_VERSION_TO_STATE_LAYOUT,Wb as FEE_DESTINATION_ID,yi as FEE_RATE_DENOMINATOR,fs as FEE_RATE_DENOMINATOR_VALUE,tp as FETCH_TICKARRAY_COUNT,ep as Fee,ee as Fraction,jn as IDO_ALL_PROGRAM,_l as IDO_PROGRAM_ID_V1,Vl as IDO_PROGRAM_ID_V2,El as IDO_PROGRAM_ID_V3,Fl as IDO_PROGRAM_ID_V4,vr as INSTRUCTION_PROGRAM_ID,V as InstructionType,no as JupTokenType,Tu as LIQUIDITY_FEES_DENOMINATOR,hu as LIQUIDITY_FEES_NUMERATOR,up as LIQUIDITY_VERSION_TO_SERUM_VERSION,xk as LIQUIDITY_VERSION_TO_STATE_LAYOUT,mu as LOG_B_2_X32,du as LOG_B_P_ERR_MARGIN_LOWER_X64,pu as LOG_B_P_ERR_MARGIN_UPPER_X64,jr as LOOKUP_TABLE_CACHE,Zn as Layout,ce as LiquidityMath,oc as LogLevel,Ri as Logger,rs as MARKET_STATE_LAYOUT_V2,Xp as MARKET_STATE_LAYOUT_V3,Ju as MARKET_VERSION_TO_STATE_LAYOUT,Zs as MAX_BASE64_SIZE,Ct as MAX_SQRT_PRICE_X64,et as MAX_TICK,An as MEMO_PROGRAM_ID,Es as MEMO_PROGRAM_ID2,Pn as METADATA_PROGRAM_ID,Kt as MIN_SQRT_PRICE_X64,He as MIN_TICK,Rn as MODEL_DATA_PUBKEY,ec as Market,J as MathUtil,Ho as MaxU64,cu as MaxUint128,Ft as NEGATIVE_ONE,mf as NRVMint,at as ONE,Ll as OPEN_BOOK_PROGRAM,Jd as OPERATION_SEED,Zo as ObservationInfoLayout,ip as ObservationLayout,gu as OperationLayout,co as OptionLayout,gt as Owner,rf as PAIMint,jd as POOL_REWARD_VAULT_SEED,Hd as POOL_SEED,$d as POOL_TICK_ARRAY_BITMAP_SEED,Qd as POOL_VAULT_SEED,su as POSITION_SEED,_e as Percent,oa as PoolFetchType,bi as PoolInfoLayout,Qe as PoolUtils,gi as PositionInfoLayout,sp as PositionRewardInfoLayout,br as PositionUtils,Xe as Price,lT as ProtocolPositionLayout,fi as Q128,ut as Q64,nf as RAYMint,nt as RENT_PROGRAM_ID,hi as Raydium,op as RewardInfo,Hu as RoundDirection,Xi as Rounding,Ml as Router,ju as SERUM_PROGRAMID_TO_VERSION,Jr as SERUM_PROGRAM_ID_V3,Zu as SERUM_VERSION_TO_PROGRAMID,sa as SESSION_KEY,Ne as SOLMint,Tt as SOL_INFO,ek as SPL_MINT_LAYOUT,of as SRMMint,ro as STORAGE_KEY,Wr as SYSTEM_PROGRAM_ID,Z as SqrtPriceMath,Cn as StableLayout,lo as Structure,pn as SwapMath,dn as TICK_ARRAY_BITMAP_SIZE,Zd as TICK_ARRAY_SEED,Ve as TICK_ARRAY_SIZE,Jk as TICK_SPACINGS,Me as TOKEN_WSOL,vt as TickArrayBitmap,bu as TickArrayBitmapExtensionLayout,yr as TickArrayBitmapExtensionUtils,fr as TickArrayLayout,ap as TickLayout,fn as TickMath,le as TickQuery,X as TickUtils,pe as Token,Te as TokenAmount,Zr as TxBuilder,hn as TxVersion,pr as U64Resolution,eh as U64_IGNORE_RANGE,so as UInt,sf as USDCMint,lf as USDHMint,af as USDTMint,Rl as UTIL1216,mo as Union,Ra as Voter,pd as VoterDepositEntry,dd as VoterLockup,Ca as VoterRegistrar,md as VoterVotingMintConfig,ne as WSOLMint,ri as WideBits,Mt as WrappedLayout,de as ZERO,vs as _100_PERCENT,k as accountMeta,iy as add,Yr as addComputeBudget,Do as addLiquidityLayout,Mw as array,Po as associatedLedgerAccountLayout,ao as bits,fe as blob,qe as bool,No as calFarmRewardAmount,Up as ceilDiv,Un as checkLegacyTxSize,Gn as checkV0TxSize,Zi as chunkArray,Br as claimLayout,_t as closeAccountInstruction,Fi as commonSystemAccountMeta,Fa as createAssociatedLedgerAccountInstruction,ae as createLogger,za as createPoolFeeLayout,tu as createPoolV4InstructionV2,Ik as createPoolV4Layout,Vt as createWSolAccountInstructions,Tw as cstr,qf as currencyEquals,fl as decimalToFraction,Dm as decodeBool,ey as div,Ur as divCeil,$e as dwLayout,qm as encodeBool,_g as endlessRetry,ml as eq,ww as f32,Aw as f32be,Pw as f64,kw as f64be,Io as farmAddRewardLayout,vA as farmLedgerLayoutV3_1,nr as farmLedgerLayoutV3_2,WA as farmLedgerLayoutV5_1,Sa as farmLedgerLayoutV5_2,Ka as farmLedgerLayoutV6_1,Ea as farmRewardInfoToConfig,ho as farmRewardLayout,To as farmRewardRestartLayout,ld as farmRewardTimeInfoLayout,xa as farmStateV3Layout,Ba as farmStateV5Layout,tr as farmStateV6Layout,mP as fetchMultipleFarmInfoAndUpdate,vT as fetchMultipleInfo,bb as fetchMultipleMintInfos,se as findProgramAddress,Eo as fixedSwapInLayout,Fo as fixedSwapOutLayout,zu as floorDiv,Hr as forecastTransactionSize,qd as formatLayout,Ye as generatePubKey,be as getATAAddress,Va as getAssociatedAuthority,es as getAssociatedConfigId,it as getAssociatedLedgerAccount,ir as getAssociatedLedgerPoolAccount,dp as getAssociatedOpenOrders,xu as getAssociatedPoolKeys,hp as getCpmmPdaAmmConfigId,Tp as getCpmmPdaPoolId,Ku as getCreatePoolKeys,na as getDate,Mo as getDepositEntryIndex,ja as getDxByDyBaseIn,Qa as getDyByDxBaseIn,sb as getEpochInfo,ci as getFarmLedgerLayout,fd as getFarmStateLayout,pp as getLiquidityAssociatedAuthority,yn as getLiquidityAssociatedId,vh as getLiquidityFromAmounts,ry as getMax,It as getMultipleAccountsInfo,In as getMultipleAccountsInfoWithCustomFlags,Ji as getMultipleLookupTableInfo,Qk as getPdaAmmConfigId,lt as getPdaExBitmapAccount,Ip as getPdaLpMint,pi as getPdaMetadataKey,Ai as getPdaObservationId,dr as getPdaOperationAccount,ct as getPdaPersonalPositionAddress,kp as getPdaPoolAuthority,au as getPdaPoolId,uu as getPdaPoolRewardVaulId,Yo as getPdaPoolVaultId,mn as getPdaProtocolPositionAddress,we as getPdaTickArrayAddress,Su as getPdaVault,Tn as getRecentBlockHash,So as getRegistrarAddress,Yl as getSessionKey,Za as getStablePrice,Cl as getTime,Qy as getTimestamp,Oo as getTokenOwnerRecordAddress,Qb as getTransferAmountFee,Pe as getTransferAmountFeeV2,Ro as getVoterAddress,Lo as getVoterWeightRecordAddress,Co as getVotingMintAuthority,Ko as getVotingTokenMint,Td as governanceCreateTokenOwnerRecord,jg as greedy,ll as gt,$f as gte,ga as i128,Gk as i16ToBytes,di as i32ToBytes,ii as i64,ba as i8,vo as initPoolLayout,wo as initTokenAccountInstruction,Vp as initializeMarket,Nb as intersection,ia as isDateAfter,ra as isDateBefore,yl as isDecimal,ny as isMeaningfulNumber,ta as isNumber,xo as isValidFarmVersion,mr as isZero,ye as jsonInfo2PoolKeys,dP as judgeFarmType,Xo as leadingZeros,ou as leastSignificantBit,Wo as liquidityStateV4Layout,Rd as liquidityStateV5Layout,Zf as lt,Jf as lte,uf as mSOLMint,mi as makeAMMSwapInstruction,eu as makeAddLiquidityInstruction,Vo as makeAddNewRewardInstruction,ki as makeClaimInstruction,as as makeClaimInstructionV4,Ru as makeCreateCpmmPoolInInstruction,va as makeCreateFarmInstruction,Du as makeCreateMarketInstruction,Wa as makeCreatorWithdrawFarmRewardInstruction,Lu as makeDepositCpmmInInstruction,Da as makeDepositInstructionV3,qa as makeDepositInstructionV5,Ua as makeDepositInstructionV6,CP as makeDepositTokenInstruction,LP as makeDepositWithdrawInstruction,qk as makeInitPoolInstructionV4,CB as makePurchaseInstruction,_o as makeRestartRewardInstruction,nu as makeSimulatePoolInfoInstruction,Nu as makeSwapCpmmBaseInInInstruction,Mu as makeSwapCpmmBaseOutInInstruction,Xd as makeSwapFixedInInstruction,zd as makeSwapFixedOutInstruction,ES as makeSwapInstruction,$n as makeTransferInstruction,Ou as makeWithdrawCpmmInInstruction,cr as makeWithdrawInstructionV3,ur as makeWithdrawInstructionV5,ar as makeWithdrawInstructionV6,RP as makeWithdrawTokenInstruction,sn as minExpirationTime,$k as mockCreatePoolInfo,fu as mockV3CreatePoolInfo,Nd as modelDataInfoLayout,iu as mostSignificantBit,Hi as mul,Qi as notInnerObject,mw as ns64,gw as ns64be,ma as nu64,ow as nu64be,uo as offset,Eb as offsetDateTime,Cw as option,G as parseBigNumberish,tn as parseNumberInfo,$s as parseSimulateLogToJson,Nt as parseSimulateValue,Ia as parseTokenAccountResp,uk as parseTokenInfo,Jt as poolTypeV6,on as printSimulate,S as publicKey,is as purchaseLayout,ad as realFarmStateV3Layout,ud as realFarmStateV5Layout,cd as realFarmV6Layout,qs as recursivelyDecimalToFraction,Go as removeLiquidityInstruction,qo as removeLiquidityLayout,_S as route1Instruction,VS as route2Instruction,qp as routeInstruction,Nw as rustEnum,aw as s16,dw as s16be,uw as s24,pw as s24be,De as s32,fw as s32be,cw as s40,yw as s40be,lw as s48,bw as s48be,sw as s8,q as seq,jp as setLoggerLevel,dl as shakeFractionDecimal,Js as simulateMultipleInstruction,Dk as simulatePoolInfoInstruction,hl as simulateTransaction,zs as sleep,kn as solToWSol,mk as solToWSolToken,Ht as splAccountLayout,Xs as splitNumber,cf as stSOLMint,Ow as str,L as struct,ty as sub,Lw as tagged,zi as tenExponential,pl as toBN,Tl as toBuffer,Gs as toFraction,jf as toFractionWithDecimals,Ty as toPercent,Xa as toToken,lk as toTokenAmount,ck as toTokenInfo,Iy as toTokenPrice,xy as toTotalPrice,Ds as toUsdCurrency,zo as trailingZeros,Wi as tryParsePublicKey,Y as u128,Bt as u16,ru as u16ToBytes,ew as u16be,Zg as u24,tw as u24be,ze as u32,Xk as u32ToBytes,nw as u32be,Jg as u40,rw as u40be,$g as u48,iw as u48be,w as u64,_ as u8,_w as union,LK as unionArr,hw as unionLayoutDiscriminator,_b as uniq,yd as updateFarmPoolInfo,$r as updateReqHistory,Iw as utf8,vi as validateAndParsePublicKey,Bo as validateFarmRewards,Rw as vec,Um as vecU8,xd as voterStakeRegistryCreateDepositEntry,Id as voterStakeRegistryCreateVoter,Pd as voterStakeRegistryDeposit,kd as voterStakeRegistryUpdateVoterWeightRecord,hd as voterStakeRegistryWithdraw,dk as wSolToSolToken,ko as withdrawRewardLayout,Mb as xor,Vw as zeros};
1
+ var ac=Object.defineProperty,uc=Object.defineProperties;var cc=Object.getOwnPropertyDescriptors;var _r=Object.getOwnPropertySymbols;var ks=Object.prototype.hasOwnProperty,hs=Object.prototype.propertyIsEnumerable;var Ps=(r,e,t)=>e in r?ac(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,M=(r,e)=>{for(var t in e||(e={}))ks.call(e,t)&&Ps(r,t,e[t]);if(_r)for(var t of _r(e))hs.call(e,t)&&Ps(r,t,e[t]);return r},D=(r,e)=>uc(r,cc(e));var Ie=(r,e)=>{var t={};for(var n in r)ks.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&_r)for(var n of _r(r))e.indexOf(n)<0&&hs.call(r,n)&&(t[n]=r[n]);return t};import ma from"axios";import{get as Oi,set as Ts}from"lodash";import Is from"dayjs";import lc from"dayjs/plugin/utc";Is.extend(lc);var mc=(i=>(i[i.Error=0]="Error",i[i.Warning=1]="Warning",i[i.Info=2]="Info",i[i.Debug=3]="Debug",i))(mc||{}),Ni=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 Is().utc().format("YYYY/MM/DD HH:mm:ss UTC")}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}},Mi={},xs={};function ae(r){let e=Oi(Mi,r);if(!e){let t=Oi(xs,r);e=new Ni({name:r,logLevel:t}),Ts(Mi,r,e)}return e}function tf(r,e){Ts(xs,r,e);let t=Oi(Mi,r);t&&(t.level=e)}import{PublicKey as Il}from"@solana/web3.js";import xl from"bn.js";import hl from"big.js";import zt from"bn.js";import he from"bn.js";var An=9e15,Xt=1e9,_i="0123456789abcdef",Er="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Fr="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Vi={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-An,maxE:An,crypto:!1},Cs,Lt,ee=!0,Wr="[DecimalError] ",Gt=Wr+"Invalid argument: ",Rs=Wr+"Precision limit exceeded",Ls=Wr+"crypto unavailable",Os="[object Decimal]",Xe=Math.floor,Ne=Math.pow,dc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,pc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,fc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ns=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,bt=1e7,Q=7,yc=9007199254740991,bc=Er.length-1,Ei=Fr.length-1,O={toStringTag:Os};O.absoluteValue=O.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),z(r)};O.ceil=function(){return z(new this.constructor(this),this.e+1,2)};O.clampedTo=O.clamp=function(r,e){var t,n=this,i=n.constructor;if(r=new i(r),e=new i(e),!r.s||!e.s)return new i(NaN);if(r.gt(e))throw Error(Gt+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new i(n)};O.comparedTo=O.cmp=function(r){var e,t,n,i,o=this,s=o.d,a=(r=new o.constructor(r)).d,u=o.s,c=r.s;if(!s||!a)return!u||!c?NaN:u!==c?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-c:0;if(u!==c)return u;if(o.e!==r.e)return o.e>r.e^u<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===i?0:n>i^u<0?1:-1};O.cosine=O.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())+Q,n.rounding=1,t=gc(n,Fs(n,t)),n.precision=r,n.rounding=e,z(Lt==2||Lt==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};O.cubeRoot=O.cbrt=function(){var r,e,t,n,i,o,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(ee=!1,o=l.s*Ne(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=We(l.d),r=l.e,(o=(r-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=Ne(t,1/3),r=Xe((r+1)/3)-(r%3==(r<0?-1:2)),o==1/0?t="5e"+r:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(o.toString()),s=(r=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=Ae(c.plus(l).times(a),c.plus(u),s+2,1),We(a.d).slice(0,s)===(t=We(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&(z(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=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 ee=!0,z(n,r,m.rounding,e)};O.decimalPlaces=O.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-Xe(this.e/Q))*Q,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};O.dividedBy=O.div=function(r){return Ae(this,new this.constructor(r))};O.dividedToIntegerBy=O.divToInt=function(r){var e=this,t=e.constructor;return z(Ae(e,new t(r),0,1,1),t.precision,t.rounding)};O.equals=O.eq=function(r){return this.cmp(r)===0};O.floor=function(){return z(new this.constructor(this),this.e+1,3)};O.greaterThan=O.gt=function(r){return this.cmp(r)>0};O.greaterThanOrEqualTo=O.gte=function(r){var e=this.cmp(r);return e==1||e===0};O.hyperbolicCosine=O.cosh=function(){var r,e,t,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(r=Math.ceil(i/3),e=(1/qr(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),o=Pn(s,1,o.times(e),new s(1),!0);for(var u,c=r,l=new s(8);c--;)u=o.times(o),o=a.minus(u.times(l.minus(u.times(l))));return z(o,s.precision=t,s.rounding=n,!0)};O.hyperbolicSine=O.sinh=function(){var r,e,t,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(e=o.precision,t=o.rounding,o.precision=e+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=Pn(o,2,i,i,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,i=i.times(1/qr(5,r)),i=Pn(o,2,i,i,!0);for(var s,a=new o(5),u=new o(16),c=new o(20);r--;)s=i.times(i),i=i.times(a.plus(s.times(u.times(s).plus(c))))}return o.precision=e,o.rounding=t,z(i,e,t,!0)};O.hyperbolicTangent=O.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,Ae(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};O.inverseCosine=O.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,o=t.rounding;return n!==-1?n===0?e.isNeg()?yt(t,i,o):new t(0):new t(NaN):e.isZero()?yt(t,i+4,o).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),r=yt(t,i+4,o).times(.5),t.precision=i,t.rounding=o,r.minus(e))};O.inverseHyperbolicCosine=O.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,ee=!1,t=t.times(t).minus(1).sqrt().plus(t),ee=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};O.inverseHyperbolicSine=O.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,ee=!1,t=t.times(t).plus(1).sqrt().plus(t),ee=!0,n.precision=r,n.rounding=e,t.ln())};O.inverseHyperbolicTangent=O.atanh=function(){var r,e,t,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(r=o.precision,e=o.rounding,n=i.sd(),Math.max(n,r)<2*-i.e-1?z(new o(i),r,e,!0):(o.precision=t=n-i.e,i=Ae(i.plus(1),new o(1).minus(i),t+r,1),o.precision=r+4,o.rounding=1,i=i.ln(),o.precision=r,o.rounding=e,i.times(.5))):new o(NaN)};O.inverseSine=O.asin=function(){var r,e,t,n,i=this,o=i.constructor;return i.isZero()?new o(i):(e=i.abs().cmp(1),t=o.precision,n=o.rounding,e!==-1?e===0?(r=yt(o,t+4,n).times(.5),r.s=i.s,r):new o(NaN):(o.precision=t+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=n,i.times(2)))};O.inverseTangent=O.atan=function(){var r,e,t,n,i,o,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=Ei)return s=yt(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=Ei)return s=yt(l,m+4,d).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/Q+2|0),r=t;r;--r)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(ee=!1,e=Math.ceil(a/Q),n=1,u=c.times(c),s=new l(c),i=c;r!==-1;)if(i=i.times(u),o=s.minus(i.div(n+=2)),i=i.times(u),s=o.plus(i.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===o.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),ee=!0,z(s,l.precision=m,l.rounding=d,!0)};O.isFinite=function(){return!!this.d};O.isInteger=O.isInt=function(){return!!this.d&&Xe(this.e/Q)>this.d.length-2};O.isNaN=function(){return!this.s};O.isNegative=O.isNeg=function(){return this.s<0};O.isPositive=O.isPos=function(){return this.s>0};O.isZero=function(){return!!this.d&&this.d[0]===0};O.lessThan=O.lt=function(r){return this.cmp(r)<0};O.lessThanOrEqualTo=O.lte=function(r){return this.cmp(r)<1};O.logarithm=O.log=function(r){var e,t,n,i,o,s,a,u,c=this,l=c.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=c.d,c.s<0||!t||!t[0]||c.eq(1))return new l(t&&!t[0]?-1/0:c.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)o=!0;else{for(i=t[0];i%10===0;)i/=10;o=i!==1}if(ee=!1,a=m+p,s=Ut(c,a),n=e?vr(l,a+10):Ut(r,a),u=Ae(s,n,a,1),Wn(u.d,i=m,d))do if(a+=10,s=Ut(c,a),n=e?vr(l,a+10):Ut(r,a),u=Ae(s,n,a,1),!o){+We(u.d).slice(i+1,i+15)+1==1e14&&(u=z(u,m+1,0));break}while(Wn(u.d,i+=10,d));return ee=!0,z(u,m,d)};O.minus=O.sub=function(r){var e,t,n,i,o,s,a,u,c,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(c=p.d,d=r.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])r.s=-r.s;else if(c[0])r=new y(p);else return new y(u===3?-0:0);return ee?z(r,a,u):r}if(t=Xe(r.e/Q),l=Xe(p.e/Q),c=c.slice(),o=l-t,o){for(m=o<0,m?(e=c,o=-o,s=d.length):(e=d,t=l,s=c.length),n=Math.max(Math.ceil(a/Q),s)+2,o>n&&(o=n,e.length=1),e.reverse(),n=o;n--;)e.push(0);e.reverse()}else{for(n=c.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=d[n]){m=c[n]<d[n];break}o=0}for(m&&(e=c,c=d,d=e,r.s=-r.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>o;){if(c[--n]<d[n]){for(i=n;i&&c[--i]===0;)c[i]=bt-1;--c[i],c[n]+=bt}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(r.d=c,r.e=Dr(c,t),ee?z(r,a,u):r):new y(u===3?-0:0)};O.modulo=O.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):(ee=!1,n.modulo==9?(e=Ae(t,r.abs(),0,3,1),e.s*=r.s):e=Ae(t,r,0,n.modulo,1),e=e.times(r),ee=!0,t.minus(e))};O.naturalExponential=O.exp=function(){return Fi(this)};O.naturalLogarithm=O.ln=function(){return Ut(this)};O.negated=O.neg=function(){var r=new this.constructor(this);return r.s=-r.s,z(r)};O.plus=O.add=function(r){var e,t,n,i,o,s,a,u,c,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(c=m.d,l=r.d,a=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(r=new d(m)),ee?z(r,a,u):r;if(o=Xe(m.e/Q),n=Xe(r.e/Q),c=c.slice(),i=o-n,i){for(i<0?(t=c,i=-i,s=l.length):(t=l,n=o,s=c.length),o=Math.ceil(a/Q),s=o>s?o+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=c.length,i=l.length,s-i<0&&(i=s,t=l,l=c,c=t),e=0;i;)e=(c[--i]=c[i]+l[i]+e)/bt|0,c[i]%=bt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return r.d=c,r.e=Dr(c,n),ee?z(r,a,u):r};O.precision=O.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Gt+r);return t.d?(e=Ms(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};O.round=function(){var r=this,e=r.constructor;return z(new e(r),r.e+1,e.rounding)};O.sine=O.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())+Q,n.rounding=1,t=Ac(n,Fs(n,t)),n.precision=r,n.rounding=e,z(Lt>2?t.neg():t,r,e,!0)):new n(NaN)};O.squareRoot=O.sqrt=function(){var r,e,t,n,i,o,s=this,a=s.d,u=s.e,c=s.s,l=s.constructor;if(c!==1||!a||!a[0])return new l(!c||c<0&&(!a||a[0])?NaN:a?s:1/0);for(ee=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=We(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=Xe((u+1)/2)-(u<0||u%2),c==1/0?e="5e"+u:(e=c.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new l(e)):n=new l(c.toString()),t=(u=l.precision)+3;;)if(o=n,n=o.plus(Ae(s,o,t+2,1)).times(.5),We(o.d).slice(0,t)===(e=We(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(z(o,u+1,0),o.times(o).eq(s))){n=o;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(z(n,u+1,1),r=!n.times(n).eq(s));break}return ee=!0,z(n,u,l.rounding,r)};O.tangent=O.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=Ae(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,z(Lt==2||Lt==4?t.neg():t,r,e,!0)):new n(NaN)};O.times=O.mul=function(r){var e,t,n,i,o,s,a,u,c,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=Xe(l.e/Q)+Xe(r.e/Q),u=d.length,c=p.length,u<c&&(o=d,d=p,p=o,s=u,u=c,c=s),o=[],s=u+c,n=s;n--;)o.push(0);for(n=c;--n>=0;){for(e=0,i=u+n;i>n;)a=o[i]+p[n]*d[i-n-1]+e,o[i--]=a%bt|0,e=a/bt|0;o[i]=(o[i]+e)%bt|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),r.d=o,r.e=Dr(o,t),ee?z(r,m.precision,m.rounding):r};O.toBinary=function(r,e){return Wi(this,2,r,e)};O.toDecimalPlaces=O.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(nt(r,0,Xt),e===void 0?e=n.rounding:nt(e,0,8),z(t,r+t.e+1,e))};O.toExponential=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=ht(n,!0):(nt(r,0,Xt),e===void 0?e=i.rounding:nt(e,0,8),n=z(new i(n),r+1,e),t=ht(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};O.toFixed=function(r,e){var t,n,i=this,o=i.constructor;return r===void 0?t=ht(i):(nt(r,0,Xt),e===void 0?e=o.rounding:nt(e,0,8),n=z(new o(i),r+i.e+1,e),t=ht(n,!1,r+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};O.toFraction=function(r){var e,t,n,i,o,s,a,u,c,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(c=t=new f(1),n=u=new f(0),e=new f(n),o=e.e=Ms(y)-p.e-1,s=o%Q,e.d[0]=Ne(10,s<0?Q+s:s),r==null)r=o>0?e:c;else{if(a=new f(r),!a.isInt()||a.lt(c))throw Error(Gt+a);r=a.gt(e)?o>0?e:c:a}for(ee=!1,a=new f(We(y)),l=f.precision,f.precision=o=y.length*Q*2;m=Ae(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(r)!=1;)t=n,n=i,i=c,c=u.plus(m.times(i)),u=i,i=e,e=a.minus(m.times(i)),a=i;return i=Ae(r.minus(t),n,0,1,1),u=u.plus(i.times(c)),t=t.plus(i.times(n)),u.s=c.s=p.s,d=Ae(c,n,o,1).minus(p).abs().cmp(Ae(u,t,o,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,ee=!0,d};O.toHexadecimal=O.toHex=function(r,e){return Wi(this,16,r,e)};O.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]?(ee=!1,t=Ae(t,r,0,e,1).times(r),ee=!0,z(t)):(r.s=t.s,t=r),t};O.toNumber=function(){return+this};O.toOctal=function(r,e){return Wi(this,8,r,e)};O.toPower=O.pow=function(r){var e,t,n,i,o,s,a=this,u=a.constructor,c=+(r=new u(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new u(Ne(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,o=u.rounding,r.eq(1))return z(a,n,o);if(e=Xe(r.e/Q),e>=r.d.length-1&&(t=c<0?-c:c)<=yc)return i=_s(u,a,t,n),r.s<0?new u(1).div(i):z(i,n,o);if(s=a.s,s<0){if(e<r.d.length-1)return new u(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,c),e=t==0||!isFinite(t)?Xe(c*(Math.log("0."+We(a.d))/Math.LN10+a.e+1)):new u(t+"").e,e>u.maxE+1||e<u.minE-1?new u(e>0?s/0:0):(ee=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),i=Fi(r.times(Ut(a,n+t)),n),i.d&&(i=z(i,n+5,1),Wn(i.d,n,o)&&(e=n+10,i=z(Fi(r.times(Ut(a,e+t)),e),e+5,1),+We(i.d).slice(n+1,n+15)+1==1e14&&(i=z(i,n+1,0)))),i.s=s,ee=!0,u.rounding=o,z(i,n,o))};O.toPrecision=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=ht(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(nt(r,1,Xt),e===void 0?e=i.rounding:nt(e,0,8),n=z(new i(n),r,e),t=ht(n,r<=n.e||n.e<=i.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};O.toSignificantDigits=O.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(nt(r,1,Xt),e===void 0?e=n.rounding:nt(e,0,8)),z(new n(t),r,e)};O.toString=function(){var r=this,e=r.constructor,t=ht(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};O.truncated=O.trunc=function(){return z(new this.constructor(this),this.e+1,1)};O.valueOf=O.toJSON=function(){var r=this,e=r.constructor,t=ht(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function We(r){var e,t,n,i=r.length-1,o="",s=r[0];if(i>0){for(o+=s,e=1;e<i;e++)n=r[e]+"",t=Q-n.length,t&&(o+=qt(t)),o+=n;s=r[e],n=s+"",t=Q-n.length,t&&(o+=qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function nt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Gt+r)}function Wn(r,e,t,n){var i,o,s,a;for(o=r[0];o>=10;o/=10)--e;return--e<0?(e+=Q,i=0):(i=Math.ceil((e+1)/Q),e%=Q),o=Ne(10,Q-e),a=r[i]%o|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==o||t>3&&a+1==o/2)&&(r[i+1]/o/100|0)==Ne(10,e-2)-1||(a==o/2||a==0)&&(r[i+1]/o/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==o||!n&&t>3&&a+1==o/2)&&(r[i+1]/o/1e3|0)==Ne(10,e-3)-1,s}function Vr(r,e,t){for(var n,i=[0],o,s=0,a=r.length;s<a;){for(o=i.length;o--;)i[o]*=e;for(i[0]+=_i.indexOf(r.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function gc(r,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/qr(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),r.precision+=t,e=Pn(r,1,e.times(i),new r(1));for(var o=t;o--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var Ae=function(){function r(n,i,o){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*i+a,n[u]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function e(n,i,o,s){var a,u;if(o!=s)u=o>s?1:-1;else for(a=u=0;a<o;a++)if(n[a]!=i[a]){u=n[a]>i[a]?1:-1;break}return u}function t(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,u){var c,l,m,d,p,y,f,b,g,P,A,T,h,I,S,x,K,N,F,H,W=n.constructor,j=n.s==i.s?1:-1,se=n.d,Z=i.d;if(!se||!se[0]||!Z||!Z[0])return new W(!n.s||!i.s||(se?Z&&se[0]==Z[0]:!Z)?NaN:se&&se[0]==0||!Z?j*0:j/0);for(u?(p=1,l=n.e-i.e):(u=bt,p=Q,l=Xe(n.e/p)-Xe(i.e/p)),F=Z.length,K=se.length,g=new W(j),P=g.d=[],m=0;Z[m]==(se[m]||0);m++);if(Z[m]>(se[m]||0)&&l--,o==null?(I=o=W.precision,s=W.rounding):a?I=o+(n.e-i.e)+1:I=o,I<0)P.push(1),y=!0;else{if(I=I/p+2|0,m=0,F==1){for(d=0,Z=Z[0],I++;(m<K||d)&&I--;m++)S=d*u+(se[m]||0),P[m]=S/Z|0,d=S%Z|0;y=d||m<K}else{for(d=u/(Z[0]+1)|0,d>1&&(Z=r(Z,d,u),se=r(se,d,u),F=Z.length,K=se.length),x=F,A=se.slice(0,F),T=A.length;T<F;)A[T++]=0;H=Z.slice(),H.unshift(0),N=Z[0],Z[1]>=u/2&&++N;do d=0,c=e(Z,A,F,T),c<0?(h=A[0],F!=T&&(h=h*u+(A[1]||0)),d=h/N|0,d>1?(d>=u&&(d=u-1),f=r(Z,d,u),b=f.length,T=A.length,c=e(f,A,b,T),c==1&&(d--,t(f,F<b?H:Z,b,u))):(d==0&&(c=d=1),f=Z.slice()),b=f.length,b<T&&f.unshift(0),t(A,f,T,u),c==-1&&(T=A.length,c=e(Z,A,F,T),c<1&&(d++,t(A,F<T?H:Z,T,u))),T=A.length):c===0&&(d++,A=[0]),P[m++]=d,c&&A[0]?A[T++]=se[x]||0:(A=[se[x]],T=1);while((x++<K||A[0]!==void 0)&&I--);y=A[0]!==void 0}P[0]||P.shift()}if(p==1)g.e=l,Cs=y;else{for(m=1,d=P[0];d>=10;d/=10)m++;g.e=m+l*p-1,z(g,a?o+g.e+1:o,s,y)}return g}}();function z(r,e,t,n){var i,o,s,a,u,c,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(i=1,a=m[0];a>=10;a/=10)i++;if(o=e-i,o<0)o+=Q,s=e,l=m[d=0],u=l/Ne(10,i-s-1)%10|0;else if(d=Math.ceil((o+1)/Q),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,i=1,o%=Q,s=o-Q+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;o%=Q,s=o-Q+i,u=s<0?0:l/Ne(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Ne(10,i-s-1)),c=t<4?(u||n)&&(t==0||t==(r.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(o>0?s>0?l/Ne(10,i-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=r.e+1,m[0]=Ne(10,(Q-e%Q)%Q),r.e=-e||0):m[0]=r.e=0,r;if(o==0?(m.length=d,a=1,d--):(m.length=d+1,a=Ne(10,Q-o),m[d]=s>0?(l/Ne(10,i-s)%Ne(10,s)|0)*a:0),c)for(;;)if(d==0){for(o=1,s=m[0];s>=10;s/=10)o++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(r.e++,m[0]==bt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=bt)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return ee&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function ht(r,e,t){if(!r.isFinite())return Es(r);var n,i=r.e,o=We(r.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+qt(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(r.e<0?"e":"e+")+r.e):i<0?(o="0."+qt(-i-1)+o,t&&(n=t-s)>0&&(o+=qt(n))):i>=s?(o+=qt(i+1-s),t&&(n=t-i-1)>0&&(o=o+"."+qt(n))):((n=i+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(o+="."),o+=qt(n))),o}function Dr(r,e){var t=r[0];for(e*=Q;t>=10;t/=10)e++;return e}function vr(r,e,t){if(e>bc)throw ee=!0,t&&(r.precision=t),Error(Rs);return z(new r(Er),e,1,!0)}function yt(r,e,t){if(e>Ei)throw Error(Rs);return z(new r(Fr),e,t,!0)}function Ms(r){var e=r.length-1,t=e*Q+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 qt(r){for(var e="";r--;)e+="0";return e}function _s(r,e,t,n){var i,o=new r(1),s=Math.ceil(n/Q+4);for(ee=!1;;){if(t%2&&(o=o.times(e),Ss(o.d,s)&&(i=!0)),t=Xe(t/2),t===0){t=o.d.length-1,i&&o.d[t]===0&&++o.d[t];break}e=e.times(e),Ss(e.d,s)}return ee=!0,o}function Bs(r){return r.d[r.d.length-1]&1}function Vs(r,e,t){for(var n,i=new r(e[0]),o=0;++o<e.length;)if(n=new r(e[o]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function Fi(r,e){var t,n,i,o,s,a,u,c=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?(ee=!1,u=y):u=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,u+=n,t=o=s=new d(1),d.precision=u;;){if(o=z(o.times(r),u,1),t=t.times(++l),a=s.plus(Ae(o,t,u,1)),We(a.d).slice(0,u)===We(s.d).slice(0,u)){for(i=m;i--;)s=z(s.times(s),u,1);if(e==null)if(c<3&&Wn(s.d,u-n,p,c))d.precision=u+=10,t=o=a=new d(1),l=0,c++;else return z(s,d.precision=y,p,ee=!0);else return d.precision=y,s}s=a}}function Ut(r,e){var t,n,i,o,s,a,u,c,l,m,d,p=1,y=10,f=r,b=f.d,g=f.constructor,P=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?(ee=!1,l=A):l=e,g.precision=l+=y,t=We(b),n=t.charAt(0),Math.abs(o=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=We(f.d),n=t.charAt(0),p++;o=f.e,n>1?(f=new g("0."+t),o++):f=new g(n+"."+t.slice(1))}else return c=vr(g,l+2,A).times(o+""),f=Ut(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?z(f,A,P,ee=!0):f;for(m=f,u=s=f=Ae(f.minus(1),f.plus(1),l,1),d=z(f.times(f),l,1),i=3;;){if(s=z(s.times(d),l,1),c=u.plus(Ae(s,new g(i),l,1)),We(c.d).slice(0,l)===We(u.d).slice(0,l))if(u=u.times(2),o!==0&&(u=u.plus(vr(g,l+2,A).times(o+""))),u=Ae(u,new g(p),l,1),e==null)if(Wn(u.d,l-y,P,a))g.precision=l+=y,c=s=f=Ae(m.minus(1),m.plus(1),l,1),d=z(f.times(f),l,1),i=a=1;else return z(u,g.precision=A,P,ee=!0);else return g.precision=A,u;u=c,i+=2}}function Es(r){return String(r.s*r.s/0)}function vi(r,e){var t,n,i;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(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%Q,t<0&&(n+=Q),n<i){for(n&&r.d.push(+e.slice(0,n)),i-=Q;n<i;)r.d.push(+e.slice(n,n+=Q));e=e.slice(n),n=Q-e.length}else n-=i;for(;n--;)e+="0";r.d.push(+e),ee&&(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 wc(r,e){var t,n,i,o,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ns.test(e))return vi(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(pc.test(e))t=16,e=e.toLowerCase();else if(dc.test(e))t=2;else if(fc.test(e))t=8;else throw Error(Gt+e);for(o=e.search(/p/i),o>0?(u=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),o=e.indexOf("."),s=o>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,o=a-o,i=_s(n,new n(t),o,o*2)),c=Vr(e,t,bt),l=c.length-1,o=l;c[o]===0;--o)c.pop();return o<0?new n(r.s*0):(r.e=Dr(c,l),r.d=c,ee=!1,s&&(r=Ae(r,i,a*4)),u&&(r=r.times(Math.abs(u)<54?Ne(2,u):Dn.pow(2,u))),ee=!0,r)}function Ac(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Pn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/qr(5,t)),e=Pn(r,2,e,e);for(var i,o=new r(5),s=new r(16),a=new r(20);t--;)i=e.times(e),e=e.times(o.plus(i.times(s.times(i).minus(a))));return e}function Pn(r,e,t,n,i){var o,s,a,u,c=1,l=r.precision,m=Math.ceil(l/Q);for(ee=!1,u=t.times(t),a=new r(n);;){if(s=Ae(a.times(u),new r(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=Ae(s.times(u),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(o=m;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,c++}return ee=!0,s.d.length=m+1,s}function qr(r,e){for(var t=r;--e;)t*=r;return t}function Fs(r,e){var t,n=e.s<0,i=yt(r,r.precision,1),o=i.times(.5);if(e=e.abs(),e.lte(o))return Lt=n?4:1,e;if(t=e.divToInt(i),t.isZero())Lt=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(o))return Lt=Bs(t)?n?2:3:n?4:1,e;Lt=Bs(t)?n?1:4:n?3:2}return e.minus(i).abs()}function Wi(r,e,t,n){var i,o,s,a,u,c,l,m,d,p=r.constructor,y=t!==void 0;if(y?(nt(t,1,Xt),n===void 0?n=p.rounding:nt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=Es(r);else{for(l=ht(r),s=l.indexOf("."),y?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Vr(ht(d),10,i),d.e=d.d.length),m=Vr(l,10,i),o=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?o--:(r=new p(r),r.d=m,r.e=o,r=Ae(r,d,t,n,0,i),m=r.d,o=r.e,c=Cs),s=m[t],a=i/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,c)for(;++m[--t]>i-1;)m[t]=0,t||(++o,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=_i.charAt(m[s]);if(y){if(u>1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)l+="0";for(m=Vr(l,i,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=_i.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(o<0?"p":"p+")+o}else if(o<0){for(;++o;)l="0"+l;l="0."+l}else if(++o>u)for(o-=u;o--;)l+="0";else o<u&&(l=l.slice(0,o)+"."+l.slice(o))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function Ss(r,e){if(r.length>e)return r.length=e,!0}function Pc(r){return new this(r).abs()}function kc(r){return new this(r).acos()}function hc(r){return new this(r).acosh()}function Tc(r,e){return new this(r).plus(e)}function Ic(r){return new this(r).asin()}function xc(r){return new this(r).asinh()}function Bc(r){return new this(r).atan()}function Sc(r){return new this(r).atanh()}function Kc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,i=this.rounding,o=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=yt(this,o,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?yt(this,n,i):new this(0),t.s=r.s):!r.d||e.isZero()?(t=yt(this,o,1).times(.5),t.s=r.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(Ae(r,e,o,1)),e=yt(this,o,1),this.precision=n,this.rounding=i,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(Ae(r,e,o,1)),t}function Cc(r){return new this(r).cbrt()}function Rc(r){return z(r=new this(r),r.e+1,2)}function Lc(r,e,t){return new this(r).clamp(e,t)}function Oc(r){if(!r||typeof r!="object")throw Error(Wr+"Object expected");var e,t,n,i=r.defaults===!0,o=["precision",1,Xt,"rounding",0,8,"toExpNeg",-An,0,"toExpPos",0,An,"maxE",0,An,"minE",-An,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],i&&(this[t]=Vi[t]),(n=r[t])!==void 0)if(Xe(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(Gt+t+": "+n);if(t="crypto",i&&(this[t]=Vi[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(Ls);else this[t]=!1;else throw Error(Gt+t+": "+n);return this}function Nc(r){return new this(r).cos()}function Mc(r){return new this(r).cosh()}function vs(r){var e,t,n;function i(o){var s,a,u,c=this;if(!(c instanceof i))return new i(o);if(c.constructor=i,Ks(o)){c.s=o.s,ee?!o.d||o.e>i.maxE?(c.e=NaN,c.d=null):o.e<i.minE?(c.e=0,c.d=[0]):(c.e=o.e,c.d=o.d.slice()):(c.e=o.e,c.d=o.d?o.d.slice():o.d);return}if(u=typeof o,u==="number"){if(o===0){c.s=1/o<0?-1:1,c.e=0,c.d=[0];return}if(o<0?(o=-o,c.s=-1):c.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;ee?s>i.maxE?(c.e=NaN,c.d=null):s<i.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[o]):(c.e=s,c.d=[o]);return}else if(o*0!==0){o||(c.s=NaN),c.e=NaN,c.d=null;return}return vi(c,o.toString())}else if(u!=="string")throw Error(Gt+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),c.s=-1):(a===43&&(o=o.slice(1)),c.s=1),Ns.test(o)?vi(c,o):wc(c,o)}if(i.prototype=O,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Oc,i.clone=vs,i.isDecimal=Ks,i.abs=Pc,i.acos=kc,i.acosh=hc,i.add=Tc,i.asin=Ic,i.asinh=xc,i.atan=Bc,i.atanh=Sc,i.atan2=Kc,i.cbrt=Cc,i.ceil=Rc,i.clamp=Lc,i.cos=Nc,i.cosh=Mc,i.div=_c,i.exp=Vc,i.floor=Ec,i.hypot=Fc,i.ln=vc,i.log=Wc,i.log10=qc,i.log2=Dc,i.max=Uc,i.min=Gc,i.mod=Xc,i.mul=zc,i.pow=Yc,i.random=Hc,i.round=Qc,i.sign=jc,i.sin=Zc,i.sinh=Jc,i.sqrt=$c,i.sub=el,i.sum=tl,i.tan=nl,i.tanh=rl,i.trunc=il,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 i.config(r),i}function _c(r,e){return new this(r).div(e)}function Vc(r){return new this(r).exp()}function Ec(r){return z(r=new this(r),r.e+1,3)}function Fc(){var r,e,t=new this(0);for(ee=!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 ee=!0,new this(1/0);t=e}return ee=!0,t.sqrt()}function Ks(r){return r instanceof Dn||r&&r.toStringTag===Os||!1}function vc(r){return new this(r).ln()}function Wc(r,e){return new this(r).log(e)}function Dc(r){return new this(r).log(2)}function qc(r){return new this(r).log(10)}function Uc(){return Vs(this,arguments,"lt")}function Gc(){return Vs(this,arguments,"gt")}function Xc(r,e){return new this(r).mod(e)}function zc(r,e){return new this(r).mul(e)}function Yc(r,e){return new this(r).pow(e)}function Hc(r){var e,t,n,i,o=0,s=new this(1),a=[];if(r===void 0?r=this.precision:nt(r,1,Xt),n=Math.ceil(r/Q),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));o<n;)i=e[o],i>=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);o<n;)i=e[o]+(e[o+1]<<8)+(e[o+2]<<16)+((e[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(Ls);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],r%=Q,n&&r&&(i=Ne(10,Q-r),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=Q)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<Q&&(t-=Q-n)}return s.e=t,s.d=a,s}function Qc(r){return z(r=new this(r),r.e+1,this.rounding)}function jc(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Zc(r){return new this(r).sin()}function Jc(r){return new this(r).sinh()}function $c(r){return new this(r).sqrt()}function el(r,e){return new this(r).sub(e)}function tl(){var r=0,e=arguments,t=new this(e[r]);for(ee=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return ee=!0,z(t,this.precision,this.rounding)}function nl(r){return new this(r).tan()}function rl(r){return new this(r).tanh()}function il(r){return z(r=new this(r),r.e+1,1)}O[Symbol.for("nodejs.util.inspect.custom")]=O.toString;O[Symbol.toStringTag]="Decimal";var Dn=O.constructor=vs(Vi);Er=new Dn(Er);Fr=new Dn(Fr);var E=Dn;import{PublicKey as Xi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ol}from"@solana/spl-token";import{PublicKey as xe,SystemProgram as Ws,SYSVAR_RENT_PUBKEY as sl}from"@solana/web3.js";function k({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var Di=[k({pubkey:ol,isWritable:!1}),k({pubkey:Ws.programId,isWritable:!1}),k({pubkey:sl,isWritable:!1})];function qi({publicKey:r,transformSol:e}){let t=Ui(r.toString());if(t instanceof xe)return e&&t.equals(Me)?ne:t;if(e&&t.toString()===Me.toBase58())return ne;if(typeof t=="string"){if(t===xe.default.toBase58())return xe.default;try{return new xe(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Ui(r){try{return new xe(r)}catch{return r}}var kn=new xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Ds=new xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),rt=new xe("SysvarRent111111111111111111111111111111111"),Gi=new xe("SysvarC1ock11111111111111111111111111111111"),hn=new xe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Ur=new xe("Sysvar1nstructions1111111111111111111111111"),Gr=Ws.programId,uf=new xe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),cf=new xe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),lf=new xe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),mf=new xe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),df=new xe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),pf=new xe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),ff=new xe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),yf=new xe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),bf=new xe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),gf=new xe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),wf=new xe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),ne=new xe("So11111111111111111111111111111111111111112"),Me=xe.default;function Tn(r){return qi({publicKey:r,transformSol:!0})}import{PublicKey as al}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as qs}from"@solana/spl-token";var Tt={chainId:101,address:al.default.toBase58(),programId:qs.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:qs.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 zi=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:o=!1,isToken2022:s=!1}){if(e===Me.toBase58()||e instanceof Xi&&Me.equals(e)){this.decimals=_e.decimals,this.symbol=_e.symbol,this.name=_e.name,this.mint=new Xi(_e.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=o?Xi.default:qi({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},pe=zi;pe.WSOL=new zi(D(M({},_e),{mint:_e.address}));import zr from"big.js";import ll from"bn.js";import ml from"decimal.js-light";import ul from"toformat";var cl=ul,qn=cl;var Xr=ae("module/fraction"),Yi=qn(zr),Un=qn(ml),dl={[0]:Un.ROUND_DOWN,[1]:Un.ROUND_HALF_UP,[2]:Un.ROUND_UP},pl={[0]:zr.roundDown,[1]:zr.roundHalfUp,[2]:zr.roundUp},te=class{constructor(e,t=new ll(1)){this.numerator=G(e),this.denominator=G(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new te(this.denominator,this.numerator)}add(e){let t=e instanceof te?e:new te(G(e));return this.denominator.eq(t.denominator)?new te(this.numerator.add(t.numerator),this.denominator):new te(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof te?e:new te(G(e));return this.denominator.eq(t.denominator)?new te(this.numerator.sub(t.numerator),this.denominator):new te(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof te?e:new te(G(e));return new te(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof te?e:new te(G(e));return new te(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Xr.logWithError(`${e} is not an integer.`),e<=0&&Xr.logWithError(`${e} is not positive.`),Un.set({precision:e+1,rounding:dl[n]});let i=new Un(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Xr.logWithError(`${e} is not an integer.`),e<0&&Xr.logWithError(`${e} is negative.`),Yi.DP=e,Yi.RM=pl[n]||1,new Yi(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var fl=ae("Raydium_price"),ze=class extends te{constructor(t){let{baseToken:n,quoteToken:i,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=i,this.scalar=new te(Qi(n.decimals),Qi(i.decimals))}get raw(){return new te(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new ze({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&fl.logWithError("mul token not equals");let n=super.mul(t);return new ze({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};var ji=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Gn=ji;Gn.SOL=new ji(Tt);function Yf(r,e){return r instanceof pe&&e instanceof pe?r.equals(e):r instanceof pe||e instanceof pe?!1:r===e}import yl from"bn.js";var Us=new te(new yl(100)),Ve=class extends te{toSignificant(e=5,t,n){return this.mul(Us).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Us).toFixed(e,t,n)}};function Ce(r){if(r instanceof Ve)return new te(r.numerator,r.denominator);if(r instanceof ze)return r.adjusted;if(r instanceof Te)try{return Ce(r.toExact())}catch{return new te(Ke)}if(r instanceof te)return r;let e=String(r),t=tn(e);return new te(t.numerator,t.denominator)}function ty(r){var n;if(r instanceof Ve)return{fr:new te(r.numerator,r.denominator)};if(r instanceof ze)return{fr:r.adjusted};if(r instanceof Te)return{fr:Ce(r.toExact()),decimals:r.token.decimals};if(r instanceof te)return{fr:r};let e=String(r),t=tn(e);return{fr:new te(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function ny(r,e){if(r==null||e==null)return!1;let t=Ce(r),n=Ce(e);return t.sub(n).numerator,t.sub(n).numerator.lt(Ke)}function bl(r,e){if(r==null||e==null)return!1;let t=Ce(r),n=Ce(e);return t.sub(n).numerator.gt(Ke)}function ry(r,e){if(r==null||e==null)return!1;let t=Ce(r),n=Ce(e);return t.sub(n).numerator.lte(Ke)}function iy(r,e){if(r==null||e==null)return!1;let t=Ce(r),n=Ce(e);return t.sub(n).numerator.gte(Ke)}function gl(r,e){if(r==null||e==null)return!1;let t=Ce(r),n=Ce(e);return t.sub(n).numerator.eq(Ke)}function oy(r,e){if(r==null||e==null)return;let t=Ce(r),n=Ce(e);try{return t.div(n)}catch{return t}}function sy(r,e){if(r==null||e==null)return;let t=Ce(r),n=Ce(e);return t.sub(n)}function ay(r){return r==null?!1:!gl(r,0)}function uy(r,e){return bl(e,r)?e:r}function Zi(r,e){if(r==null||e==null)return;let t=Ce(r),n=Ce(e);return t.mul(n)}function cy(r,e){if(r==null||e==null)return;let t=Ce(r),n=Ce(e);return t.add(n)}var Hi=(n=>(n[n.ROUND_DOWN=0]="ROUND_DOWN",n[n.ROUND_HALF_UP=1]="ROUND_HALF_UP",n[n.ROUND_UP=2]="ROUND_UP",n))(Hi||{}),Ke=new he(0),Ys=new he(1),hy=new he(2),Ty=new he(3),Iy=new he(5),nn=new he(10),xy=new he(100),By=new he(1e3),Sy=new he(1e4),Gs=9007199254740991;function G(r){let e=ae("Raydium_parseBigNumberish");if(r instanceof he)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new he(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Gs||r<=-Gs)&&e.logWithError(`BigNumberish number overflow: ${r}`),new he(String(r))):typeof r=="bigint"?new he(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new he(0))}function Qi(r){return nn.pow(G(r))}function tn(r){var a;if(r===void 0)return{denominator:"1",numerator:"0"};if(r instanceof he)return{numerator:r.toString(),denominator:"1"};if(r instanceof te)return{denominator:r.denominator.toString(),numerator:r.numerator.toString()};let e=String(r),[,t="",n="",i=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],o="1"+"0".repeat(i.length),s=t+(n==="0"?"":n)+i||"0";return{denominator:o,numerator:s,sign:t,int:n,dec:i}}function Yr(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function wl(r){var n;let[,e="",t=""]=(n=r.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function Al(r,e=0){return r instanceof he?r:new he(wl(Hs(r).mul(nn.pow(new he(String(e))))))}function Hs(r){if(r instanceof Ve)return new te(r.numerator,r.denominator);if(r instanceof ze)return r.adjusted;if(r instanceof Te)try{return Hs(r.toExact())}catch{return new te(Ke)}if(r instanceof te)return r;let e=String(r),t=tn(e);return new te(t.numerator,t.denominator)}function Ky(r,e){let{numerator:t,denominator:n}=tn(r);return new Ve(new he(t),new he(n).mul(e!=null&&e.alreadyDecimaled?new he(100):new he(1)))}function Cy(r){let{token:e,numberPrice:t,decimalDone:n}=r,i=new pe({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:o,denominator:s}=tn(t),a=n?new he(o).mul(nn.pow(new he(e.decimals))):o,u=new he(s).mul(nn.pow(new he(i.decimals)));return new ze({baseToken:i,denominator:u.toString(),quoteToken:new pe(D(M({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function Xs(r){let e=new Gn({decimals:6,symbol:"usd",name:"usd"}),t=Al(Zi(r,10**e.decimals));return new rn(e,t)}function Ry(r,e){return Xs(!e||!r?0:Zi(r,e))}function Pl(r){if(r==null)return;let{numerator:e,denominator:t}=tn(r.toString());return new te(e,t)}function kl(r){return r instanceof E}function zs(r){return kl(r)?Pl(r):Array.isArray(r)?r.map(e=>zs(e)):Ji(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,zs(t)])):r}var Tl=ae("Raydium_amount"),Hr=qn(hl);function Qs(r,e){let t="0",n="0";if(r.includes(".")){let i=r.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):Tl.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var Te=class extends te{constructor(t,n,i=!0,o){let s=new zt(0),a=nn.pow(new zt(t.decimals));if(i)s=G(n);else{let u=new zt(0),c=new zt(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Qs(n.toString(),t.decimals);u=G(l),c=G(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=ae(o||"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 Te(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Te(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Hr.DP=this.token.decimals,new Hr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},rn=class extends te{constructor(t,n,i=!0,o){let s=new zt(0),a=nn.pow(new zt(t.decimals));if(i)s=G(n);else{let u=new zt(0),c=new zt(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Qs(n.toString(),t.decimals);u=G(l),c=G(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=ae(o||"TokenAmount"),this.currency=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.currency.equals(t.currency)||this.logger.logWithError("gt currency not equals"),this.raw.gt(t.raw)}lt(t){return this.currency.equals(t.currency)||this.logger.logWithError("lt currency not equals"),this.raw.lt(t.raw)}add(t){return this.currency.equals(t.currency)||this.logger.logWithError("add currency not equals"),new rn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new rn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.currency.decimals,n,i=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Hr.DP=this.currency.decimals,new Hr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};async function js(r){new Promise(e=>setTimeout(e,r))}function eb(){return new Date().getTime()}function Ji(r){return typeof r=="object"&&r!==null&&![pe,Te,Il,te,xl,ze,Ve].some(e=>typeof e=="object"&&r instanceof e)}function ye(r){return typeof r=="string"?Ui(r):Array.isArray(r)?r.map(e=>ye(e)):Ji(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,ye(t)])):r}import{PublicKey as Yn,sendAndConfirmTransaction as Hn,Transaction as Qn,TransactionMessage as jn,VersionedTransaction as Zn}from"@solana/web3.js";import Ml from"axios";var In=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(In||{}),V={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 Js,ComputeBudgetProgram as Zs,Transaction as jr,TransactionMessage as Bl,Keypair as $s,VersionedTransaction as ea}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Sl}from"@solana/spl-token";var Ot=ae("Raydium_txUtil"),ta=1644;function Zr(r){let e=[],t=[];return r.microLamports&&(e.push(Zs.setComputeUnitPrice({microLamports:r.microLamports})),t.push(V.SetComputeUnitPrice)),r.units&&(e.push(Zs.setComputeUnitLimit({units:r.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function xn(r){var e,t;try{return((t=await((e=r.getLatestBlockhash)==null?void 0:e.call(r)))==null?void 0:t.blockhash)||(await r.getRecentBlockhash()).blockhash}catch{return(await r.getRecentBlockhash()).blockhash}}function Jr(r,e){r.length<1&&Ot.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Ot.logWithError(`no signers provided:, ${e.toString()}`);let t=new jr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<ta}catch{return!1}}async function na(r,e,t,n=!0){let i=new Js("RaydiumSimuLateTransaction11111111111111111"),o=[],s=new jr;s.feePayer=i;for(let c of e)Jr([...s.instructions,c],[i])||(o.push(s),s=new jr,s.feePayer=i),s.add(c);s.instructions.length>0&&o.push(s);let a=[];try{if(a=await Kl(r,o,n),a.find(c=>c.err!==null))throw Error("rpc simulateTransaction error")}catch(c){c instanceof Error&&Ot.logWithError("failed to simulate for instructions","RPC_ERROR",{message:c.message})}let u=[];for(let c of a)if(Ot.debug("simulate result:",c),c.logs){let l=c.logs.filter(m=>m&&m.includes(t));Ot.debug("filteredLog:",u),l.length||Ot.logWithError("simulate log not match keyword","keyword",t),u.push(...l)}return u}function ra(r,e){let t=r.match(/{["\w:,]+}/g);return!t||t.length!==1?Ot.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Nt(r,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(r);return!n||n.length!==2?Ot.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function oe(r,e){let[t,n]=Js.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}async function Kl(r,e,t){let n=[];if(t){let i=await r.getLatestBlockhash(),o=[];for(let c of e){c.recentBlockhash=i.blockhash,c.lastValidBlockHeight=i.lastValidBlockHeight;let m=c._compile().serialize(),p=c._serialize(m).toString("base64");o.push(p)}let s=o.map(c=>{let l=r._buildArgs([c],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],u=20;for(let c=0;c<Math.ceil(s.length/u);c++)a.push(s.slice(c*u,(c+1)*u));n=await(await Promise.all(a.map(async c=>(await r._rpcBatchRequest(c)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async i=>await(await r.simulateTransaction(i)).value))}catch(i){i instanceof Error&&Ot.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:i.message})}return n}function Xn({instructions:r,payer:e,signers:t}){return Jr(r,[e,...t])}function zn({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=$s.generate().publicKey.toString()}){let o=new Bl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new ea(o).serialize()).toString("base64").length<ta}catch{return!1}}var Qr={time:0,data:void 0};async function mb(r){if(!Qr.data||(Date.now()-Qr.time)/1e3>30){let e=await r.getEpochInfo();return Qr={time:Date.now(),data:e},e}else return Qr.data}var Cl=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r);function on(r){let e=[];return r.forEach(t=>{t instanceof jr&&(t.recentBlockhash||(t.recentBlockhash=Sl.toBase58()),t.feePayer||(t.feePayer=$s.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof ea&&(n=Cl(n));let i=n.toString("base64");e.push(i)}),console.log("simulate tx string:",e),e}import{PublicKey as ia,AddressLookupTableAccount as $r}from"@solana/web3.js";import{PublicKey as Rl}from"@solana/web3.js";import{getTransferFeeConfig as Ll,unpackMint as Ol}from"@solana/spl-token";var $i=ae("Raydium_accountInfo_util");async function It(r,e,t){let{batchRequest:n,commitment:i="confirmed"}=M({batchRequest:!1},t),o=eo(e,100),s=new Array(o.length).fill([]);if(n){let a=o.map(l=>{let m=r._buildArgs([l.map(d=>d.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:m}}),u=eo(a,10);s=(await(await Promise.all(u.map(async l=>await r._rpcBatchRequest(l)))).flat()).map(l=>(l.error&&$i.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${l.error.message}`),l.result.value.map(m=>{if(m){let{data:d,executable:p,lamports:y,owner:f,rentEpoch:b}=m;return d.length!==2&&d[1]!=="base64"&&$i.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(d[0],"base64"),executable:p,lamports:y,owner:new Rl(f),rentEpoch:b}}return null})))}else try{s=await Promise.all(o.map(a=>r.getMultipleAccountsInfo(a,i)))}catch(a){a instanceof Error&&$i.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${a.message}`)}return s.flat()}async function Bn(r,e,t){let n=await It(r,e.map(i=>i.pubkey),t);return e.map((i,o)=>D(M({},i),{accountInfo:n[o]}))}var Nl=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(Nl||{}),Pb=1;async function kb({connection:r,mints:e}){var i,o;if(e.length===0)return{};let t=await Bn(r,e.map(s=>({pubkey:s}))),n={};for(let s of t){let a=Ol(s.pubkey,s.accountInfo,(i=s.accountInfo)==null?void 0:i.owner);n[s.pubkey.toString()]=D(M({},a),{feeConfig:(o=Ll(a))!=null?o:void 0})}return n}async function to({connection:r,address:e}){let t=await It(r,[...new Set(e.map(i=>i.toString()))].map(i=>new ia(i))),n={};for(let i=0;i<e.length;i++){let o=t[i],s=e[i];if(!o)continue;let a=new $r({key:s,state:$r.deserialize(o.data)});n[s.toString()]=a,ei[s.toString()]=a}return n}var ei={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new $r({key:new ia("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:$r.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 ti=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}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 Ml.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}=Zr(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:i=[],endInstructionTypes:o=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...o),this.lookupTableAddress.push(...s.filter(a=>a!==Yn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(M({},t||{})):this.build(t)}build(e){let t=new Qn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async n=>{var a;let{recentBlockHash:i,skipPreflight:o=!0}=n||{},s=i!=null?i:await xn(this.connection);if(t.recentBlockhash=s,this.signers.length&&t.sign(...this.signers),on([t]),(a=this.owner)!=null&&a.isKeyPair)return{txId:await Hn(this.connection,t,this.signers.find(u=>u.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:o}),signedTx:t};if(this.signAllTransactions){let u=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(u[0].serialize(),{skipPreflight:o}),signedTx:u[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),o=t.filter(c=>c.transaction.instructions.length>0),s=[i,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async c=>{var f;let{sequentially:l,onTxUpdate:m,recentBlockHash:d,skipPreflight:p=!0}=c||{},y=d!=null?d:await xn(this.connection);if((f=this.owner)!=null&&f.isKeyPair){if(l){let b=[];for(let g of s){let P=await Hn(this.connection,g,this.signers.find(A=>A.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:p});b.push(P)}return{txIds:b,signedTxs:s}}return{txIds:await await Promise.all(s.map(async(b,g)=>(b.recentBlockhash=y,await Hn(this.connection,b,a[g].find(P=>P.publicKey.equals(this.owner.publicKey))?a[g]:[...a[g],this.owner.signer],{skipPreflight:p})))),signedTxs:s}}if(this.signAllTransactions){let b=s.map((P,A)=>(P.recentBlockhash=y,a[A].length&&P.sign(...a[A]),P));on(b);let g=await this.signAllTransactions(b);if(l){let P=0,A=[],T=async()=>{if(!g[P])return;let h=await this.connection.sendRawTransaction(g[P].serialize(),{skipPreflight:p});A.push({txId:h,status:"sent",signedTx:g[P]}),m==null||m([...A]),P++,this.connection.onSignature(h,I=>{let S=A.findIndex(x=>x.txId===h);S>-1&&(A[S].status=I.err?"error":"success"),m==null||m([...A]),I.err||T()},"processed"),this.connection.getSignatureStatus(h)};return await T(),{txIds:A.map(h=>h.txId),signedTxs:g}}else{let P=[];for(let A=0;A<g.length;A+=1){let T=await this.connection.sendRawTransaction(g[A].serialize(),{skipPreflight:p});P.push(T)}return{txIds:P,signedTxs:g}}}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){let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i}=d,o=Ie(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=M(M({},this.cluster==="devnet"?{}:ei),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let p of a)s[p]===void 0&&u.push(new Yn(p));let c=await to({connection:this.connection,address:u});for(let[p,y]of Object.entries(c))s[p]=y;let l=new jn({payerKey:this.feePayer,recentBlockhash:i?Yn.default.toBase58():await xn(this.connection),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s)),m=new Zn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async p=>{var b;let{recentBlockHash:y,skipPreflight:f=!0}=p||{};if(y&&(m.message.recentBlockhash=y),on([m]),(b=this.owner)!=null&&b.isKeyPair){this.signers.find(T=>T.publicKey.equals(this.owner.publicKey))||m.sign([this.owner.signer]);let g=await this.connection.sendTransaction(m,{skipPreflight:f}),{lastValidBlockHeight:P,blockhash:A}=await this.connection.getLatestBlockhash();return await this.connection.confirmTransaction({blockhash:A,lastValidBlockHeight:P,signature:g},"confirmed"),{txId:g,signedTx:m}}if(this.signAllTransactions){let g=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(g[0],{skipPreflight:f}),signedTx:g[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async buildV0MultiTx(e){let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),o=t.filter(c=>c.builder.instructions.length>0),s=[i,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return s.forEach(async(c,l)=>{c.sign(a[l])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async c=>{var y;let{sequentially:l,onTxUpdate:m,recentBlockHash:d,skipPreflight:p=!0}=c||{};if(d&&s.forEach(f=>f.message.recentBlockhash=d),on(s),(y=this.owner)!=null&&y.isKeyPair){let{lastValidBlockHeight:f,blockhash:b}=await this.connection.getLatestBlockhash();if(s.forEach((g,P)=>{a[P].find(A=>A.publicKey.equals(this.owner.publicKey))||g.sign([this.owner.signer])}),l){let g=[];for(let P of s){let A=await this.connection.sendTransaction(P,{skipPreflight:p}),{lastValidBlockHeight:T,blockhash:h}=await this.connection.getLatestBlockhash();await this.connection.confirmTransaction({blockhash:h,lastValidBlockHeight:T,signature:A},"confirmed"),g.push(A)}return{txIds:g,signedTxs:s}}return{txIds:await Promise.all(s.map(async g=>{let P=await this.connection.sendTransaction(g,{skipPreflight:p});return await this.connection.confirmTransaction({blockhash:b,lastValidBlockHeight:f,signature:P},"confirmed"),P})),signedTxs:s}}if(this.signAllTransactions){let f=await this.signAllTransactions(s);if(l){let b=0,g=[],P=async()=>{if(!f[b])return;let A=await this.connection.sendTransaction(f[b],{skipPreflight:p});g.push({txId:A,status:"sent",signedTx:f[b]}),m==null||m([...g]),b++,this.connection.onSignature(A,T=>{let h=g.findIndex(I=>I.txId===A);h>-1&&(g[h].status=T.err?"error":"success"),m==null||m([...g]),T.err||P()},"processed"),this.connection.getSignatureStatus(A)};return P(),{txIds:[],signedTxs:f}}else{let b=[];for(let g=0;g<f.length;g+=1){let P=await this.connection.sendTransaction(f[g],{skipPreflight:p});b.push(P)}return{txIds:b,signedTxs:f}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){let c=e||{},{computeBudgetConfig:t}=c,n=Ie(c,["computeBudgetConfig"]),i=t?Zr(t):{instructions:[],instructionTypes:[]},o=this.signers.reduce((l,m)=>D(M({},l),{[m.publicKey.toBase58()]:m}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(l=>{let m=[...u,l],d=t?[...i.instructions,...m]:m,y=[...new Set(m.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>new Yn(f));if(u.length<12&&Xn({instructions:d,payer:this.feePayer,signers:y})||Xn({instructions:m,payer:this.feePayer,signers:y}))u.push(l);else{if(u.length===0)throw Error("item ins too big");Xn({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:y})?s.push(new Qn().add(...i.instructions,...u)):s.push(new Qn().add(...u)),a.push(Array.from(new Set(u.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat())).map(f=>o[f]).filter(f=>f!==void 0)),u=[l]}}),u.length>0){let m=[...new Set(u.map(d=>d.keys.filter(p=>p.isSigner).map(p=>p.pubkey.toString())).flat()).values()].map(d=>o[d]).filter(d=>d!==void 0);Xn({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:m.map(d=>d.publicKey)})?s.push(new Qn().add(...i.instructions,...u)):s.push(new Qn().add(...u)),a.push(m)}return s.forEach(l=>l.feePayer=this.feePayer),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await xn(this.connection);if(s.forEach(async(g,P)=>{g.recentBlockhash=f,a[P].length&&g.sign(...a[P])}),on(s),(b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let P of s){let A=await Hn(this.connection,P,this.signers.find(T=>T.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 Promise.all(s.map(async(g,P)=>await Hn(this.connection,g,a[P].find(A=>A.publicKey.equals(this.owner.publicKey))?a[P]:[...a[P],this.owner.signer],{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let g=await this.signAllTransactions(s);if(m){let P=0,A=[],T=async()=>{if(!g[P])return;let h=await this.connection.sendRawTransaction(g[P].serialize(),{skipPreflight:y});A.push({txId:h,status:"sent",signedTx:g[P]}),d==null||d([...A]),P++,this.connection.onSignature(h,I=>{let S=A.findIndex(x=>x.txId===h);S>-1&&(A[S].status=I.err?"error":"success"),d==null||d([...A]),I.err||T()},"processed"),this.connection.getSignatureStatus(h)};return await T(),{txIds:A.map(h=>h.txId),signedTxs:g}}else{let P=[];for(let A=0;A<g.length;A+=1){let T=await this.connection.sendRawTransaction(g[A].serialize(),{skipPreflight:y});P.push(T)}return{txIds:P,signedTxs:g}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:i=[]}=b,o=Ie(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=M(M({},this.cluster==="devnet"?{}:ei),n),a=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let g of a)s[g]===void 0&&u.push(new Yn(g));let c=await to({connection:this.connection,address:u});for(let[g,P]of Object.entries(c))s[g]=P;let l=t?Zr(t):{instructions:[],instructionTypes:[]},m=await xn(this.connection),d=this.signers.reduce((g,P)=>D(M({},g),{[P.publicKey.toBase58()]:P}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(g=>{let P=[...f,g],A=t?[...l.instructions,...P]:P;if(f.length<12&&zn({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s})||zn({instructions:P,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(g);else{if(f.length===0)throw Error("item ins too big");let T={};for(let h of[...new Set(a)])s[h]!==void 0&&(T[h]=s[h]);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let h=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Zn(h))}else{let h=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Zn(h))}y.push(Array.from(new Set(f.map(h=>h.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat())).map(h=>d[h]).filter(h=>h!==void 0)),f=[g]}}),f.length>0){let P=[...new Set(f.map(A=>A.keys.filter(T=>T.isSigner).map(T=>T.pubkey.toString())).flat()).values()].map(A=>d[A]).filter(A=>A!==void 0);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let A=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Zn(A))}else{let A=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Zn(A))}y.push(P)}return{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async g=>{var I;let{sequentially:P,onTxUpdate:A,recentBlockHash:T,skipPreflight:h=!0}=g||{};if(p.map(async(S,x)=>{y[x].length&&S.sign(y[x]),T&&(S.message.recentBlockhash=T)}),on(p),(I=this.owner)!=null&&I.isKeyPair){let{lastValidBlockHeight:S,blockhash:x}=await this.connection.getLatestBlockhash();if(p.forEach((K,N)=>{y[N].find(F=>F.publicKey.equals(this.owner.publicKey))||K.sign([this.owner.signer])}),P){let K=[];for(let N of p){let F=await this.connection.sendTransaction(N,{skipPreflight:h}),{lastValidBlockHeight:H,blockhash:W}=await this.connection.getLatestBlockhash();await this.connection.confirmTransaction({blockhash:W,lastValidBlockHeight:H,signature:F},"confirmed"),K.push(F)}return{txIds:K,signedTxs:p}}return{txIds:await Promise.all(p.map(async K=>{let N=await this.connection.sendTransaction(K,{skipPreflight:h});return await this.connection.confirmTransaction({blockhash:x,lastValidBlockHeight:S,signature:N},"confirmed"),N})),signedTxs:p}}if(this.signAllTransactions){let S=await this.signAllTransactions(p);if(P){let x=0,K=[],N=async()=>{if(!S[x])return;let F=await this.connection.sendTransaction(S[x],{skipPreflight:h});K.push({txId:F,status:"sent",signedTx:S[x]}),A==null||A([...K]),x++,this.connection.onSignature(F,H=>{let W=K.findIndex(j=>j.txId===F);W>-1&&(K[W].status=H.err?"error":"success"),A==null||A([...K]),H.err||N()},"processed"),this.connection.getSignatureStatus(F)};return N(),{txIds:[],signedTxs:S}}else{let x=[];for(let K=0;K<S.length;K+=1){let N=await this.connection.sendTransaction(S[K],{skipPreflight:h});x.push(N)}return{txIds:x,signedTxs:S}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}};var gt=class{constructor(e){this._owner=e}get publicKey(){return gt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return gt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return gt.isKeyPair(this._owner)}get isPublicKey(){return gt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!gt.isKeyPair(e)}};function eo(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function Fb(r,...e){return r.filter(t=>e.every(n=>n.includes(t)))}function vb(r,...e){return r.filter(t=>e.every(n=>!n.includes(t)))}function Wb(r){return[...new Set(r)]}var oa=r=>typeof r=="number",sa=r=>r?new Date(r):new Date,_l=r=>sa(r).getTime();function aa(r,e,t){let n=oa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()<=n}function ua(r,e,t){let n=oa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()>n}function qb(r,e){let n=_l(r)+(e.days?e.days*24*60*60*1e3:0)+(e.hours?e.hours*60*60*1e3:0)+(e.minutes?e.minutes*60*1e3:0)+(e.seconds?e.seconds*1e3:0)+(e.milliseconds?e.milliseconds:0);return sa(n)}import{PublicKey as me}from"@solana/web3.js";var no=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),ro=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Sn=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Vl=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),El=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),ni=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),io=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Fl=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),vl=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Wl=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Xb=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Dl=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),ql=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Ul=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Gl=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Xl=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),zl=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Yl=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Hl=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Ql=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),jl=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Jn={IDO_PROGRAM_ID_V1:Dl,IDO_PROGRAM_ID_V2:ql,IDO_PROGRAM_ID_V3:Ul,IDO_PROGRAM_ID_V4:Gl},zb={AMM_V4:io,AMM_STABLE:Fl,CLMM_PROGRAM_ID:vl,FARM_PROGRAM_ID_V3:no,FARM_PROGRAM_ID_V5:ro,FARM_PROGRAM_ID_V6:Sn,OPEN_BOOK_PROGRAM:El,SERUM_PROGRAM_ID_V3:ni,UTIL1216:Vl,Router:Wl,CREATE_CPMM_POOL_PROGRAM:Xl,CREATE_CPMM_POOL_AUTH:zl,CREATE_CPMM_POOL_FEE_ACC:Yl},Yb={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:Hl,CREATE_CPMM_POOL_AUTH:Ql,CREATE_CPMM_POOL_FEE_ACC:jl,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Zl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Jl}from"@solana/spl-token";function be(r,e,t){return oe([r.toBuffer(),(t!=null?t:Jl).toBuffer(),e.toBuffer()],new Zl("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Le from"bn.js";var xt=1e4;function eg(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,o=new Le(i.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===xt){let a=new Le(i.maximumFee.toString());return{amount:r.add(a),fee:a,expirationTime:s}}else{let a=Yt(r.mul(new Le(xt)),new Le(xt-i.transferFeeBasisPoints)),u=new Le(i.maximumFee.toString()),c=a.sub(r).gt(u)?r.add(u):a,l=Yt(c.mul(new Le(i.transferFeeBasisPoints)),new Le(xt)),m=l.gt(o)?o:l;return{amount:c,fee:m,expirationTime:s}}else{let a=Yt(r.mul(new Le(i.transferFeeBasisPoints)),new Le(xt)),u=a.gt(o)?o:a;return{amount:r,fee:u,expirationTime:s}}}function Pe(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=D(M({},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}}),o=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new Le(o.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===xt){let u=new Le(o.maximumFee.toString());return{amount:r.add(u),fee:u,expirationTime:a}}else{let u=Yt(r.mul(new Le(xt)),new Le(xt-o.transferFeeBasisPoints)),c=new Le(o.maximumFee.toString()),l=u.sub(r).gt(c)?r.add(c):u,m=Yt(l.mul(new Le(o.transferFeeBasisPoints)),new Le(xt)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=Yt(r.mul(new Le(o.transferFeeBasisPoints)),new Le(xt)),c=u.gt(s)?s:u;return{amount:r,fee:c,expirationTime:a}}}function sn(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function Yt(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Le(0))?t.add(new Le(1)):t}var oo=(t=>(t.ALL="all",t.Strict="strict",t))(oo||{}),ca=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(ca||{});var De={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-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://token.jup.ag/{type}",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"},Pg=M({},De);var la="ray_tab_hash",so="ray_req_hash",$l=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(la);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(la,r)),r},ri=async n=>{var i=n,{logCount:r=1e3,removeLastLog:e}=i,t=Ie(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(so)||"[]").slice(0,r-1);e&&o.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),o.unshift(D(M({},t),{time:Date.now(),session:$l()}));try{localStorage.setItem(so,JSON.stringify(o))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(o[0].data=a+(a.length>100?"...":"");!s;){o.pop();let u=JSON.stringify(t.data).substring(0,100);o[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(so,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(u=>u())}return ri(D(M({},t),{logCount:r,removeLastLog:!0}))}};var Kn=ae("Raydium_Api"),ao=new Map;async function Wg(r,e,t=1e3){let n;for(;n==null;)try{Kn.debug(`Request ${r} through endlessRetry`),n=await e()}catch(i){Kn.error(`Request ${r} failed, retry after ${t} ms`,i),await js(t)}return n}var ii=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=i||1e3,this.api=ma.create({baseURL:this.urlConfigs.BASE_HOST||De.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return Kn.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(Kn.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:u,status:c}=s,{method:l,baseURL:m,url:d}=a;return n&&ri({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),Kn.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:d}=a;return n&&ri({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Kn.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||De.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||De.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ma.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,o)=>i+o,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||De.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||De.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||De.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("/",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||De.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||De.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:o=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||De.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${o}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||De.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>ao.has(s)?(n.push(ao.get(s)),!1):!0),o=[];return i.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||De.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),o.forEach(a=>{ao.set(a.id,a)})),n.concat(o)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:o="default",order:s="desc",page:a=1}=e,[u,c]=[t&&Tn(t).toBase58(),n&&n!=="undefined"?Tn(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||De.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||De.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||De.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||De.CHECK_AVAILABILITY)).data}};import{merge as zp}from"lodash";var oi="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",da="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as ho,TOKEN_PROGRAM_ID as Zt,AccountLayout as Rn,TOKEN_2022_PROGRAM_ID as cd}from"@solana/spl-token";import{PublicKey as di,SystemProgram as ld}from"@solana/web3.js";var uo=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Be=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ae(t)}createTxBuilder(e){return this.scope.checkOwner(),new ti({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(uo(e))}logInfo(...e){this.logger.info(uo(e))}logAndCreateError(...e){let t=uo(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as rd,createCloseAccountInstruction as id,createTransferInstruction as od,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";import{PublicKey as sd,SystemProgram as ad}from"@solana/web3.js";import ud from"bn.js";import{PublicKey as Ka,Keypair as $m}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ed}from"@solana/spl-token";import td from"bn.js";import{PublicKey as Xm}from"@solana/web3.js";import Aa,{isBN as Pa}from"bn.js";import{bits as em,BitStructure as tm,blob as nm,Blob as rm,cstr as im,f32 as om,f32be as sm,f64 as am,f64be as um,greedy as cm,Layout as lm,ns64 as mm,ns64be as dm,nu64 as pm,nu64be as fm,offset as ym,s16 as bm,s16be as gm,s24 as wm,s24be as Am,s32 as Pm,s32be as km,s40 as hm,s40be as Tm,s48 as Im,s48be as xm,s8 as Bm,seq as Sm,struct as $g,Structure as Km,u16 as Cm,u16be as Rm,u24 as Lm,u24be as Om,u32 as Nm,u32be as Mm,u40 as _m,u40be as Vm,u48 as Em,u48be as Fm,u8 as vm,UInt as Wm,union as Dm,Union as qm,unionLayoutDiscriminator as Um,utf8 as Gm}from"@solana/buffer-layout";var $n=lm,pa=Km,fa=qm,ew=tm,co=Wm,ya=rm,tw=cm,si=vm,Bt=Cm,nw=Lm,er=Nm,rw=_m,iw=Em,ba=pm,ow=Rm,sw=Om,aw=Mm,uw=Vm,cw=Fm,lw=fm,mw=Bm,dw=bm,pw=wm,qe=Pm,fw=hm,yw=Im,bw=mm,gw=gm,ww=Am,Aw=km,Pw=Tm,kw=xm,hw=dm,Tw=om,Iw=sm,xw=am,Bw=um;var ga=Sm,wa=Dm,Sw=Um,fe=nm,Kw=im,Cw=Gm,lo=em,mo=ym;var an=class extends $n{constructor(t,n,i){super(t,i);this.blob=fe(t),this.signed=n}decode(t,n=0){let i=new Aa(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new Aa(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},ai=class extends $n{constructor(t){super(8,t);this._lower=lo(er(),!1),this._upper=lo(er(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),o=this._upper.decode(t,n+this._lower.span);return M(M({},i),o)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function _(r){return new co(1,r)}function Ye(r){return new co(4,r)}function w(r){return new an(8,!1,r)}function Y(r){return new an(16,!1,r)}function ka(r){return new an(1,!0,r)}function ui(r){return new an(8,!0,r)}function ha(r){return new an(16,!0,r)}var Mt=class extends $n{constructor(t,n,i,o){super(t.span,o);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function B(r){return new Mt(fe(32),e=>new Xm(e),e=>e.toBuffer(),r)}var po=class extends $n{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=si()}encode(t,n,i=0){return t==null?this.discriminator.encode(0,n,i):(this.discriminator.encode(1,n,i),this.layout.encode(t,n,i+1)+1)}decode(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return null;if(i===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let i=this.discriminator.decode(t,n);if(i===0)return 1;if(i===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function Mw(r,e){return new po(r,e)}function Ue(r){return new Mt(si(),zm,Ym,r)}function zm(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function Ym(r){return r?1:0}function _w(r,e){let t=er("length"),n=L([t,q(r,mo(t,-t.span),"values")]);return new Mt(n,({values:i})=>i,i=>({values:i}),e)}function Vw(r,e,t){let n=L([w("tag"),e.replicate("data")]);function i({tag:o,data:s}){if(!o.eq(r))throw new Error("Invalid tag, expected: "+r.toString("hex")+", got: "+o.toString("hex"));return s}return new Mt(n,i,o=>({tag:r,data:o}),t)}function Hm(r){let e=er("length"),t=L([e,fe(mo(e,-e.span),"data")]);return new Mt(t,({data:n})=>n,n=>({data:n}),r)}function Ew(r){return new Mt(Hm(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),r)}function Fw(r,e){let t=wa(si(),e);return r.forEach((n,i)=>t.addVariant(i,n,n.property)),t}function vw(r,e,t){let n=L([q(r,e,"values")]);return new Mt(n,({values:i})=>i,i=>({values:i}),t)}var fo=class extends pa{decode(e,t){return super.decode(e,t)}};function L(r,e,t){return new fo(r,e,t)}var yo=class extends fa{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(i=>i.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function Ww(r,e,t){return new yo(r,e,t)}var bo=class extends ya{decode(e,t){let n=super.decode(e,t);if(!n.every(i=>i===0))throw new Error("nonzero padding bytes");return n}};function Dw(r){return new bo(r)}function q(r,e,t){let n,i=typeof e=="number"?e:Pa(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=Pa(a)?a.toNumber():a,Reflect.set(o,"count",n)}return Reflect.get(o,s)},set(o,s,a){return s==="count"&&(n=a),Reflect.set(o,s,a)}});return ga(r,i,t)}var Ht=L([B("mint"),B("owner"),w("amount"),Ye("delegateOption"),B("delegate"),_("state"),Ye("isNativeOption"),w("isNative"),w("delegatedAmount"),Ye("closeAuthorityOption"),B("closeAuthority")]);function Qm(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function go(r,...e){if(!Qm(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 wo(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 Ta(r,e){go(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var li=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),wt=(r,e)=>r<<32-e|r>>>e;var Hw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function jm(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Ao(r){return typeof r=="string"&&(r=jm(r)),go(r),r}var ci=class{clone(){return this._cloneInto()}},Qw={}.toString;function Ia(r){let e=n=>r().update(Ao(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Zm(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),u=n?4:0,c=n?0:4;r.setUint32(e+u,s,n),r.setUint32(e+c,a,n)}var xa=(r,e,t)=>r&e^~r&t,Ba=(r,e,t)=>r&e^r&t^e&t,mi=class extends ci{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=li(this.buffer)}update(e){wo(this);let{view:t,buffer:n,blockLen:i}=this;e=Ao(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let u=li(e);for(;i<=o-s;s+=i)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){wo(this),Ta(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let m=s;m<i;m++)t[m]=0;Zm(n,i-8,BigInt(this.length*8),o),this.process(n,0);let a=li(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let c=u/4,l=this.get();if(c>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<c;m++)a.setUint32(4*m,l[m],o)}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:i,finished:o,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=o,e.destroyed=s,i%t&&e.buffer.set(n),e}};var Jm=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]),Qt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),jt=new Uint32Array(64),Po=class extends mi{constructor(){super(64,32,8,!1),this.A=Qt[0]|0,this.B=Qt[1]|0,this.C=Qt[2]|0,this.D=Qt[3]|0,this.E=Qt[4]|0,this.F=Qt[5]|0,this.G=Qt[6]|0,this.H=Qt[7]|0}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:u}=this;return[e,t,n,i,o,s,a,u]}set(e,t,n,i,o,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=u|0}process(e,t){for(let m=0;m<16;m++,t+=4)jt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=jt[m-15],p=jt[m-2],y=wt(d,7)^wt(d,18)^d>>>3,f=wt(p,17)^wt(p,19)^p>>>10;jt[m]=f+jt[m-7]+y+jt[m-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=wt(a,6)^wt(a,11)^wt(a,25),p=l+d+xa(a,u,c)+Jm[m]+jt[m]|0,f=(wt(n,2)^wt(n,13)^wt(n,22))+Ba(n,i,o)|0;l=c,c=u,u=a,a=s+p|0,s=o,o=i,i=n,n=p+f|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,u=u+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(n,i,o,s,a,u,c,l)}roundClean(){jt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Sa=Ia(()=>new Po);var dA=ae("Raydium_Util");function Ca({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:o,account:s}of t.value){let a=Ht.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:o,mint:u,amount:c,isAssociated:be(r,u,s.owner).publicKey.equals(o),isNative:!1,programId:s.owner}),i.push({pubkey:o,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Ka.default,amount:new td(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function He({fromPublicKey:r,programId:e=ed}){let t=$m.generate().publicKey.toBase58().slice(0,32);return{publicKey:nd(r,t,e),seed:t}}function nd(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),i=Sa(n);return new Ka(i)}function ko(r){let{mint:e,tokenAccount:t,owner:n,programId:i=Cn}=r;return rd(t,e,n,i)}function _t(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:o=Cn}=r;return id(e,t,i,n,o)}async function Vt(r){let{connection:e,amount:t,commitment:n,payer:i,owner:o,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Ht.span,n),u=G(t).add(new ud(a)),c=He({fromPublicKey:i,programId:Cn});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[ad.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:Ht.span,programId:Cn}),ko({mint:new sd(_e.address),tokenAccount:c.publicKey,owner:o,programId:Cn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[_t({tokenAccount:c.publicKey,payer:i,owner:o})]}}function tr({source:r,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:o=Cn}){return od(r,e,t,BigInt(String(n)),i,o)}var nr=class extends Be{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._clientOwnedToken=!!(n||i)}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 be(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=M(M({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Zt},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:cd},i.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=Ca({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,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:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=Zt,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let o=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of o){let{publicKey:u}=a;if(u&&(!i||i&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new di(t.tokenProgram||Zt),m=this.getAssociatedTokenAccount(n,new di(l)),d=(a?[]:this.tokenAccountRawInfos).filter(P=>P.accountInfo.mint.equals(n)&&(!o||P.pubkey.equals(m))).sort((P,A)=>P.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(i===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(o){let P=ho(s,m,s,n,l);if(c){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(P),p.instructionTypes.push(V.CreateATA);else if(!(A.owner.equals(l)&&Rn.decode(A.data).mint.equals(n)&&Rn.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(P),p.instructionTypes.push(V.CreateATA);if(n.equals(ne)&&i.amount){let A=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(f=i.amount)!=null?f:0,skipCloseAccount:u});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),i.amount&&(p.instructions.push(tr({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:Zt})),p.instructionTypes.push(V.TransferAmount))}return u||(p.endInstructions.push(_t({owner:s,payer:i.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:p}}else{let P=He({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(Rn.span),T=ld.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:P.seed,newAccountPubkey:P.publicKey,lamports:A+Number((g=(b=i.amount)==null?void 0:b.toString())!=null?g:0),space:Rn.span,programId:l});return p.instructions.push(T,ko({mint:n,tokenAccount:P.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(V.CreateAccount),p.instructionTypes.push(V.InitAccount),u||(p.endInstructions.push(_t({owner:s,payer:i.payer||s,tokenAccount:P.publicKey,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:P.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=Zt,autoUnwrapWSOLToSOL:i}){var u;await this.fetchWalletTokenAccounts();let o=(u=this.scope.account.tokenAccounts.find(({mint:c})=>(c==null?void 0:c.toBase58())===t.toBase58()))==null?void 0:u.publicKey,s=this.scope.ownerPubKey,a={};if(!o){let c=this.getAssociatedTokenAccount(t,n),l=await ho(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],o=c}return i&&ne.toBase58()===t.toBase58()&&(a.endInstructions=[_t({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:o,programId:s=Zt,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new di(ne).equals(o)){let p=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:i,skipCloseAccount:l});return M({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=ho(this.scope.ownerPubKey,d,this.scope.ownerPubKey,o,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(Zt)&&Rn.decode(f.data).mint.equals(o)&&Rn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${o.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=Zt,amount:o,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new di(ne))&&s){let l=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=l,p=Ie(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=m,p=Ie(m,["tokenAccount"]);u=d,c.addInstruction(p)}return M({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as Ld}from"@solana/spl-token";import{PublicKey as ke,SystemProgram as Od}from"@solana/web3.js";import{PublicKey as Va}from"@solana/web3.js";var To=L([_("instruction")]),Io=L([_("instruction")]),md=L([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Y("accRewardPerShare"),B("rewardVault"),B("rewardMint"),B("rewardSender"),w("rewardType"),q(w(),15,"padding")]),dd=L([w("state"),w("nonce"),B("lpVault"),B("rewardVault"),B(),B(),w(),w(),w("totalReward"),Y("perShareReward"),w("lastSlot"),w("perSlotReward")]),pd=L([w("state"),w("nonce"),B("lpVault"),B("rewardVaultA"),w("totalRewardA"),Y("perShareRewardA"),w("perSlotRewardA"),_("option"),B("rewardVaultB"),fe(7),w("totalRewardB"),Y("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),B()]),fd=L([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Y("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),B("lpMint"),B("lpVault"),q(md,5,"rewardInfos"),B("creator"),B(),q(w(),32,"padding")]),Ra=new Proxy(dd,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(M({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(r,e,t)}}),La=new Proxy(pd,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(M({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(r,e,t)}}),rr=new Proxy(fd,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return D(M({},i),{version:6,rewardInfos:i.rewardInfos.map(o=>{var s;return D(M({},o),{rewardType:((s=Object.entries(Jt).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),yd=L([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),xo=L([_("instruction"),w("nonce"),q(yd,5,"rewardTimeInfo")]),Bo=L([_("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),So=L([_("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),GA=L([w("state"),B("id"),B("owner"),w("deposited"),q(w(),1,"rewardDebts")]),ir=L([w("state"),B("id"),B("owner"),w("deposited"),q(Y(),1,"rewardDebts"),w(""),w("voteLockedBalance"),q(w(),15)]),XA=L([w("state"),B("id"),B("owner"),w("deposited"),q(w(),2,"rewardDebts")]),Oa=L([w("state"),B("id"),B("owner"),w("deposited"),q(Y(),2,"rewardDebts"),q(w(),17)]),Na=L([w(),w("state"),B("id"),B("owner"),w("deposited"),q(Y(),5,"rewardDebts"),q(w(),16)]),et=L([_("instruction"),w("amount")]),bd=L([B("mint"),B("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),ka("digitShift"),q(_(),7,"reserved1"),q(w(),7,"reserved2")]),Ma=L([fe(8),B("governanceProgramId"),B("realm"),B("realmGoverningTokenMint"),B("realmAuthority"),q(_(),32,"reserved1"),q(bd,4,"votingMints"),ui("timeOffset"),_("bump"),q(_(),7,"reserved2"),q(w(),11,"reserved3")]),gd=L([ui("startTime"),ui("endTime"),_("kind"),q(_(),15,"reserved")]),wd=L([q(gd,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),Ue("isUsed"),Ue("allowClawback"),_("votingMintConfigIdx"),q(_(),29,"reserved")]),_a=L([fe(8),B("voterAuthority"),B("registrar"),q(wd,32,"deposits"),_("voterBump"),_("voterWweightRecordBump"),q(_(),94,"reserved")]);var $A=ae("Raydium_farm_config"),Ea=new Va("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Fa=new Va("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),va={3:Ra,5:La,6:rr},Wa={3:ir,5:Oa,6:Na},Ko=r=>[3,5,6].indexOf(r)!==-1,Co=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,o={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=o[e])==null?void 0:s.call(o)},Jt={"Standard SPL":0,"Option tokens":1},ct={[no.toString()]:3,[ro.toString()]:5,[Sn.toString()]:6};import{PublicKey as ie,SystemProgram as un,SYSVAR_RENT_PUBKEY as kd,SYSVAR_CLOCK_PUBKEY as ar,TransactionInstruction as Fe}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as hd,TOKEN_PROGRAM_ID as st,ASSOCIATED_TOKEN_PROGRAM_ID as Td}from"@solana/spl-token";import pi from"bn.js";function Ro(r,e,t){return oe([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],r)}function Lo(r,e){return oe([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],r)}function Oo(r,e){return oe([e.toBuffer()],r)}function No(r,e,t){return oe([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],r)}function Mo(r,e,t){return oe([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],r)}function _o(r,e,t,n){return oe([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}import it from"bn.js";var or=ae("Raydium.farm.util");function sr({programId:r,poolId:e,mint:t,type:n}){let{publicKey:i}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return i}function Qe({programId:r,poolId:e,owner:t,version:n}){let{publicKey:i}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return i}var Da=({programId:r,poolId:e})=>oe([e.toBuffer()],r);function qa(r){return{isSet:new it(1),rewardPerSecond:G(r.perSecond),rewardOpenTime:G(r.openTime),rewardEndTime:G(r.endTime),rewardType:G(Jt[r.rewardType])}}function Vo(r){return G(r.endTime).sub(G(r.openTime)).mul(G(r.perSecond))}function Ln(r){let e=Wa[r];return e||or.logWithError("invalid version",r),e}function Ad(r){let e=va[r];return e||or.logWithError("invalid version",r),e}function Pd(r,e,t,n){if(r.version===3||r.version===5){if(r.lastSlot.gte(new it(t)))return r;let i=new it(t).sub(r.lastSlot);r.lastSlot=new it(t);for(let o of r.rewardInfos){if(e.amount.eq(new it(0)))continue;let s=o.perSlotReward.mul(i);o.perShareReward=o.perShareReward.add(s.mul(new it(10).pow(new it(r.version===3?9:15))).div(e.amount)),o.totalReward=o.totalReward.add(s)}}else if(r.version===6)for(let i of r.rewardInfos){if(i.rewardState.eq(new it(0)))continue;let o=it.min(new it(n),i.rewardEndTime);if(i.rewardOpenTime.gte(o))continue;let a=o.sub(i.rewardLastUpdateTime).mul(i.rewardPerSecond),u=i.totalReward.sub(i.totalRewardEmissioned);u.lt(a)?(a=u,i.rewardLastUpdateTime=i.rewardLastUpdateTime.add(u.div(i.rewardPerSecond))):i.rewardLastUpdateTime=o,!e.amount.eq(new it(0))&&(i.accRewardPerShare=i.accRewardPerShare.add(a.mul(r.rewardMultiplier).div(e.amount)),i.totalRewardEmissioned=i.totalRewardEmissioned.add(a))}return r}async function bP({connection:r,farmPools:e,owner:t,config:n,chainTime:i}){let o=!1,s=!1,a=new it(10),u=[];for(let d of e){let p=ye(d);p.version===6?s=!0:o=!0,u.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&u.push({pubkey:Qe({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let c={},l=await Bn(r,u,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(c[g]=M({},c[g]),y==="state"){let P=Ad(p);(!b||!b.data||b.data.length!==P.span)&&or.logWithError(`invalid farm state account info, pools.id, ${d}`),c[g].state=P.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Ht.span)&&or.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),c[g].lpVault=Ht.decode(b.data);else if(y==="ledger"){let P=Ln(p);b&&b.data&&(b.data.length!==P.span&&or.logWithError(`invalid farm ledger account info, ledger, ${d}`),c[g].ledger=P.decode(b.data))}}let m=s||o?await r.getSlot():0;for(let d of Object.keys(c))c[d]!==void 0&&(c[d].state=Pd(c[d].state,c[d].lpVault,m,i));for(let[d,{state:p,ledger:y}]of Object.entries(c))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new it(9)):a.pow(new it(15)),b=p.rewardInfos.map((g,P)=>{let A=y.rewardDebts[P];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(A)});c[d].wrapped=D(M({},c[d].wrapped),{pendingRewards:b})}return c}function gP(r,e=Date.now()){if(r.version===6){let t=r.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>aa(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ua(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 Eo(r,e,t,n){let i=await r.getAccountInfo(e);if(i===null)throw Error("registrar info check error");let s=Ma.decode(i.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 c=_a.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return c===-1?{index:s,isInit:!1}:{index:c,isInit:!0}}var Id=ae("Raydium_farm_instruction"),ur={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 fi(r){let{version:e,id:t,ledger:n,programId:i,owner:o}=r,s={3:9,5:10}[e];s||Id.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(To.span);To.encode({instruction:s},a);let u=[k({pubkey:t}),k({pubkey:n}),k({pubkey:o,isWritable:!1}),k({pubkey:un.programId,isWritable:!1}),k({pubkey:kd,isWritable:!1})];return{instruction:new Fe({programId:i,keys:u,data:a}),instructionType:V.FarmV3CreateLedger}}function Ua(r){var n;let e=Buffer.alloc(xo.span);xo.encode({instruction:0,nonce:new pi(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...Di,k({pubkey:r.farmId}),k({pubkey:r.farmAuthority,isWritable:!1}),k({pubkey:r.lpVault}),k({pubkey:r.lpMint,isWritable:!1}),k({pubkey:r.lockVault}),k({pubkey:r.lockMint,isWritable:!1}),k({pubkey:(n=r.lockUserAccount)!=null?n:Me}),k({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let i of r.rewardInfo)t.push(k({pubkey:i.rewardMint,isWritable:!1}),k({pubkey:i.rewardVault}),k({pubkey:i.userRewardToken}));return{instruction:new Fe({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function Ga(r){let e=Buffer.alloc(Io.span);Io.encode({instruction:5},e);let t=[k({pubkey:st,isWritable:!1}),k({pubkey:r.id}),k({pubkey:r.authority,isWritable:!1}),k({pubkey:r.lpVault,isWritable:!1}),k({pubkey:r.rewardVault}),k({pubkey:r.userRewardToken}),k({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Fe({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function xd(r,e,t,n,i,o,s,a,u,c,l,m,d){let p=L([_("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Ur,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...ur.voterStakeRegistryDeposit,...f]);return new Fe({keys:y,programId:r,data:b})}function Bd(r,e,t,n){let i=L([]),o=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([...ur.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Fe({keys:o,programId:r,data:a})}function Sd(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y){let f=L([_("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Ur,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let P=Buffer.from([...ur.voterStakeRegistryWithdraw,...g]);return new Fe({keys:b,programId:r,data:P})}function Kd(r,e,t,n,i,o){let s=L([_("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);return s.encode({ins:23},u),new Fe({keys:a,programId:r,data:u})}function Cd(r,e,t,n,i,o,s,a){let u=L([_("voterBump"),_("voterWeightRecordBump")]),c=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Ur,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...ur.voterStakeRegistryCreateVoter,...l]);return new Fe({keys:c,programId:r,data:m})}function Rd(r,e,t,n,i,o,s,a,u,c,l,m){let d=L([_("depositEntryIndex"),_("kind"),_("option"),w("startTs"),Ye("periods"),Ue("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:st,isSigner:!1,isWritable:!1},{pubkey:Td,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:u,option:c===void 0?0:1,startTs:c,periods:l,allowClawback:m},y);let f=Buffer.from([...ur.voterStakeRegistryCreateDepositEntry,...y]);return new Fe({keys:p,programId:r,data:f})}async function MP({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:o,owner:s,poolId:a,tokenProgram:u}){let c=Ro(n,i,o).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=ir.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new pi(0)))throw Error("user do not has new stake amount");let y=Lo(e,a).publicKey,f=Oo(e,a).publicKey,{publicKey:b,nonce:g}=No(n,c,s),P=be(b,y,u).publicKey,{publicKey:A,nonce:T}=Mo(n,c,s),h=_o(t,i,o,s).publicKey,I=[],S=be(s,y,u).publicKey;if(await r.getAccountInfo(S)===null&&I.push(hd(s,S,s,y)),await r.getAccountInfo(b)===null){let H=Kd(t,i,s,o,s,h);I.push(H,Cd(n,c,b,A,s,s,g,T))}let{index:N,isInit:F}=await Eo(r,c,b,y);return F||I.push(Rd(n,c,b,P,s,s,y,N,0,void 0,0,!1)),I.push(xd(n,c,b,P,S,s,l,a,y,f,e,N,p),Bd(n,c,b,A)),I}async function _P({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:i,communityTokenMint:o,owner:s,poolId:a,tokenProgram:u}){let c=Ro(n,i,o).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=ir.decode(m.data);if(d.voteLockedBalance.eq(new pi(0)))throw Error("user has vote locked balance = 0");let p=Lo(e,a).publicKey,y=Oo(e,a).publicKey,{publicKey:f}=No(n,c,s),b=be(f,p,u).publicKey,{publicKey:g}=Mo(n,c,s),P=_o(t,i,o,s).publicKey,A=[],{index:T,isInit:h}=await Eo(r,c,f,p);if(!h)throw Error("deposit entry index check error");return A.push(Sd(n,c,f,s,P,g,b,be(s,p,u).publicKey,l,a,p,y,e,T,d.voteLockedBalance)),A}function Fo({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let o=Buffer.alloc(Bo.span);Bo.encode({instruction:3,rewardReopenTime:G(i.openTime),rewardEndTime:G(i.endTime),rewardPerSecond:G(i.perSecond)},o);let s=[k({pubkey:st,isWritable:!1}),k({pubkey:n.id}),k({pubkey:n.lpVault,isWritable:!1}),k({pubkey:e}),k({pubkey:t}),k({pubkey:r,isWritable:!1,isSigner:!0})];return new Fe({programId:n.programId,keys:s,data:o})}function vo({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let o=Buffer.alloc(So.span);So.encode({instruction:4,isSet:new pi(1),rewardPerSecond:G(i.perSecond),rewardOpenTime:G(i.openTime),rewardEndTime:G(i.endTime),rewardType:G(Jt[i.rewardType])},o);let s=[...Di,k({pubkey:t.id}),k({pubkey:t.authority,isWritable:!1}),k({pubkey:i.mint,isWritable:!1}),k({pubkey:n}),k({pubkey:e}),k({pubkey:r,isWritable:!1,isSigner:!0})];return new Fe({programId:t.programId,keys:s,data:o})}function VP(r){let{farmInfo:e,farmKeys:t,version:n,lpAccount:i,rewardAccounts:o,owner:s,instruction:a,amount:u,deposit:c}=r,[l,m]=[new ie(e.programId),new ie(e.id)],d=Qe({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(et.span);et.encode({instruction:a,amount:u},p);let y=n===6?[k({pubkey:st,isWritable:!1}),...c?[k({pubkey:un.programId,isWritable:!1})]:[],k({pubkey:m}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:new ie(t.lpVault)}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i})]:[k({pubkey:m}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:d}),k({pubkey:s,isWritable:!1,isSigner:!0}),k({pubkey:i}),k({pubkey:new ie(t.lpVault)}),k({pubkey:o[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:ar,isWritable:!1}),k({pubkey:st,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(k({pubkey:o[f]})),y.push(k({pubkey:new ie(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(k({pubkey:new ie(t.rewardInfos[f].vault)})),y.push(k({pubkey:o[f]}));return new Fe({programId:l,keys:y,data:p})}function cr(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,u]=[new ie(e.programId),new ie(e.id)],c=Qe({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(et.span);et.encode({instruction:2,amount:G(s)},l);let m=[k({pubkey:st,isWritable:!1}),k({pubkey:u}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:new ie(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(k({pubkey:i[d]}));return new Fe({programId:a,keys:m,data:l})}function lr(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(et.span);et.encode({instruction:12,amount:G(s)},m);let d=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:ar,isWritable:!1}),k({pubkey:st,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:i[p]})),d.push(k({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Fe({programId:u,keys:d,data:m})}function mr(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(et.span);et.encode({instruction:11,amount:G(s)},m);let d=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:ar,isWritable:!1}),k({pubkey:st,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Fe({programId:u,keys:d,data:m})}function Xa(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(et.span);et.encode({instruction:10,amount:G(s)},m);let d=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:ar,isWritable:!1}),k({pubkey:st,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new Fe({programId:u,keys:d,data:m})}function za(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[u,c]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(et.span);et.encode({instruction:11,amount:G(s)},m);let d=[k({pubkey:c}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new ie(t.lpVault)}),k({pubkey:i[0]}),k({pubkey:new ie(t.rewardInfos[0].vault)}),k({pubkey:ar,isWritable:!1}),k({pubkey:st,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:i[p]})),d.push(k({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new Fe({programId:u,keys:d,data:m})}function Ya(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,u]=[new ie(e.programId),new ie(e.id)],c=Qe({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(et.span);et.encode({instruction:1,amount:G(s)},l);let m=[k({pubkey:st,isWritable:!1}),k({pubkey:un.programId,isWritable:!1}),k({pubkey:u}),k({pubkey:new ie(t.authority),isWritable:!1}),k({pubkey:new ie(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(k({pubkey:i[d]}));return new Fe({programId:a,keys:m,data:l})}var dr=class extends Be{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Me)){let n=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Vo(D(M({},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:i=Sn,txVersion:o}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new ke(e.lpMint.address),lockInfo:{lockMint:Ea,lockVault:Fa},version:6,rewardInfos:t,programId:i},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=He({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(rr.span);u.addInstruction({instructions:[Od.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:rr.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Da({programId:new ke(a.programId),poolId:l.publicKey}),y=sr({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let h of a.rewardInfos){h.openTime>=h.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",h.openTime.toString()),isNaN(Jt[h.rewardType])&&this.logAndCreateError("rewardType error",h.rewardType),Number(h.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",h.perSecond),f.push(qa(h));let{rewardPubKey:I,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:h,payer:c});S&&u.addInstruction(S),I||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=h.mint.equals(Me)?new ke(_e.address):h.mint;b.push({rewardMint:x,rewardVault:sr({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:I})}let{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({mint:new ke(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});P&&u.addInstruction(P),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:T}=Ua({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 u.addInstruction({instructions:[A],instructionTypes:[T]}).versionBuild({txVersion:o,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var b;let o=ct[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=ye((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 u=t||this.scope.ownerPubKey,c=n.mint.equals(Me)?new ke(_e.address):n.mint,l=a.rewardInfos.findIndex(g=>new ke(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let d=(b=m.vault)!=null?b:Me,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Fo({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let o=ct[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=ye((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 u=t||this.scope.ownerPubKey,c=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Me)?new ke(_e.address):m.mint,p=a.rewardInfos.findIndex(A=>new ke(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:u});g&&c.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let P=Fo({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[P],instructionTypes:[V.FarmV6Restart]})}return c.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:o}=e,s=ct[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ye((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder(),l=i.mint.equals(Me)?new ke(_e.address):i.mint,m=sr({programId:new ke(n.programId),poolId:new ke(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:i,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,c.addInstruction({instructions:[vo({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:o}=e,s=ct[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ye((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of i){let m=l.mint.equals(Me)?new ke(_e.address):l.mint,d=sr({programId:new ke(n.programId),poolId:new ke(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=vo({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:D(M({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[V.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:o,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=ct[d];Ko(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new ke(n.programId),new ke(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=Qe({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),P=this.createTxBuilder();P.addCustomComputeBudget(l);let A={};for(let W of this.scope.account.tokenAccounts)if(a){let j=be(this.scope.ownerPubKey,W.mint,W.programId).publicKey;W.publicKey&&j.equals(W.publicKey)&&(A[W.mint.toString()]=W.publicKey)}else A[W.mint.toString()]=W.publicKey;let T=b.lpMint,h=A[T.address];h||this.logAndCreateError("you don't have any lp","lp zero",A);let I=[];for(let W of m){let j=s&&W.mint.address===ne.toString(),se=A[W.mint.address];if(!se){let{account:Z,instructionParams:kt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:W.mint.programId,mint:new ke(W.mint.address),notUseTokenAccount:j,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!j,associatedOnly:j?!1:a,checkCreateATAOwner:u});se=Z,kt&&P.addInstruction(kt)}A[W.mint.address]=se,I.push(se)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Ln(p).decode(x.data)),n.programId!==Sn.toString()&&!S){let{instruction:W,instructionType:j}=fi({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});P.addInstruction({instructions:[W],instructionTypes:[j]})}let K=Co({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:I});K&&this.logAndCreateError(K);let N={amount:G(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:h,rewardAccounts:I,userAuxiliaryLedgers:c==null?void 0:c.map(W=>new ke(W))},F=p===6?Ya(N):p===5?za(N):Xa(N),H={3:V.FarmV3Deposit,5:V.FarmV5Deposit,6:V.FarmV6Deposit};return P.addInstruction({instructions:[F],instructionTypes:[H[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:o,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!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=ct[n.programId];Ko(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 K of this.scope.account.tokenAccounts)if(u){let N=be(this.scope.ownerPubKey,K.mint).publicKey;K.publicKey&&N.equals(K.publicKey)&&(b[K.mint.toString()]=K.publicKey)}else b[K.mint.toString()]=K.publicKey;if(o)o.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let K=Qe({programId:new ke(n.programId),poolId:new ke(n.id),owner:this.scope.ownerPubKey,version:p}),N=await this.scope.connection.getAccountInfo(K);N||this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:N}),Ln(p).decode(N.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id})}let g=y.lpMint.address,P=s&&g===ne.toString(),A=b[g.toString()];if(!A){let{account:K,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new ke(g),notUseTokenAccount:P,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:P?!1:u,checkCreateATAOwner:c});A=K,N&&f.addInstruction(N)}b[g.toString()]=A;let T=[];for(let K of d){let N=s&&K.mint.address===ne.toString(),F=b[K.mint.address];if(!F){let{account:H,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:K.mint.programId,mint:new ke(K.mint.address),notUseTokenAccount:N,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!N,associatedOnly:N?!1:u,checkCreateATAOwner:c});F=H,W&&f.addInstruction(W)}b[K.mint.address]=F,T.push(F)}let h=Co({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:T});h&&this.logAndCreateError(h);let I={amount:G(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:T,userAuxiliaryLedgers:l==null?void 0:l.map(K=>new ke(K))},S=p===6?cr(I):p===5?lr(I):mr(I),x={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.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 i=ye((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),o=ct[e.programId];o!==6&&this.logAndCreateError("invalid farm version",o);let s=e.rewardInfos.findIndex(y=>y.mint.address===Me.toString()?new ke(_e.address):t),a=i.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Me,c=this.createTxBuilder(),l;if(t.equals(Me)){let y=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Vo(D(M({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new E(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,c.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),c.addInstruction({instructions:[Ld(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Ga({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(o){let f=be(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)=>D(M({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:P}=y,A=ct[f],T=b.address,h=n&&T===ne.toString(),I=m[T];if(!I){let{account:H,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new ke(T),notUseTokenAccount:h,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:o,checkCreateATAOwner:s});I=H,W&&l.addInstruction(W)}m[T.toString()]=I;let S=[];for(let H of g){let W=n&&H.mint.address===ne.toString(),j=m[H.mint.address];if(!j){let{account:se,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:H.mint.programId,mint:new ke(H.mint.address),notUseTokenAccount:W,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!W,associatedOnly:W?!1:o,checkCreateATAOwner:s});j=se,Z&&l.addInstruction(Z)}m[H.mint.address]=j,S.push(j)}let x=p[P],K={amount:Ke,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:I,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(H=>new ke(H))},N=A===6?cr(K):A===5?lr(K):mr(K),F={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};l.addInstruction({instructions:[N],instructionTypes:[F[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as Oe}from"@solana/web3.js";import{AccountLayout as Ap,NATIVE_MINT as Ru,TOKEN_PROGRAM_ID as hi}from"@solana/spl-token";var ok=L([Ye("mintAuthorityOption"),B("mintAuthority"),w("supply"),_("decimals"),_("isInitialized"),Ye("freezeAuthorityOption"),B("freezeAuthority")]);import{PublicKey as Nd}from"@solana/web3.js";import{MintLayout as Ha,TOKEN_PROGRAM_ID as Md}from"@solana/spl-token";var pk=async({connection:r,mint:e})=>{let t=await r.getAccountInfo(new Nd(e));return!t||t.data.length!==Ha.span?void 0:Ha.decode(t.data)},fk=({mint:r,decimals:e,programId:t=Md,logoURI:n="",priority:i=3})=>{let o=r.toBase58().substring(0,6);return{address:r.toBase58(),decimals:e,symbol:o,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:o,tags:[],priority:i}},Qa=r=>new pe({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),yk=i=>{var o=i,{amount:r,isRaw:e,name:t}=o,n=Ie(o,["amount","isRaw","name"]);return new Te(new pe({mint:n.address,decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};function bk(r){return r.address===Tt.address?_e:r}function gk(r){return r.address===_e.address?Tt:r}import{TOKEN_PROGRAM_ID as Mn,ASSOCIATED_TOKEN_PROGRAM_ID as Hd}from"@solana/spl-token";import{PublicKey as ge,TransactionInstruction as Et,SystemProgram as ru,SYSVAR_RENT_PUBKEY as Qd}from"@solana/web3.js";var Wo=L([_("instruction"),w("amountIn"),w("minAmountOut")]),Do=L([_("instruction"),w("maxAmountIn"),w("amountOut")]),Ck=L([_("instruction"),_("nonce")]),qo=L([_("instruction"),_("nonce"),w("startTime")]),Uo=L([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),B("baseVault"),B("quoteVault"),B("baseMint"),B("quoteMint"),B("lpMint"),B("openOrders"),B("marketId"),B("marketProgramId"),B("targetOrders"),B("withdrawQueue"),B("lpVault"),B("owner"),w("lpReserve"),q(w(),3,"padding")]),_d=L([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Y("swapBaseInAmount"),Y("swapQuoteOutAmount"),Y("swapQuoteInAmount"),Y("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),B("baseVault"),B("quoteVault"),B("baseMint"),B("quoteMint"),B("lpMint"),B("modelDataAccount"),B("openOrders"),B("marketId"),B("marketProgramId"),B("targetOrders"),B("owner"),q(w(),64,"padding")]),Go=L([_("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Xo=L([_("instruction"),w("amountIn")]),Rk={4:Uo,5:_d},ja=L([w("fee")]);import{PublicKey as Vd}from"@solana/web3.js";var Nn=new Vd("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ln=5e4,Ed=L([w("x"),w("y"),w("price")]),Fd=L([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),q(Ed,ln,"DataElement")]);function vd(r,e){return[0,ln-2]}function Wd(r){return[0,ln-2]}function Dd(r){return[0,ln-2]}function qd(r,e,t){let[n,i]=vd(e,t),o=n,s=i,a=0,u=e*r.multiplier/t;for(;o<=s;){if(a=Math.floor((s+o)/2),a===0||a>=ln-2)return[a,a,!1];let c=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(u===c)return[a,a,!0];if(u===l)return[a-1,a-1,!0];if(u===m)return[a+1,a+1,!0];if(u<l)s=a-1;else{if(u>l&&u<c)return[a-1,a,!0];if(u>c&&u<m)return[a,a+1,!0];o=a+1}}return[a,a,!1]}function zo(r,e,t){let[n,i,o]=qd(r,e,t);if(!o)return 0;if(n===i){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,u=r.DataElement[i].x,c=r.DataElement[i].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*r.multiplier*l/p}}function cn(r,e,t){return e*r.multiplier/t}function Za(r,e,t){return e*t/r.multiplier}function Ud(r,e){let[t,n]=Wd(e),i=t,o=n,s=0,a=e;for(;i<o;){if(s=Math.floor((o+i)/2),s<=0||s>ln-2)return[s,s,!1];let u=r.DataElement[s].x,c=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<c)o=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function Gd(r,e){let[t,n]=Dd(e),i=t,o=n,s=0,a=e;for(;i<=o;){if(s=Math.floor((o+i)/2),s<=0||s>=ln-2)return[s,s,!1];let u=r.DataElement[s].y,c=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<c&&a>u)return[s-1,s,!0];if(a<u&&a>l)return[s,s+1,!0];o=s-1}}return[s,s,!1]}function Ja(r,e,t,n){let i=n?e+t:e-t,[o,s,a]=Ud(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let u=r.DataElement[o].x,c=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].y;if(e>=u&&e<=c)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=d-(i-u)*r.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-i)*r.multiplier/l),[y,f,!1,a]}}}function Xd(r,e,t,n){let i=n?e-t:e+t,[o,s,a]=Gd(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let u=r.DataElement[o].x,c=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=u+m*(d-i)/r.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(i-p)/r.multiplier),[y,f,!1,a]}}}function zd(r,e){let t=Ja(r,e,0,!1);return t[3]?t[0]:0}function $a(r,e,t,n){let i=zo(r,e,t),o=cn(r,e,i),s=cn(r,t,i),a=cn(r,n,i),u=!0,[c,l,m,d]=Ja(r,o,a,u);if(!d)return 0;if(m)return n*r.multiplier/c;{let p=s-l;return Za(r,p,i)}}function eu(r,e,t,n){let i=zo(r,e,t),o=cn(r,e,i),s=cn(r,t,i),a=cn(r,n,i),u=!1,[c,l,m,d]=Xd(r,s,a,u);if(!d)return 0;if(m)return n*c/r.multiplier;{let p=o-l;return Za(r,p,i)}}function Yd(r){let e=Fd.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 tu(r,e,t,n){let i=zd(r,cn(r,e,zo(r,e,t)))/r.multiplier;return n?i:1/i}var On=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(Nn);e&&(this._layoutData=Yd(e==null?void 0:e.data))}}};var nu=ae("Raydium_liquidity_instruction");function iu(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:o,fixedSide:s}=r,a=Buffer.alloc(Go.span);Go.encode({instruction:3,baseAmountIn:G(i),quoteAmountIn:G(o),fixedSide:s==="base"?Ke:Ys},a);let u=[k({pubkey:Mn,isWritable:!1}),k({pubkey:new ge(e.id)}),k({pubkey:new ge(t.authority),isWritable:!1}),k({pubkey:new ge(t.openOrders),isWritable:!1}),k({pubkey:new ge(t.targetOrders)}),k({pubkey:new ge(e.lpMint.address)}),k({pubkey:new ge(t.vault.A)}),k({pubkey:new ge(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(k({pubkey:Nn})),u.push(k({pubkey:new ge(e.marketId),isWritable:!1}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:new ge(t.marketEventQueue),isWritable:!1})),new Et({programId:new ge(e.programId),keys:u,data:a})}function Yo(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:i}=r,o=ye(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Xo.span);Xo.encode({instruction:4,amountIn:G(i)},a);let u=[k({pubkey:Mn,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.mintLp.address}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return s===5?u.push(k({pubkey:Nn})):(u.push(k({pubkey:o.id})),u.push(k({pubkey:o.id}))),u.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks})),new Et({programId:o.programId,keys:u,data:a})}return new Et({programId:o.programId,keys:[]})}function ou({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:o,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:P,openTime:A,coinAmount:T,pcAmount:h,ammConfigId:I,feeDestinationId:S}){let x=L([_("instruction"),_("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),K=[{pubkey:Mn,isSigner:!1,isWritable:!1},{pubkey:Hd,isSigner:!1,isWritable:!1},{pubkey:ru.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:I,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}],N=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:P,openTime:A,coinAmount:T,pcAmount:h},N),{instruction:new Et({keys:K,programId:r,data:N}),instructionType:V.AmmV4CreatePool}}function zk(r){let e=L([_("instruction"),_("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new ge(r.id),isWritable:!1}),k({pubkey:new ge(r.authority),isWritable:!1}),k({pubkey:new ge(r.openOrders),isWritable:!1}),k({pubkey:new ge(r.vault.A),isWritable:!1}),k({pubkey:new ge(r.vault.B),isWritable:!1}),k({pubkey:new ge(r.mintLp.address),isWritable:!1}),k({pubkey:new ge(r.marketId),isWritable:!1}),k({pubkey:new ge(r.marketEventQueue),isWritable:!1})];return new Et({programId:new ge(r.programId),keys:n,data:t})}function jd({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},i){let o=ye(r),s=Buffer.alloc(Wo.span);Wo.encode({instruction:9,amountIn:G(t),minAmountOut:G(n)},s);let a=[k({pubkey:Mn,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders})];return i===4&&a.push(k({pubkey:o.targetOrders})),a.push(k({pubkey:o.vault.A}),k({pubkey:o.vault.B})),i===5&&a.push(k({pubkey:Nn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1})),new Et({programId:o.programId,keys:a,data:s})}function Zd({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},i){let o=ye(r),s=Buffer.alloc(Do.span);Do.encode({instruction:11,maxAmountIn:G(t),amountOut:G(n)},s);let a=[k({pubkey:Mn,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return i===5&&a.push(k({pubkey:Nn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Et({programId:o.programId,keys:a,data:s})}function yi(r){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:o,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return jd(D(M({},a),{amountIn:i,minAmountOut:o}),t);if(s==="out")return Zd(D(M({},a),{maxAmountIn:i,amountOut:o}),t);nu.logWithError("invalid params","params",r)}throw nu.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function Yk({poolKeys:r,userKeys:e,startTime:t}){let n=Buffer.alloc(qo.span);qo.encode({instruction:0,nonce:5,startTime:G(t)},n);let i=ye(r),o=[k({pubkey:Mn,isWritable:!1}),k({pubkey:ru.programId,isWritable:!1}),k({pubkey:Qd,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.authority,isWritable:!1}),k({pubkey:i.openOrders}),k({pubkey:i.mintLp.address}),k({pubkey:i.mintA.address,isWritable:!1}),k({pubkey:i.mintB.address,isWritable:!1}),k({pubkey:i.vault.A,isWritable:!1}),k({pubkey:i.vault.B,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.targetOrders}),k({pubkey:e.lpTokenAccount}),k({pubkey:i.id,isWritable:!1}),k({pubkey:i.marketProgramId,isWritable:!1}),k({pubkey:i.marketId,isWritable:!1}),k({pubkey:e.payer,isSigner:!0})];return new Et({programId:i.programId,keys:o,data:n})}function su({poolKeys:r}){let e=L([_("instruction"),_("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[k({pubkey:new ge(r.id),isWritable:!1}),k({pubkey:new ge(r.authority),isWritable:!1}),k({pubkey:new ge(r.openOrders),isWritable:!1}),k({pubkey:new ge(r.vault.A),isWritable:!1}),k({pubkey:new ge(r.vault.B),isWritable:!1}),k({pubkey:new ge(r.mintLp.address),isWritable:!1}),k({pubkey:new ge(r.marketId),isWritable:!1}),k({pubkey:new ge(r.marketEventQueue),isWritable:!1})];return{instruction:new Et({programId:new ge(r.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as Ge,TOKEN_2022_PROGRAM_ID as $t,ASSOCIATED_TOKEN_PROGRAM_ID as hu}from"@solana/spl-token";import{PublicKey as v,TransactionInstruction as At,SystemProgram as _n,Keypair as ts}from"@solana/web3.js";import Tu from"bn.js";import up from"bn.js";function au(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function Qk(r){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,r,!1),new Uint8Array(e)}function jk(r){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,r,!1),new Uint8Array(e)}function bi(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Ho(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function Qo(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function pr(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function uu(r,e){return pr(r,e)?null:Ho(r,e)}function cu(r,e){return pr(r,e)?null:Qo(r,e)}var Jd=Buffer.from("amm_config","utf8"),$d=Buffer.from("pool","utf8"),ep=Buffer.from("pool_vault","utf8"),tp=Buffer.from("pool_reward_vault","utf8"),lu=Buffer.from("position","utf8"),np=Buffer.from("tick_array","utf8"),rp=Buffer.from("operation","utf8"),ip=Buffer.from("pool_tick_array_bitmap_extension","utf8");function eh(r,e){return oe([Jd,au(e)],r)}function mu(r,e,t,n){return oe([$d,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function jo(r,e,t){return oe([ep,e.toBuffer(),t.toBuffer()],r)}function du(r,e,t){return oe([tp,e.toBuffer(),t.toBuffer()],r)}function we(r,e,t){return oe([np,e.toBuffer(),bi(t)],r)}function mn(r,e,t,n){return oe([lu,e.toBuffer(),bi(t),bi(n)],r)}function lt(r,e){return oe([lu,e.toBuffer()],r)}function gi(r){return oe([Buffer.from("metadata","utf8"),hn.toBuffer(),r.toBuffer()],hn)}function fr(r){return oe([rp],r)}function mt(r,e){return oe([ip,e.toBuffer()],r)}import St from"bn.js";var de=new St(0),at=new St(1),Ft=new St(-1),ut=new St(1).shln(64),wi=new St(1).shln(128),Zo=ut.sub(at),yr=64,pu=wi.subn(1),je=-443636,tt=-je,Kt=new St("4295048016"),Ct=new St("79226673521066979257578248091"),fu=16,yu="59543866431248",bu="184467440737095516",gu="15793534762490258745",Ai=new St(10).pow(new St(6)),op=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(op||{}),rh={[500]:10,[3e3]:60,[1e4]:200},ih={version:6,liquidity:de,tickCurrent:0,observationIndex:0,observationUpdateDuration: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},wu={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:[]},oh=new St("18446744073700000000");var sp=15,le=class{static async getTickArrays(e,t,n,i,o,s,a){let u=[],c=X.getTickArrayStartIndexByTick(i,o),l=X.getInitializedTickArrayInRange(s,a,o,c,Math.floor(sp/2));for(let p=0;p<l.length;p++){let{publicKey:y}=we(t,n,l[p]);u.push(y)}let m=(await It(e,u)).map(p=>p!==null?br.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=D(M({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,i,o,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,i,o,s);for(;a==null||a.liquidityGross.lten(0);){if(c=X.getNextTickArrayStartIndex(c,o,s),this.checkIsValidStartIndex(c,o))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,i,o){let s=Math.floor(e/le.tickCount(t)),a=n?X.searchLowBitFromStart(i,o,s-1,1,t):X.searchHightBitFromStart(i,o,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let o;if(i){let a=Ee-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a-1}}else{let a=0;for(;a<Ee;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a+1}}let{publicKey:s}=we(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,o,s){let a=X.getTickArrayStartIndexByTick(i,o),u=Math.floor((i-a)/o),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u-1}else for(u=u+1;u<Ee;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=we(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:c.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(X.checkIsOutOfBoundary(e)){if(e>tt)return!1;let n=X.getTickArrayStartIndexByTick(je,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ee*e}};import re from"bn.js";import{PublicKey as Wt}from"@solana/web3.js";import Re from"bn.js";var Jo=14,vt=class{static maxTickInTickarrayBitmap(e){return e*Ee*dn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let o=n*i;return e<0?{minValue:-o,maxValue:-o+n}:{minValue:o,maxValue:o+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=i?t-le.tickCount(n):t+le.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*Ee,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(i){let l=e.shln(1024-c-1),m=uu(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-o}}else{let l=e.shrn(c),m=cu(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-le.tickCount(n)}}}},gr=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=vt.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=vt.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:i}=this.getBitmap(e,t,n),o=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:X.mergeTickArrayBitmap(i).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let o=le.tickCount(t),s=n?e-o:e+o,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:o,maxValue:s}=vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let u=X.mergeTickArrayBitmap(e).shln(dn-1-a),c=pr(512,u)?null:Ho(512,u);if(c!==null){let l=t-c*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let u=X.mergeTickArrayBitmap(e).shrn(a),c=pr(512,u)?null:Qo(512,u);if(c!==null){let l=t+c*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)%vt.maxTickInTickarrayBitmap(t),i=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(i=dn-i),i}};import Rt from"bn.js";var wr=class{static getfeeGrowthInside(e,t,n){let i=new Rt(0),o=new Rt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,o=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),o=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Rt(0),a=new Rt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let u=$.wrappingSubU128($.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),c=$.wrappingSubU128($.wrappingSubU128(e.feeGrowthGlobalX64B,o),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=$.mulDivFloor($.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,ut),u=t.tokenFeesOwedA.add(a),c=$.mulDivFloor($.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,ut),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=$.mulDivFloor($.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,ut),u=t.tokenFeesOwedA.add(a),c=$.mulDivFloor($.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,ut),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let o=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=$.wrappingSubU128(u,c.growthInsideLastX64),m=$.mulDivFloor(l,t.liquidity,ut),d=c.rewardAmountOwed.add(m);o.push(d)}return o}static GetPositionRewards(e,t,n,i){let o=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=$.wrappingSubU128(u,c.growthInsideLastX64),m=$.mulDivFloor(l,t.liquidity,ut),d=c.rewardAmountOwed.add(m);o.push(d)}return o}static getRewardGrowthInside(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Rt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Rt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push($.wrappingSubU128($.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return o}static getRewardGrowthInsideV2(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Rt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Rt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push($.wrappingSubU128($.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:o,epochInfo:s}){var b,g,P,A;let a=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),u=J.getSqrtPriceX64FromTick(t.tickLower),c=J.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+i:1-i,m=ce.getAmountsFromLiquidity(a,u,c,n,o),[d,p]=[Pe(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Pe(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[Pe(new Rt(new E(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,s,!0),Pe(new Rt(new E(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:sn(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Au}from"@solana/spl-token";var Ze=class{static getOutputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintA.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,c,o);return a.push(...d),{expectedAmountOut:m.mul(Ft),remainingAccounts:a,executionPrice:p,feeAmount:y}}static getInputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintB.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=we(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Ft),c,o);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Ze.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?gr.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):X.checkTickArrayIsInitialized(X.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=we(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=we(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)),i=t?X.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):X.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:o}=vt.nextInitializedTickArrayStartIndex(X.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=gr.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:i,rewardInfos:o}){var a,u,c;let s=[];for(let l=0;l<o.length;l++){let m=o[l],d=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(d===void 0)throw Error("get new reward mint info error");let p=D(M({},m),{perSecond:$.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Wt(d)});if(p.tokenMint.equals(Wt.default))continue;if(n<=p.openTime.toNumber()||i.eq(de)){s.push(p);continue}let y=new Re(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=$.mulDivFloor(f,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(b),P=$.mulDivFloor(f,p.emissionsPerSecondX64,ut),A=p.rewardTotalEmissioned.add(P);s.push(D(M({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let o of t){let s=X.getTickArrayStartIndexByTick(o,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=vt.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)*dn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await Bn(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of i)s.accountInfo!==null&&(o[s.pubkey.toString()]=Pu.decode(s.accountInfo.data));return o}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},o=[];for(let u of t){let c=X.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=X.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=we(u.programId,u.id,m);o.push({pubkey:d}),i[d.toString()]=u.id}}let s=await Bn(e,o,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=i[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=br.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=D(M({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:o=!0}){var a;let s=[];for(let u=0;u<e.length;u++){let c=e[u];c!==null&&(s.find(l=>l.equals(c.state.programId))||s.push(c.state.programId))}if(n){let u=n.tokenAccounts.map(d=>d.accountInfo.mint),c=[];for(let d of u)for(let p of s)c.push(lt(p,d).publicKey);let l=await It(t,c,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=ki.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=X._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),P=X._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:T}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,p.liquidity,!1),h=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:P.price,amountA:A,amountB:T,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>D(M({},x),{pendingReward:new Re(0)})),leverage:h,tokenFeeAmountA:new Re(0),tokenFeeAmountB:new Re(0)}];let I=await X.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await X.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=I,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(o){let d=Object.values(m),p=await It(t,d,{batchRequest:i}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=br.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let P=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,T=y[m[P].toString()],h=y[m[A].toString()],I=T.ticks[X.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=h.ticks[X.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:K}=await wr.GetPositionFees(f,g,I,S),N=await wr.GetPositionRewards(f,g,I,S);g.tokenFeeAmountA=x.gte(new Re(0))?x:new Re(0),g.tokenFeeAmountB=K.gte(new Re(0))?K:new Re(0);for(let F=0;F<N.length;F++)g.rewardInfos[F].pendingReward=N[F].gte(new Re(0))?N[F]:new Re(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:o,slippage:s,priceLimit:a=new E(0)}){var N;let u,c=n.toBase58()===e.mintA.address,[l,m]=c?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new E(0))?u=c?Kt.add(new Re(1)):Ct.sub(new Re(1)):u=J.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let d=Pe(o,l,i,!1),{expectedAmountOut:p,remainingAccounts:y,executionPrice:f,feeAmount:b}=Ze.getOutputAmountAndRemainAccounts(e,t,n,d.amount.sub((N=d.fee)!=null?N:de),u),g=Pe(p,m,i,!1),P=J.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),A=c?P:new E(1).div(P),T=p.mul(new Re(Math.floor((1-s)*1e10))).div(new Re(1e10)),h=Pe(T,m,i,!1),I=c?e.currentPrice:new E(1).div(e.currentPrice),S=new E(A).sub(I).abs(),x=I,K=new Ve(new E(S).mul(10**15).toFixed(0),new E(x).mul(10**15).toFixed(0));return{realAmountIn:d,amountOut:g,minAmountOut:h,expirationTime:sn(d.expirationTime,g.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:K,fee:b,remainingAccounts:y}}static async computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:o,epochInfo:s}){let a=i.address===e.mintB.address,[u,c]=a?[e.mintA,e.mintB]:[e.mintB,e.mintA],[l,m]=[new pe(D(M({},u),{mint:u.address,isToken2022:u.programId===Au.toBase58()})),new pe(D(M({},c),{mint:c.address,isToken2022:c.programId===Au.toBase58()}))],{realAmountIn:d,amountOut:p,minAmountOut:y,expirationTime:f,currentPrice:b,executionPrice:g,priceImpact:P,fee:A,remainingAccounts:T}=await Ze.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Wt(u.address),amountIn:n,slippage:o,epochInfo:s}),h=D(M({},d),{amount:new Te(l,d.amount),fee:d.fee===void 0?void 0:new Te(l,d.fee)}),I=D(M({},p),{amount:new Te(m,p.amount),fee:p.fee===void 0?void 0:new Te(m,p.fee)}),S=D(M({},y),{amount:new Te(m,y.amount),fee:y.fee===void 0?void 0:new Te(m,y.fee)}),x=new ze({baseToken:l,denominator:new Re(10).pow(new Re(20+l.decimals)),quoteToken:m,numerator:b.mul(new E(10**(20+m.decimals))).toFixed(0)}),K=new ze({baseToken:l,denominator:new Re(10).pow(new Re(20+l.decimals)),quoteToken:m,numerator:g.mul(new E(10**(20+m.decimals))).toFixed(0)}),N=new Te(l,A);return{realAmountIn:h,amountOut:I,minAmountOut:S,expirationTime:f,currentPrice:x,executionPrice:K,priceImpact:P,fee:N,remainingAccounts:T}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var y,f,b;let o=e[t],s=X.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=X.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),u=Math.max(s,o.priceMin),l=Math.min(a,o.priceMax)-u,m=a-s,d=o.priceMax-o.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:o.feeApr*p,rewardsApr:[(y=o.rewardApr[0])!=null?y:0*p,(f=o.rewardApr[1])!=null?f:0*p,(b=o.rewardApr[2])!=null?b:0*p],apr:o.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:o,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[Tn(e.mintA.address).toString()],d=i[Tn(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=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),b=J.getSqrtPriceX64FromTick(s),g=J.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:h}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,o,!1,!1,0),I=new E(P.toString()).div(new E(10).pow(p)).mul(m.value).add(new E(A.toString()).div(new E(10).pow(y)).mul(d.value)),S=new E(T.toString()).div(new E(10).pow(p)).mul(m.value).add(new E(h.toString()).div(new E(10).pow(y)).mul(d.value)),x=S.div(I.add(S)).div(S),N=new E(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),F=3600*24*365,H=e.rewardDefaultInfos.map(W=>{var Z,kt;let j=W.mint.decimals,se=i[W.mint.address];return u<((Z=W.startTime)!=null?Z:0)||u>((kt=W.endTime)!=null?kt:0)||!W.perSecond||!se||j===void 0?0:new E(se.value).mul(new E(W.perSecond).mul(F)).div(new E(10).pow(j)).mul(x).mul(100).toNumber()});return{feeApr:N,rewardsApr:H,apr:N+H.reduce((W,j)=>W+j,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:o,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,P;let l=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),m=J.getSqrtPriceX64FromTick(n),d=J.getSqrtPriceX64FromTick(i),p=a?1-s:1+s,y=Pe(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new Re(new E(y.amount.sub((P=y.fee)!=null?P:de).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Re(0);else if(l.lte(d)){let A=ce.getLiquidityFromTokenAmountA(l,d,f,!a),T=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:T}else b=t?new Re(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Ze.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:o,slippage:s,add:a}){var b,g,P,A;let u=J.getSqrtPriceX64FromTick(n),c=J.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(J.priceToSqrtPriceX64(new E(t.price),t.mintA.decimals,t.mintB.decimals),u,c,o,a),[d,p]=[Pe(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Pe(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[Pe(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.feeConfig,e,!0),Pe(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:o,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:sn(d.expirationTime,p.expirationTime)}}static async fetchComputeClmmInfo({connection:e,poolInfo:t}){let n=await e.getAccountInfo(new Wt(t.id));if(!n)throw new Error(`pool not found ${t.id}`);let i=Pi.decode(n.data),o=mt(new Wt(t.programId),new Wt(t.id)).publicKey,s=await Ze.fetchExBitmaps({connection:e,exBitmapAddress:[o],batchRequest:!1});return D(M({},i),{id:new Wt(t.id),programId:new Wt(t.programId),mintA:t.mintA,mintB:t.mintB,ammConfig:D(M({},t.config),{id:new Wt(t.config.id),fundOwner:""}),currentPrice:new E(t.price),exBitmapInfo:s[o.toBase58()],startTime:i.startTime.toNumber()})}};function Gh({poolInfo:r,tickLower:e,tickUpper:t,amountA:n,amountB:i,slippage:o,add:s,epochInfo:a,amountHasFee:u}){var A,T,h,I;let[c,l,m,d]=e<t?[e,t,n,i]:[t,e,i,n],p=J.priceToSqrtPriceX64(new E(r.price),r.mintA.decimals,r.mintB.decimals),y=J.getSqrtPriceX64FromTick(c),f=J.getSqrtPriceX64FromTick(l),[b,g]=[Pe(m,(A=r.mintA.extensions)==null?void 0:A.feeConfig,a,!u),Pe(d,(T=r.mintB.extensions)==null?void 0:T.feeConfig,a,!u)],P=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((h=b.fee)!=null?h:de),g.amount.sub((I=g.fee)!=null?I:de));return ce.getAmountsOutFromLiquidity({poolInfo:r,tickLower:e,tickUpper:t,liquidity:P,slippage:o,add:s,epochInfo:a,amountAddFee:!u})}var $=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),o=i.div(n);return i.mod(n).eq(de)||(o=o.add(at)),o}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(at)).div(n)}static x64ToDecimal(e,t){return new E(e.toString()).div(E.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(E.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(wi).sub(t).mod(wi)}};function ve(r,e){return $o(r.mul(e),64,256)}function ap(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function $o(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var J=class{static sqrtPriceX64ToPrice(e,t,n){return $.x64ToDecimal(e).pow(2).mul(E.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return $.decimalToX64(e.mul(E.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){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 i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){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 i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(de))return e;let o=t.shln(yr);if(i){let s=o,a=o.add(n.mul(e));return a.gte(s)?$.mulDivCeil(s,e,a):$.mulDivRoundingUp(s,at,s.div(e).add(n))}else{let s=n.mul(e);if(!o.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=o.sub(s);return $.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let o=n.shln(yr);if(i)return e.add(o.div(t));{let s=$.mulDivRoundingUp(o,at,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 re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=ve(n,new re("18444899583751176192"))),(t&4)!=0&&(n=ve(n,new re("18443055278223355904"))),(t&8)!=0&&(n=ve(n,new re("18439367220385607680"))),(t&16)!=0&&(n=ve(n,new re("18431993317065453568"))),(t&32)!=0&&(n=ve(n,new re("18417254355718170624"))),(t&64)!=0&&(n=ve(n,new re("18387811781193609216"))),(t&128)!=0&&(n=ve(n,new re("18329067761203558400"))),(t&256)!=0&&(n=ve(n,new re("18212142134806163456"))),(t&512)!=0&&(n=ve(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=ve(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=ve(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=ve(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=ve(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=ve(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=ve(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=ve(n,new re("696457651848324352"))),(t&131072)!=0&&(n=ve(n,new re("26294789957507116"))),(t&262144)!=0&&(n=ve(n,new re("37481735321082"))),e>0&&(n=pu.div(n)),n}static getTickFromPrice(e,t,n){return J.getTickFromSqrtPriceX64(J.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Ct)||e.lt(Kt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),i=ap(n,32,128),o=new re("8000000000000000","hex"),s=0,a=new re(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new re(0))&&s<fu;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(o.mul(y)),o=o.shrn(1),s+=1}let c=a.shrn(32),m=i.add(c).mul(new re(yu)),d=$o(m.sub(new re(bu)),64,128).toNumber(),p=$o(m.add(new re(gu)),64,128).toNumber();return d==p?d:J.getSqrtPriceX64FromTick(p).lte(e)?p:d}},fn=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=J.getTickFromSqrtPriceX64(J.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let o=fn.getTickWithPriceAndTickspacing(e,t,n,i),s=J.getSqrtPriceX64FromTick(o);return J.sqrtPriceX64ToPrice(s,n,i)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(yr),s=t.sub(e);return i?$.mulDivRoundingUp($.mulDivCeil(o,s,t),at,e):$.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");return i?$.mulDivCeil(n,t.sub(e),ut):$.mulDivFloor(n,t.sub(e),ut)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let o=n.mul(e).mul(t),s=t.sub(e),a=o.div(s);return i?$.mulDivRoundingUp(a,at,Zo):a.shrn(yr)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),$.mulDivFloor(n,Zo,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,i,!1),a=ce.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,i,o),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,i,o),a=ce.getTokenAmountBFromLiquidity(t,e,i,o);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,i,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,o,s,a){let{amountA:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,i,s),l=o?1+a:1-a,m=new re(new E(u.toString()).mul(l).toFixed(0)),d=new re(new E(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:o,add:s,epochInfo:a,amountAddFee:u}){var P,A,T,h;let c=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),l=J.getSqrtPriceX64FromTick(t),m=J.getSqrtPriceX64FromTick(n),d=s?1+o:1-o,p=ce.getAmountsFromLiquidity(c,l,m,i,s),[y,f]=[Pe(p.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,u),Pe(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[Pe(new re(new E(p.amountA.toString()).mul(d).toFixed(0)),(T=e.mintA.extensions)==null?void 0:T.feeConfig,a,u),Pe(new re(new E(p.amountB.toString()).mul(d).toFixed(0)),(h=e.mintB.extensions)==null?void 0:h.feeConfig,a,u)];return{liquidity:i,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:sn(y.expirationTime,f.expirationTime)}}},pn=class{static swapCompute(e,t,n,i,o,s,a,u,c,l,m,d,p,y){if(d.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?Kt.add(at):Ct.sub(at)),s){if(y.lt(Kt))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(Ct))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let f=d.gt(de),b={amountSpecifiedRemaining:d,amountCalculated:de,sqrtPriceX64:m,tick:c>p?Math.min(p+le.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new re(0)},g=p,P=n[p],A=0,T=!s&&P.startTickIndex===b.tick;for(;!b.amountSpecifiedRemaining.eq(de)&&!b.sqrtPriceX64.eq(y);){if(A>10)throw Error("liquidity limit");let h={};h.sqrtPriceStartX64=b.sqrtPriceX64;let I=X.nextInitTick(P,b.tick,l,s,T),S=I||null,x=null;if(!(S!=null&&S.liquidityGross.gtn(0))){let N=Ze.nextInitializedTickArrayStartIndex({tickCurrent:b.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:o},g,s);if(!N.isExist)throw Error("swapCompute LiquidityInsufficient");g=N.nextStartIndex;let{publicKey:F}=we(e,t,g);x=F,P=n[g],S=X.firstInitializedTick(P,s)}h.tickNext=S.tick,h.initialized=S.liquidityGross.gtn(0),p!==g&&x&&(b.accounts.push(x),p=g),h.tickNext<je?h.tickNext=je:h.tickNext>tt&&(h.tickNext=tt),h.sqrtPriceNextX64=J.getSqrtPriceX64FromTick(h.tickNext);let K;if(s&&h.sqrtPriceNextX64.lt(y)||!s&&h.sqrtPriceNextX64.gt(y)?K=y:K=h.sqrtPriceNextX64,[b.sqrtPriceX64,h.amountIn,h.amountOut,h.feeAmount]=pn.swapStepCompute(b.sqrtPriceX64,K,b.liquidity,b.amountSpecifiedRemaining,a),b.feeAmount=b.feeAmount.add(h.feeAmount),f?(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.sub(h.amountIn.add(h.feeAmount)),b.amountCalculated=b.amountCalculated.sub(h.amountOut)):(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.add(h.amountOut),b.amountCalculated=b.amountCalculated.add(h.amountIn.add(h.feeAmount))),b.sqrtPriceX64.eq(h.sqrtPriceNextX64)){if(h.initialized){let N=S.liquidityNet;s&&(N=N.mul(Ft)),b.liquidity=ce.addDelta(b.liquidity,N)}T=h.tickNext!=b.tick&&!s&&P.startTickIndex===h.tickNext,b.tick=s?h.tickNext-1:h.tickNext}else if(b.sqrtPriceX64!=h.sqrtPriceStartX64){let N=J.getTickFromSqrtPriceX64(b.sqrtPriceX64);T=N!=b.tick&&!s&&P.startTickIndex===N,b.tick=N}++A}try{let{nextStartIndex:h,isExist:I}=le.nextInitializedTickArray(b.tick,l,s,i,o);I&&p!==h&&(b.accounts.push(we(e,t,h).publicKey),p=h)}catch{}return{amountCalculated:b.amountCalculated,feeAmount:b.feeAmount,sqrtPriceX64:b.sqrtPriceX64,liquidity:b.liquidity,tickCurrent:b.tick,accounts:b.accounts}}static swapStepCompute(e,t,n,i,o){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),u=i.gte(de);if(u){let l=$.mulDivFloor(i,Ai.sub(new re(o.toString())),Ai);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=J.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Ft).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=J.getNextSqrtPriceX64FromOutput(e,n,i.mul(Ft),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(i.mul(Ft))&&(s.amountOut=i.mul(Ft)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=i.sub(s.amountIn):s.feeAmount=$.mulDivCeil(s.amountIn,new re(o),Ai.sub(new re(o))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ee=60,dn=512,X=class{static getTickArrayAddressByTick(e,t,n,i){let o=X.getTickArrayStartIndexByTick(n,i),{publicKey:s}=we(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=X.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=Ee)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=le.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ee,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*Ee,o=Math.floor(t/i)+512,s=Math.abs(o);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Ee:e+t*Ee}static mergeTickArrayBitmap(e){let t=new up(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,o){let s=Math.floor(i/(n*Ee));return[...X.searchLowBitFromStart(e,t,s-1,o,n),...X.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return X.searchHightBitFromStart(e,t,0,dn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,o){let s=[],a=X.getAllInitializedTickArrayStartIndex(n,i,o);for(let u of a){let{publicKey:c}=we(e,t,u);s.push({tickArrayStartIndex:u,tickArrayAddress:c})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>X.mergeTickArrayBitmap(c)),a=[];for(;n>=-7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n--,a.length===i)break}let u=le.tickCount(o);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>X.mergeTickArrayBitmap(c)),a=[];for(;n<7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n++,a.length===i)break}let u=le.tickCount(o);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<je||e>tt}static nextInitTick(e,t,n,i,o){if(le.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(o||(a=a+1);a<Ee;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ee-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ee;){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 i=J.getSqrtPriceX64FromTick(t),o=J.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new E(1).div(o),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new E(1).div(t),o=fn.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=J.getSqrtPriceX64FromTick(o),a=J.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new E(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=J.getSqrtPriceX64FromTick(t),o=J.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new E(1).div(o),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new E(1).div(t),o=fn.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=J.getSqrtPriceX64FromTick(o),a=J.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new E(1).div(a)}}};var fT=L([fe(8),_("bump"),Bt("index"),B(""),Ye("protocolFeeRate"),Ye("tradeFeeRate"),Bt("tickSpacing"),q(w(),8,"")]),cp=L([Ye("blockTimestamp"),Y("sqrtPriceX64"),Y("cumulativeTimePriceX64"),q(Y(),1,"")]),es=L([fe(8),Ue("initialized"),B("poolId"),q(cp,1e3,"observations"),q(Y(),5,"")]),lp=L([_("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Y("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),B("tokenMint"),B("tokenVault"),B("creator"),Y("rewardGrowthGlobalX64")]),Pi=L([fe(8),_("bump"),B("ammConfig"),B("creator"),B("mintA"),B("mintB"),B("vaultA"),B("vaultB"),B("observationId"),_("mintDecimalsA"),_("mintDecimalsB"),Bt("tickSpacing"),Y("liquidity"),Y("sqrtPriceX64"),qe("tickCurrent"),Bt("observationIndex"),Bt("observationUpdateDuration"),Y("feeGrowthGlobalX64A"),Y("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Y("swapInAmountTokenA"),Y("swapOutAmountTokenB"),Y("swapInAmountTokenB"),Y("swapOutAmountTokenA"),_("status"),q(_(),7,""),q(lp,3,"rewardInfos"),q(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),q(w(),15*4-3,"padding")]),mp=L([Y("growthInsideLastX64"),w("rewardAmountOwed")]),ki=L([fe(8),_("bump"),B("nftMint"),B("poolId"),qe("tickLower"),qe("tickUpper"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(mp,3,"rewardInfos"),q(w(),8,"")]),yT=L([fe(8),_("bump"),B("poolId"),qe("tickLowerIndex"),qe("tickUpperIndex"),Y("liquidity"),Y("feeGrowthInsideLastX64A"),Y("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(Y(),3,"rewardGrowthInside"),q(w(),8,"")]),dp=L([qe("tick"),ha("liquidityNet"),Y("liquidityGross"),Y("feeGrowthOutsideX64A"),Y("feeGrowthOutsideX64B"),q(Y(),3,"rewardGrowthsOutsideX64"),q(Ye(),13,"")]),br=L([fe(8),B("poolId"),qe("startTickIndex"),q(dp,Ee,"ticks"),_("initializedTickCount"),q(_(),115,"")]),ku=L([fe(329),q(B(),100,"whitelistMints")]),Pu=L([fe(8),B("poolId"),q(q(w(),8),Jo,"positiveTickArrayBitmap"),q(q(w(),8),Jo,"negativeTickArrayBitmap")]);var Iu=ae("Raydium_Clmm"),Pt={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]},Se=class{static createPoolInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y){let f=L([Y("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let P=Buffer.from([...Pt.createPool,...g]);return new At({keys:b,programId:e,data:P})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:i,mintA:o,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=He({fromPublicKey:i,programId:n}),[d,p]=[new v(o.address),new v(s.address)],y=[_n.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(es.span),space:es.span,programId:n})],{publicKey:f}=mu(n,a,d,p),{publicKey:b}=jo(n,f,d),{publicKey:g}=jo(n,f,p);return y.push(this.createPoolInstruction(n,f,i,a,m.publicKey,d,b,new v(o.programId||Ge),p,g,new v(s.programId||Ge),mt(n,f).publicKey,u,c)),{signers:[],instructions:y,instructionTypes:[V.CreateAccount,V.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P,A,T,h,I,S,x,K,N){let F=L([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),Ue("withMetadata"),_("optionBaseFlag"),Ue("baseFlag")]),H=[...N?[{pubkey:N,isSigner:!1,isWritable:!0}]:[]],W=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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:rt,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:hu,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...H],j=Buffer.alloc(F.span);F.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:I,amountMaxA:S,amountMaxB:x,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},j);let se=Buffer.from([...Pt.openPosition,...j]);return new At({keys:W,programId:e,data:se})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new v(e.programId),new v(e.id)],y;if(l)y=new v((await l(1))[0]);else{let x=ts.generate();m.push(x),y=x.publicKey}let f=X.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=X.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:P}=we(d,p,b),{publicKey:A}=be(n.wallet,y,Ge),{publicKey:T}=gi(y),{publicKey:h}=lt(d,y),{publicKey:I}=mn(d,p,i,o),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,T,I,g,P,h,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),i,o,f,b,s,a,u,c);return{signers:m,instructions:[S],instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:T,personalPosition:h,protocolPosition:I}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new v(e.programId),new v(e.id)],y;if(l)y=new v((await l(1))[0]);else{let x=ts.generate();m.push(x),y=x.publicKey}let f=X.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=X.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:P}=we(d,p,b),{publicKey:A}=be(n.wallet,y,Ge),{publicKey:T}=gi(y),{publicKey:h}=lt(d,y),{publicKey:I}=mn(d,p,i,o),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,T,I,g,P,h,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),i,o,f,b,c,s,a,u,Ze.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?mt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:T,personalPosition:h,protocolPosition:I},instructions:[S],signers:m,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P,A,T,h,I,S,x,K,N){let F=L([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),Y("liquidity"),w("amountMaxA"),w("amountMaxB"),Ue("withMetadata"),_("optionBaseFlag"),Ue("baseFlag")]),H=[...N?[{pubkey:N,isSigner:!1,isWritable:!0}]:[]],W=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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:rt,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:hu,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...H],j=Buffer.alloc(F.span);F.encode({tickLowerIndex:P,tickUpperIndex:A,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:new Tu(0),amountMaxA:S==="MintA"?x:K,amountMaxB:S==="MintA"?K:x,withMetadata:I==="create",baseFlag:S==="MintA",optionBaseFlag:1},j);let se=Buffer.from([...Pt.openPosition,...j]);return new At({keys:W,programId:e,data:se})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new v((await l(1))[0]);else{let x=ts.generate();d.push(x),m=x.publicKey}let[p,y]=[new v(e.programId),new v(e.id)],f=X.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=X.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=we(p,y,f),{publicKey:P}=we(p,y,b),{publicKey:A}=be(n.wallet,m,Ge),{publicKey:T}=gi(m),{publicKey:h}=lt(p,m),{publicKey:I}=mn(p,y,i,o),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,T,I,g,P,h,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(t.mintA.address),new v(t.mintB.address),i,o,f,b,s,a,u,c,Ze.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?mt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:P,positionNftAccount:A,metadataAccount:T,personalPosition:h,protocolPosition:I},instructions:[S],signers:d,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,o){let s=L([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...Pt.closePosition,...u]);return new At({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i}){let o=new v(e.programId),{publicKey:s}=be(n.wallet,i.nftMint,Ge),{publicKey:a}=lt(o,i.nftMint),u=[];return u.push(this.closePositionInstruction(o,n.wallet,i.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P){let A=L([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),_("optionBaseFlag"),Ue("baseFlag")]),T=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],I=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},I);let S=Buffer.from([...Pt.increaseLiquidity,...I]);return new At({keys:h,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMaxA:s,amountMaxB:a}){let[u,c]=[new v(e.programId),new v(e.id)],l=X.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=X.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(u,c,l),{publicKey:p}=we(u,c,m),{publicKey:y}=be(i.wallet,n.nftMint,Ge),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=mn(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,i.wallet,y,f,c,b,d,p,i.tokenAccountA,i.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,s,a,Ze.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?mt(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:o,baseAmount:s,otherAmountMax:a}){let[u,c]=[new v(e.programId),new v(e.id)],l=X.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=X.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(u,c,l),{publicKey:p}=we(u,c,m),{publicKey:y}=be(i.wallet,n.nftMint,Ge),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=mn(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,y,f,c,b,d,p,i.tokenAccountA,i.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,s,a,Ze.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?mt(u,c).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P){let A=L([Y("liquidity"),w("amountMaxA"),w("amountMaxB"),_("optionBaseFlag"),Ue("baseFlag")]),T=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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:$t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],I=Buffer.alloc(A.span);A.encode({liquidity:new Tu(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},I);let S=Buffer.from([...Pt.increaseLiquidity,...I]);return new At({keys:h,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P,A){let T=L([Y("liquidity"),w("amountMinA"),w("amountMinB")]),h=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,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:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:kn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...h],S=Buffer.alloc(T.span);T.encode({liquidity:b,amountMinA:g,amountMinB:P},S);let x=Buffer.from([...Pt.decreaseLiquidity,...S]);return new At({keys:I,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new v(e.programId),new v(e.id)],m=X.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=X.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(c,l,m),{publicKey:y}=we(c,l,d),{publicKey:f}=be(i.wallet,n.nftMint,u),{publicKey:b}=lt(c,n.nftMint),{publicKey:g}=mn(c,l,n.tickLower,n.tickUpper),P=[];for(let T=0;T<e.rewardDefaultInfos.length;T++)P.push({poolRewardVault:new v(t.rewardInfos[T].vault),ownerRewardVault:i.rewardAccounts[T],rewardMint:new v(e.rewardDefaultInfos[T].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,i.wallet,f,b,l,g,p,y,i.tokenAccountA,i.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),P,o,s,a,Ze.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?mt(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[V.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g){let P=L([w("amount"),w("otherAmountThreshold"),Y("sqrtPriceLimitX64"),Ue("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:kn,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],h=Buffer.alloc(P.span);P.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},h);let I=Buffer.from([...Pt.swap,...h]);return new At({keys:T,programId:e,data:I})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:o,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new v(e.programId),new v(e.id)],[d,p]=[new v(t.vault.A),new v(t.vault.B)],[y,f]=[new v(e.mintA.address),new v(e.mintB.address)],b=e.mintA.address===o.toString(),g=[this.swapInstruction(l,i.wallet,m,new v(e.config.id),b?i.tokenAccountA:i.tokenAccountB,b?i.tokenAccountB:i.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,mt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,o,s,a,u,c,l,m,d){let p=L([w("openTime"),w("endTime"),Y("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:G(l),endTime:G(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Pt.initReward,...f]);return new At({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new v(e.programId),new v(e.id)],a=du(o,s,i.mint).publicKey,u=fr(o).publicKey,c=[this.initRewardInstruction(o,n.wallet,s,u,new v(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,o,s,a,u,c,l,m,d){let p=L([_("rewardIndex"),Y("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:G(l),endTime:G(m)},f);let b=Buffer.from([...Pt.setRewardEmissions,...f]);return new At({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new v(e.programId),new v(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,u=new v(t.rewardInfos[d].vault),c=new v(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&Iu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=fr(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new v(e.config.id),n.tokenAccount,u,c,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,o,s,a){let u=L([_("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ge,isSigner:!1,isWritable:!1},{pubkey:$t,isSigner:!1,isWritable:!1},{pubkey:kn,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...Pt.collectReward,...l]);return new At({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[o,s]=[new v(e.programId),new v(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,u=new v(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&Iu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(o,n.wallet,s,n.tokenAccount,u,i,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[V.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:i,amountOut:o,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new v(e.programId),new v(e.id)],[m,d]=[new v(t.vault.A),new v(t.vault.B)],[p,y]=[new v(e.mintA.address),new v(e.mintB.address)],f=e.mintA.address===i.toString(),b=[this.swapInstruction(c,n.wallet,l,new v(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,u,m,o,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[V.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as bp}from"@solana/web3.js";import{PublicKey as fp}from"@solana/web3.js";import xu from"bn.js";var Bu=new xu(25),Su=new xu(1e4),pp={4:3,5:3};var yp=ae("Raydium_liquidity_serum");function Ku({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let o=t.concat(Buffer.from([n]),Buffer.alloc(7));i=fp.createProgramAddressSync(o,r)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:i,nonce:n}}throw yp.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 Ar from"bn.js";function rs({programId:r}){let{publicKey:e}=oe([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function yn({name:r,programId:e,marketId:t}){let{publicKey:n}=oe([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function gp({programId:r,marketId:e}){let{publicKey:t}=oe([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function wp({programId:r}){return oe([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function Cu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:u}){let c=yn({name:"amm_associated_seed",programId:a,marketId:t}),l=yn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=wp({programId:a}),p=yn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=yn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=yn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=gp({programId:a,marketId:t}),g=yn({name:"target_associated_seed",programId:a,marketId:t}),P=yn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=Ku({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:o,quoteDecimals:s,lpDecimals:o,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:P,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:A,lookupTableAccount:bp.default,configId:rs({programId:a})}}var ns;async function GT({connection:r,poolKeysList:e,config:t}){ns||(ns=new On({connection:r}),await ns.initStableModelLayout());let n=e.map(s=>su({poolKeys:s}));return(await na(r,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=ra(s,"GetPoolData"),u=new Ar(Nt(a,"status")),c=Number(Nt(a,"coin_decimals")),l=Number(Nt(a,"pc_decimals")),m=Number(Nt(a,"lp_decimals")),d=new Ar(Nt(a,"pool_coin_amount")),p=new Ar(Nt(a,"pool_pc_amount")),y=new Ar(Nt(a,"pool_lp_supply")),f="0";try{f=Nt(a,"pool_open_time")}catch{}return{status:u,baseDecimals:c,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new Ar(f)}})}import ot from"bn.js";var Pr=class extends Be{constructor(t){super(t);this.stableLayout=new On({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:o}){let s=new ot(new E(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=Qa(t[o?"mintB":"mintA"]),[u,c]=[new ot(new E(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new ot(new E(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new ot(new E(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,E.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",o?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",o?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",c.toString());let m=o?"base":"quote";this.logDebug("input side:",m);let d=Ke;s.isZero()||(d=m==="base"?Yr(s.mul(c),u):Yr(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Yr(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let f=new Ve(new ot(1)).add(i).mul(d).quotient,b=new Te(a,d),g=new Te(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,amountInA:i,amountInB:o,fixedSide:s,config:a,txVersion:u,computeBudgetConfig:c}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",o),(i.isZero()||o.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:o.toFixed()});let{account:l}=this.scope,{bypassAssociatedCheck:m,checkCreateATAOwner:d}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},a),[p,y]=[i.token,o.token],f=await l.getCreatedTokenAccount({mint:p.mint,associatedOnly:!1}),b=await l.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1});!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let g=await l.getCreatedTokenAccount({mint:new Oe(n.lpMint.address)}),P=[p,y],A=[f,b],T=[i.raw,o.raw],h=i.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(h)||this.logAndCreateError("invalid fixedSide","fixedSide",s),h==="quote"?(P.reverse(),A.reverse(),T.reverse(),I=s==="a"?"quote":"base"):h==="base"&&(I=s==="a"?"base":"quote");let[S,x]=P,[K,N]=A,[F,H]=T,W=await this.getAmmPoolKeys(n.id),j=this.createTxBuilder(),Mr=await l.handleTokenAccount({side:"in",amount:F,mint:S.mint,tokenAccount:K,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:se}=Mr,Z=Ie(Mr,["tokenAccount"]);j.addInstruction(Z);let gn=await l.handleTokenAccount({side:"in",amount:H,mint:x.mint,tokenAccount:N,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:kt}=gn,Or=Ie(gn,["tokenAccount"]);j.addInstruction(Or);let wn=await l.handleTokenAccount({side:"out",amount:0,mint:new Oe(n.lpMint.address),tokenAccount:g,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:Nr}=wn,vn=Ie(wn,["tokenAccount"]);return j.addInstruction(vn),j.addInstruction({instructions:[iu({poolInfo:n,poolKeys:W,userKeys:{baseTokenAccount:se,quoteTokenAccount:kt,lpTokenAccount:Nr,owner:this.scope.ownerPubKey},baseAmountIn:F,quoteAmountIn:H,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5AddLiquidity:V.AmmV4AddLiquidity],lookupTableAddress:W.lookupTableAccount?[W.lookupTableAccount]:[]}),j.addCustomComputeBudget(c),u===0&&await j.buildV0(),j.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,amountIn:i,config:o,txVersion:s,computeBudgetConfig:a}=t,u=await this.getAmmPoolKeys(n.id),[c,l,m]=[new Oe(n.mintA.address),new Oe(n.mintB.address),new Oe(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:d}=this.scope,p=await d.getCreatedTokenAccount({mint:m,associatedOnly:!1});p||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",d.tokenAccounts);let y=await d.getCreatedTokenAccount({mint:c}),f=await d.getCreatedTokenAccount({mint:l}),b=this.createTxBuilder(),{bypassAssociatedCheck:g,checkCreateATAOwner:P}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},o),S=await d.handleTokenAccount({side:"out",amount:0,mint:c,tokenAccount:y,bypassAssociatedCheck:g,checkCreateATAOwner:P}),{tokenAccount:A}=S,T=Ie(S,["tokenAccount"]);b.addInstruction(T);let x=await d.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:g,checkCreateATAOwner:P}),{tokenAccount:h}=x,I=Ie(x,["tokenAccount"]);return b.addInstruction(I),b.addInstruction({instructions:[Yo({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:p,baseTokenAccount:A,quoteTokenAccount:h,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity]}),b.addCustomComputeBudget(a),s===0?await b.buildV0():b.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=hi,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(c);let g={};for(let Z of this.scope.account.tokenAccountRawInfos)(g[Z.accountInfo.mint.toString()]===void 0||be(this.scope.ownerPubKey,Z.accountInfo.mint,hi).publicKey.equals(Z.pubkey))&&(g[Z.accountInfo.mint.toString()]=Z.pubkey);let P=g[t.lpMint.address];if(P===void 0)throw Error("find lp account error in trade accounts");let A=i.add(a!=null?a:new ot(0)),T=t.mintA.address===pe.WSOL.mint.toString(),h=t.mintB.address===pe.WSOL.mint.toString(),{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:hi,mint:new Oe(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),I===void 0)throw new Error("base token account not found");let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:hi,mint:new Oe(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(K||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=I,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let Z=ct[s.programId],kt=Qe({programId:new Oe(s.programId),poolId:new Oe(s.id),owner:this.scope.ownerPubKey,version:Z}),Or,Nr=await this.scope.connection.getAccountInfo(kt);if(Nr&&(Or=Ln(Z).decode(Nr.data)),Z!==6&&!Or){let{instruction:Dt,instructionType:Li}=fi({id:new Oe(s.id),programId:new Oe(s.programId),version:Z,ledger:kt,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Dt],instructionTypes:[Li]})}let vn=[];for(let Dt of s.rewardInfos){let Li=Dt.mint.address===pe.WSOL.mint.toString();if(g[Dt.mint.address])vn.push(g[Dt.mint.address]);else{let{account:ws,instructionParams:As}=await this.scope.account.getOrCreateTokenAccount({mint:new Oe(Dt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Li,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});ws||this.logAndCreateError("farm reward account not found:",Dt.mint.address),As&&b.addInstruction(As),vn.push(ws)}}let Mr=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],gn={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:Mr,lpAccount:P,rewardAccounts:vn},wn=ct[s.programId],oc=wn===6?cr(gn):wn===5?lr(gn):mr(gn),sc={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};b.addInstruction({instructions:[oc],instructionTypes:[sc[wn]]})}let N=await this.getAmmPoolKeys(t.id),F=Yo({poolInfo:t,poolKeys:N,userKeys:{lpTokenAccount:P,baseTokenAccount:I,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[F],instructionTypes:[t.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity],lookupTableAddress:N.lookupTableAccount?[N.lookupTableAccount]:[]});let[H,W]=t.mintA.address===n.mintA.address?[I,x]:[x,I],j=await this.scope.clmm.getClmmPoolKeys(t.id),se=await Se.openPositionFromBaseInstructions(D(M({poolInfo:n,poolKeys:j,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:H,tokenAccountB:W},withMetadata:"create"},o),{base:u,getEphemeralSigners:y}));return b.addInstruction({instructions:[...se.instructions],signers:se.signers,instructionTypes:[...se.instructionTypes],lookupTableAddress:j.lookupTableAccount?[j.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:o,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var H;let b=c.feePayer||((H=this.scope.owner)==null?void 0:H.publicKey),g=c.useSOLBalance&&i.mint.equals(Ru),P=c.useSOLBalance&&o.mint.equals(Ru),A=this.createTxBuilder(),{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:i.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(h||{});let{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:P?{payer:b,amount:a}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),T===void 0||I===void 0)throw Error("you don't has some token account");let x=Cu({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:o.mint,baseDecimals:i.decimals,quoteDecimals:o.decimals,programId:t,marketProgramId:n.programId}),K={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:N,instructionType:F}=ou(D(M({},K),{userWallet:this.scope.ownerPubKey,userCoinVault:T,userPcVault:I,userLpVault:be(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[N],instructionTypes:[F]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:K}})}async getCreatePoolFee({programId:t}){let n=rs({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return ja.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:o,slippage:s}){if(i!==t.mintA.address&&i!==t.mintB.address)throw new Error("toke not match");if(o!==t.mintA.address&&o!==t.mintB.address)throw new Error("toke not match");let{baseReserve:a,quoteReserve:u}=t,c=[a,u],l=i==t.mintA.address?"base":"quote";l==="quote"&&c.reverse();let[m,d]=c,p=t.programId===io.toBase58(),y;if(p)y=new E(d.toString()).div(m.toString());else{let x=tu(this.stableLayout.stableModelData,a.toNumber(),u.toNumber(),!1);l==="quote"?y=new E(1e6).div(x*1e6):y=new E(x*1e6).div(1e6)}let f=n,b=new ot(0),g=new ot(0);if(!f.isZero())if(p){g=Yt(f.mul(Bu),Su);let x=f.sub(g),K=m.add(x);b=d.mul(x).div(K)}else{g=f.mul(new ot(2)).div(new ot(1e4));let x=f.sub(g);l==="quote"?b=new ot($a(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber())):b=new ot(eu(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber()))}let P=new ot(new E(b.toString()).mul(1-s).toFixed(0)),A=b,T=P,h=new E(b.toString()).div(new E(f.sub(g).toString()).toFixed(0));!f.isZero()&&!b.isZero()&&(h=new E(b.toString()).div(f.sub(g).toString()));let I=y.sub(h).div(y).mul(100);return{amountOut:A,minAmountOut:T,currentPrice:y,executionPrice:h,priceImpact:I,fee:g}}async swap({poolInfo:t,amountIn:n,amountOut:i,inputMint:o,fixedSide:s,txVersion:a,computeBudgetConfig:u}){let c=this.createTxBuilder(),[l,m]=o===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],d=await this.scope.account.getCreatedTokenAccount({mint:new Oe(l.address),programId:new Oe(l.programId),associatedOnly:!1}),p=await this.scope.account.getCreatedTokenAccount({mint:new Oe(m.address),programId:new Oe(m.programId),associatedOnly:!1}),T=await this.scope.account.handleTokenAccount({side:"in",amount:n,mint:new Oe(l.address),tokenAccount:d,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:y}=T,f=Ie(T,["tokenAccount"]);c.addInstruction(f);let h=await this.scope.account.handleTokenAccount({side:"out",amount:0,mint:new Oe(m.address),tokenAccount:p,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:b}=h,g=Ie(h,["tokenAccount"]);c.addInstruction(g);let P=await this.getAmmPoolKeys(t.id),A=4;return t.pooltype.includes("StablePool")&&(A=5),c.addInstruction({instructions:[yi({version:A,poolKeys:P,userKeys:{tokenAccountIn:y,tokenAccountOut:b,owner:this.scope.ownerPubKey},amountIn:n,amountOut:i,fixedSide:s})],instructionTypes:[A===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),c.addCustomComputeBudget(u),c.versionBuild({txVersion:a})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t){let n=await this.scope.connection.getMultipleAccountsInfo(t.map(c=>new Oe(c))),i={},o=[];for(let c=0;c<t.length;c++){let l=n[c];if(l===null)throw Error("fetch pool info error: "+String(t[c]));let m=Uo.decode(l.data);i[String(t[c])]=m,o.push(m.baseVault,m.quoteVault)}let s={},a=await this.scope.connection.getMultipleAccountsInfo(o.map(c=>new Oe(c)));for(let c=0;c<o.length;c++){let l=a[c];if(l===null)throw Error("fetch vault info error: "+o[c]);s[String(o[c])]=new ot(Ap.decode(l.data).amount.toString())}let u={};for(let[c,l]of Object.entries(i)){let m=s[l.baseVault.toString()].sub(l.baseNeedTakePnl),d=s[l.quoteVault.toString()].sub(l.quoteNeedTakePnl);u[c]=D(M({},l),{baseReserve:m,quoteReserve:d,poolPrice:new E(d.toString()).div(new E(10).pow(l.quoteDecimal.toString())).div(new E(m.toString()).div(new E(10).pow(l.baseDecimal.toString())))})}return u}};import{PublicKey as ue}from"@solana/web3.js";import dt from"bn.js";var kr=class extends Be{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var P;let{programId:t,owner:n=((P=this.scope.owner)==null?void 0:P.publicKey)||ue.default,mint1:i,mint2:o,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new dt(new ue(i.address).toBuffer()).gt(new dt(new ue(o.address).toBuffer()))?[o,i,new E(1).div(a)]:[i,o,a],b=J.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await Se.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(c),d.versionBuild({txVersion:m,extInfo:{address:D(M({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:u.toString(),vault:{A:g.address.mintAVault.toString(),B:g.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:M({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:u.toString(),programId:t.toString(),price:f.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:[]}},wu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!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,P=n.useSOLBalance&&e.mintA.address===ne.toString(),A=n.useSOLBalance&&e.mintB.address===ne.toString(),[T,h]=s==="MintA"?[a,u]:[u,a],{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||T.isZero()?{payer:this.scope.ownerPubKey,amount:T}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:c,checkCreateATAOwner:l});I&&(b=I),f.addInstruction(S||{});let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||h.isZero()?{payer:this.scope.ownerPubKey,amount:h}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(K||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let N=t||await this.getClmmPoolKeys(e.id),F=await Se.openPositionFromBaseInstructions({poolInfo:e,poolKeys:N,ownerInfo:D(M({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(F),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:F.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:o,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===ne.toBase58(),P=n.useSOLBalance&&e.mintB.address===ne.toBase58(),{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(T||{});let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:c,checkCreateATAOwner:l});h&&(b=h),y.addInstruction(I||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=t||await this.getClmmPoolKeys(e.id),x=await Se.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:i,amountMaxB:o,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,ownerPosition:n,amountMaxA:i,amountMaxB:o,liquidity:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===ne.toString(),b=a.useSOLBalance&&t.mintB.address===ne.toString(),{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(P||{});let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(T||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let h=await this.getClmmPoolKeys(t.id),I=Se.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:h,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},liquidity:s,amountMaxA:i,amountMaxB:o});return d.addInstruction(I),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:I.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:i,baseAmount:o,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===ne.toString(),b=a.useSOLBalance&&t.mintB.address===ne.toString(),{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(i==="MintA"?o:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?o:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(P||{});let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(i==="MintA"?s:o).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(T||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let h=await this.getClmmPoolKeys(t.id),I=Se.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:h,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:i,baseAmount:o,otherAmountMax:s});return d.addInstruction(I),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:I.address}})}async decreaseLiquidity(e){let{poolInfo:t,ownerPosition:n,ownerInfo:i,amountMinA:o,amountMinB:s,liquidity:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let d=this.createTxBuilder(),p=i.useSOLBalance&&t.mintA.address===ne.toString(),y=i.useSOLBalance&&t.mintB.address===ne.toString(),f,b,{account:g,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ue(t.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!p,associatedOnly:p?!1:u,checkCreateATAOwner:c});f=g,P&&d.addInstruction(P);let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ue(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:c});b=A,T&&d.addInstruction(T);let h=[];for(let K of t.rewardDefaultInfos){let N=i.useSOLBalance&&K.mint.address===ne.toString(),F;if(K.mint.address===t.mintA.address)F=f;else if(K.mint.address===t.mintB.address)F=b;else{let{account:H,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(K.mint.programId),mint:new ue(K.mint.address),notUseTokenAccount:N,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!N,associatedOnly:N?!1:u,checkCreateATAOwner:c});F=H,W&&d.addInstruction(W)}h.push(F)}!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=await this.getClmmPoolKeys(t.id),S=await Se.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:h},liquidity:a,amountMinA:o,amountMinB:s});d.addInstruction({instructions:S.instructions,instructionTypes:[V.ClmmDecreasePosition]});let x=M({},S.address);if(i.closePosition){let K=await Se.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});d.addInstruction({endInstructions:K.instructions,endInstructionTypes:K.instructionTypes}),x=M(M({},x),K.address)}return d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:x}})}async closePosition({poolInfo:e,ownerPosition:t,txVersion:n}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),o=await this.getClmmPoolKeys(e.id),s=Se.closePositionInstructions({poolInfo:e,poolKeys:o,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:t});return i.addInstruction(s).versionBuild({txVersion:n,extInfo:{address:s.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.address.toString()===ne.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(n.mint.address),mint:new ue(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new E(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:i,checkCreateATAOwner:o});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Se.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ue(n.mint.programId),mint:new ue(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:$.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){for(let l of n)l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let u=this.createTxBuilder(),c={};for(let l of n){let m=t.useSOLBalance&&l.mint.address===ne.toString(),d=l.perSecond.mul(l.endTime-l.openTime),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(l.mint.programId),mint:new ue(l.mint.address),notUseTokenAccount:!!m,skipCloseAccount:!m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new E(d.toFixed(0)).gte(d)?d.toFixed(0):d.add(1).toFixed(0))}:void 0,associatedOnly:m?!1:i,checkCreateATAOwner:o});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),b=Se.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{programId:new ue(l.mint.programId),mint:new ue(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:$.decimalToX64(l.perSecond)}});c=M(M({},c),b.address),u.addInstruction(b)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.equals(ne),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new E(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:c?!1:i,checkCreateATAOwner:o});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Se.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:$.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){let u=this.createTxBuilder(),c={};for(let l of n){l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let m=t.useSOLBalance&&l.mint.address===ne.toString(),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(l.mint.programId),mint:new ue(l.mint.address),notUseTokenAccount:m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new E(l.perSecond.sub(l.endTime-l.openTime).toFixed(0)).gte(l.perSecond.sub(l.endTime-l.openTime))?l.perSecond.sub(l.endTime-l.openTime).toFixed(0):l.perSecond.sub(l.endTime-l.openTime).add(1).toFixed(0))}:void 0,associatedOnly:m?!1:i,checkCreateATAOwner:o});p&&u.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),f=Se.setRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:new ue(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:$.decimalToX64(l.perSecond)}});u.addInstruction(f),c=M(M({},c),f.address)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:o=!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(),u=t.useSOLBalance&&n.equals(ne),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(s.mint.programId),mint:n,notUseTokenAccount:u,owner:this.scope.ownerPubKey,skipCloseAccount:!u,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:u?!1:i,checkCreateATAOwner:o});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Se.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1}){let s=this.createTxBuilder(),a={};for(let u of n){let c=e.rewardDefaultInfos.find(f=>f.mint.address===u.toString());if(!c){this.logAndCreateError("reward mint error","not found reward mint",u);continue}let l=t.useSOLBalance&&u.equals(ne),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(c.mint.programId),mint:u,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:i,checkCreateATAOwner:o});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Se.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=M(M({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,inputMint:t,amountIn:n,amountOutMin:i,priceLimit:o,observationId:s,ownerInfo:a,remainingAccounts:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,txVersion:m}){let d=this.createTxBuilder(),p=a.useSOLBalance&&e.mintA.address===ne.toBase58(),y=a.useSOLBalance&&e.mintB.address===ne.toBase58(),f;!o||o.equals(new E(0))?f=t.toString()===e.mintA.address?Kt.add(new dt(1)):Ct.sub(new dt(1)):f=J.priceToSqrtPriceX64(o,e.mintA.decimals,e.mintB.decimals);let b;if(!b){let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ue(e.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:c,checkCreateATAOwner:l});b=A,T&&d.addInstruction(T)}let g;if(!g){let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ue(e.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:c,checkCreateATAOwner:l});g=A,T&&d.addInstruction(T)}(!b||!g)&&this.logAndCreateError("user do not have token account",this.scope.account.tokenAccountRawInfos);let P=await this.getClmmPoolKeys(e.id);return d.addInstruction(Se.makeSwapBaseInInstructions({poolInfo:e,poolKeys:P,observationId:s,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},inputMint:new ue(t),amountIn:n,amountOutMin:i,sqrtPriceLimitX64:f,remainingAccounts:u})),d.versionBuild({txVersion:m})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)i?be(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(c[m.accountInfo.mint.toString()]=m.pubkey):c[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(T=>!T.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===ne.toString(),y=n.useSOLBalance&&d.mintB.address===ne.toString(),f=c[d.mintA.address];if(!f){let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ue(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:i,checkCreateATAOwner:o});f=A,T&&l.addInstruction(T)}let b=c[d.mintB.address];if(!b){let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ue(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:i,checkCreateATAOwner:o});b=A,T&&l.addInstruction(T)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let T=n.useSOLBalance&&A.mint.address===ne.toString(),h=c[A.mint.address];if(!h){let{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ue(A.mint.programId),mint:new ue(A.mint.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,skipCloseAccount:!T,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:T?!1:i});h=I,S&&l.addInstruction(S)}c[A.mint.address]=h,g.push(h)}let P=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let T=Se.decreaseLiquidityInstructions({poolInfo:d,poolKeys:P,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new dt(0),amountMinA:new dt(0),amountMinB:new dt(0)});l.addInstruction(T)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(fr(e).publicKey);return t?ku.decode(t.data).whitelistMints.filter(i=>!i.equals(ue.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new dt(1))).map(s=>lt(new ue(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return i.forEach(s=>{if(!s)return;let a=ki.decode(s.data);o.push(a)}),o}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e}){let t=await this.scope.connection.getMultipleAccountsInfo(e.map(i=>new ue(i))),n={};for(let i=0;i<e.length;i++){let o=t[i];if(o===null)throw Error("fetch pool info error: "+String(e[i]));let s=Pi.decode(o.data),a=J.sqrtPriceX64ToPrice(s.sqrtPriceX64,s.mintDecimalsA,s.mintDecimalsB).toNumber();n[String(e[i])]=D(M({},s),{currentPrice:a})}return n}};import{PublicKey as U}from"@solana/web3.js";import{NATIVE_MINT as Ii,TOKEN_PROGRAM_ID as en,AccountLayout as Np}from"@solana/spl-token";var Pp=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),kp=Buffer.from("amm_config","utf8"),hp=Buffer.from("pool","utf8"),Tp=Buffer.from("pool_lp_mint","utf8"),Ip=Buffer.from("pool_vault","utf8"),xp=Buffer.from("observation","utf8");function Bp(r){return oe([Pp],r)}function Sp(r,e){return oe([kp,Rp(e)],r)}function Kp(r,e,t,n){return oe([hp,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Cp(r,e){return oe([Tp,e.toBuffer()],r)}function Lu(r,e,t){return oe([Ip,e.toBuffer(),t.toBuffer()],r)}function Ti(r,e){return oe([xp,e.toBuffer()],r)}function Rp(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function Ou({programId:r,mintA:e,mintB:t}){let n=Sp(r,0).publicKey,i=Bp(r).publicKey,o=Kp(r,n,e,t).publicKey,s=Cp(r,o).publicKey,a=Lu(r,o,e).publicKey,u=Lu(r,o,t).publicKey,c=Ti(r,o).publicKey;return{poolId:o,configId:n,authority:i,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as hr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as is,TOKEN_2022_PROGRAM_ID as Nu,ASSOCIATED_TOKEN_PROGRAM_ID as Lp}from"@solana/spl-token";var Op=ae("Raydium_cpmm"),Tr={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 Mu(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y,f,b,g,P,A){let T=L([w("amountMaxA"),w("amountMaxB"),w("openTime")]),h=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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:is,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Lp,isSigner:!1,isWritable:!1},{pubkey:Gr,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],I=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:P,openTime:A},I),new hr({keys:h,programId:r,data:Buffer.from([...Tr.initialize,...I])})}function _u(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y){let f=L([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:is,isSigner:!1,isWritable:!1},{pubkey:Nu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Op.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new hr({keys:b,programId:r,data:Buffer.from([...Tr.deposit,...g])})}function Vu(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y){let f=L([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:is,isSigner:!1,isWritable:!1},{pubkey:Nu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ds,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new hr({keys:b,programId:r,data:Buffer.from([...Tr.withdraw,...g])})}function Eu(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y,f){let b=L([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},P),new hr({keys:g,programId:r,data:Buffer.from([...Tr.swapBaseInput,...P])})}function Fu(r,e,t,n,i,o,s,a,u,c,l,m,d,p,y,f){let b=L([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],P=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},P),new hr({keys:g,programId:r,data:Buffer.from([...Tr.swapBaseOutput,...P])})}import Je from"bn.js";var vu=L([fe(8),_("bump"),Ue("disableCreatePool"),Bt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),B("protocolOwner"),B("fundOwner"),q(w(),16)]),Wu=L([fe(8),B("configId"),B("poolCreator"),B("vaultA"),B("vaultB"),B("mintLp"),B("mintA"),B("mintB"),B("mintProgramA"),B("mintProgramB"),B("observationId"),_("bump"),_("status"),_("lpDecimals"),_("mintDecimalA"),_("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),q(w(),32)]);var Ir=class extends Be{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 this.scope.connection.getMultipleAccountsInfo(e.map(m=>new U(m))),i={},o=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d===null)throw Error("fetch pool info error: "+String(e[m]));let p=Wu.decode(d.data);i[String(e[m])]=p,o.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...o],d=await this.scope.connection.getMultipleAccountsInfo(m.map(p=>new U(p)));for(let p=0;p<m.length;p++){let y=d[p];if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=vu.decode(y.data)}}let u={},c=await this.scope.connection.getMultipleAccountsInfo(s.map(m=>new U(m)));for(let m=0;m<s.length;m++){let d=c[m];if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new Je(Np.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=D(M({},d),{baseReserve:p,quoteReserve:y,configInfo:a[d.configId.toString()],poolPrice:new E(y.toString()).div(new E(10).pow(d.mintDecimalB)).div(new E(p.toString()).div(new E(10).pow(d.mintDecimalA)))})}return l}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:i,associatedOnly:o=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=Ie(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var H,W,j;let d=i.feePayer||((H=this.scope.owner)==null?void 0:H.publicKey),p=new Je(new U(c.mintA.address).toBuffer()).lte(new Je(new U(c.mintB.address).toBuffer())),[y,f]=p?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=p?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],P=i.useSOLBalance&&y.address===Ii.toBase58(),A=i.useSOLBalance&&f.address===Ii.toBase58(),[T,h]=[new U(y.address),new U(f.address)],I=this.createTxBuilder(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:T,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:d,amount:b}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:o,checkCreateATAOwner:s});I.addInstruction(x||{});let{account:K,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:new U(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:d,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:o,checkCreateATAOwner:s});if(I.addInstruction(N||{}),S===void 0||K===void 0)throw Error("you don't has some token account");let F=Ou({programId:e,mintA:T,mintB:h});return I.addInstruction({instructions:[Mu(e,this.scope.ownerPubKey,F.configId,F.authority,F.poolId,T,h,F.lpMint,S,K,be(this.scope.ownerPubKey,F.lpMint).publicKey,F.vaultA,F.vaultB,t,new U((W=y.programId)!=null?W:en),new U((j=f.programId)!=null?j:en),F.observationId,b,g,n)],instructionTypes:[V.CpmmCreatePool]}),I.addCustomComputeBudget(u),I.versionBuild({txVersion:a,extInfo:{address:D(M({},F),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,inputAmount:n,baseIn:i,slippage:o,computeResult:s,computeBudgetConfig:a,config:u,txVersion:c}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),n.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:n.toString()});let{account:l}=this.scope,{bypassAssociatedCheck:m,checkCreateATAOwner:d}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),p=s?void 0:await this.getRpcPoolInfo(t.id),{liquidity:y,inputAmountFee:f,anotherAmount:b}=s||this.computePairAmount({poolInfo:D(M({},t),{lpAmount:new E(p.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:p.baseReserve,quoteReserve:p.quoteReserve,slippage:new Ve(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new E(n.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),g=b.amount,P=t.mintA.address===Ii.toString(),A=t.mintB.address===Ii.toString(),T=this.createTxBuilder(),[h,I]=[new U(t.mintA.address),new U(t.mintB.address)],{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(i?n:g).isZero()?{payer:this.scope.ownerPubKey,amount:i?n:g}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:d});T.addInstruction(x||{});let{account:K,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(i?g:n).isZero()?{payer:this.scope.ownerPubKey,amount:i?g:n}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:d});T.addInstruction(N||{}),!S&&!K&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let F=await l.getCreatedTokenAccount({mint:new U(t.lpMint.address)}),Z=await l.handleTokenAccount({side:"out",amount:0,mint:new U(t.lpMint.address),tokenAccount:F,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:H}=Z,W=Ie(Z,["tokenAccount"]);T.addInstruction(W);let j=await this.getCpmmPoolKeys(t.id),se=new Ve(new Je(1)).sub(o);return T.addInstruction({instructions:[_u(new U(t.programId),this.scope.ownerPubKey,new U(j.authority),new U(t.id),H,S,K,new U(j.vault.A),new U(j.vault.B),h,I,new U(t.lpMint.address),s?s==null?void 0:s.liquidity:se.mul(y).quotient,i?f.amount:g,i?g:f.amount)],instructionTypes:[V.CpmmAddLiquidity],lookupTableAddress:j.lookupTableAccount?[j.lookupTableAccount]:[]}),T.addCustomComputeBudget(a),T.versionBuild({txVersion:c})}async withdrawLiquidity(e){var H,W;let{poolInfo:t,lpAmount:n,slippage:i,computeBudgetConfig:o,txVersion:s}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let a=new Ve(new Je(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[c,l]=[a.mul(n.mul(u.baseReserve).div(u.lpAmount)).quotient,a.mul(n.mul(u.quoteReserve).div(u.lpAmount)).quotient],m=await this.scope.fetchEpochInfo(),[d,p]=[Pe(c,t.mintA.extensions.feeConfig,m,!0),Pe(l,t.mintB.extensions.feeConfig,m,!0)],{account:y}=this.scope,f=this.createTxBuilder(),[b,g]=[new U(t.mintA.address),new U(t.mintB.address)],P=b.equals(ne),A=g.equals(ne),T,h,{account:I,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});T=I,S&&f.addInstruction(S);let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});h=x,K&&f.addInstruction(K),(!T||!h)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",y.tokenAccounts);let N=await y.getCreatedTokenAccount({mint:new U(t.lpMint.address)});N||this.logAndCreateError("cannot found lp token account","tokenAccounts",y.tokenAccounts);let F=await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[Vu(new U(t.programId),this.scope.ownerPubKey,new U(F.authority),new U(t.id),N,T,h,new U(F.vault.A),new U(F.vault.B),b,g,new U(t.lpMint.address),n,c.sub((H=d.fee)!=null?H:new Je(0)),l.sub((W=p.fee)!=null?W:new Je(0)))],instructionTypes:[V.CpmmWithdrawLiquidity],lookupTableAddress:F.lookupTableAccount?[F.lookupTableAccount]:[]}),f.addCustomComputeBudget(o),f.versionBuild({txVersion:s})}async swap(e){var h,I,K,N,F,H;let{poolInfo:t,baseIn:n,swapResult:i,slippage:o=0,config:s,computeBudgetConfig:a,txVersion:u}=e,{bypassAssociatedCheck:c,checkCreateATAOwner:l}=M({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),m=this.createTxBuilder(),[d,p]=[new U(t.mintA.address),new U(t.mintB.address)],y=await this.scope.account.getCreatedTokenAccount({programId:new U((h=t.mintA.programId)!=null?h:en),mint:d,associatedOnly:!1}),f=await this.scope.account.getCreatedTokenAccount({programId:new U((I=t.mintB.programId)!=null?I:en),mint:p,associatedOnly:!1});i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new Je((1-o)*1e4)).div(new Je(1e4));let S=await this.scope.account.handleTokenAccount({side:n?"in":"out",amount:n?i.sourceAmountSwapped:i.destinationAmountSwapped,programId:new U(t.mintA.programId),mint:d,tokenAccount:y,bypassAssociatedCheck:c,checkCreateATAOwner:l}),{tokenAccount:b}=S,g=Ie(S,["tokenAccount"]);m.addInstruction(g);let x=await this.scope.account.handleTokenAccount({side:n?"out":"in",amount:n?i.destinationAmountSwapped:i.sourceAmountSwapped,programId:new U(t.mintB.programId),mint:p,tokenAccount:f,bypassAssociatedCheck:c,checkCreateATAOwner:l}),{tokenAccount:P}=x,A=Ie(x,["tokenAccount"]);m.addInstruction(A),!b&&!P&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=await this.getCpmmPoolKeys(t.id);return m.addInstruction({instructions:[n?Eu(new U(t.programId),this.scope.ownerPubKey,new U(T.authority),new U(T.config.id),new U(t.id),b,P,new U(T.vault.A),new U(T.vault.B),new U((K=t.mintA.programId)!=null?K:en),new U((N=t.mintB.programId)!=null?N:en),d,p,Ti(new U(t.programId),new U(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):Fu(new U(t.programId),this.scope.ownerPubKey,new U(T.authority),new U(T.config.id),new U(t.id),P,b,new U(T.vault.B),new U(T.vault.A),new U((F=t.mintB.programId)!=null?F:en),new U((H=t.mintA.programId)!=null?H:en),p,d,Ti(new U(t.programId),new U(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[n?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut]}),m.addCustomComputeBudget(a),m.versionBuild({txVersion:u})}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:o,epochInfo:s,baseIn:a}){var P,A,T,h,I,S,x,K;let u=1-Number(o.toSignificant())/100,c=new Je(new E(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=Pe(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((P=l.fee)!=null?P:new Je(0)),d=new Je(new E(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,E.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.toString(),"amountInFee:",(T=(A=l.fee)==null?void 0:A.toString())!=null?T:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${o.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:Ke,fee:void 0,expirationTime:void 0};if(!m.isZero()){let N=Mp(y,t,n,d);this.logDebug("lpAmountData:",{amountA:N.amountA.toString(),amountB:N.amountB.toString()}),f=Pe(N[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Ve(new Je(1)).add(o),g=Pe(b.mul(f.amount.sub((h=f.fee)!=null?h:new Je(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(I=f.fee)==null?void 0:I.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(K=(x=g.fee)==null?void 0:x.toString())!=null?K:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function Mp(r,e,t,n){let i=r.mul(e).div(n);!i.isZero()&&!r.mul(e).mod(n).isZero()&&(i=i.add(new Je(1)));let o=r.mul(t).div(n);return!o.isZero()&&!r.mul(t).mod(n).isZero()&&(o=o.add(new Je(1))),{amountA:i,amountB:o}}var xr=class extends Be{constructor(e){super(e)}static getAddLiquidityDefaultPool({addLiquidityPools:e,poolInfosCache:t}){if(e.length===0)return;if(e.length===1||(e.sort((i,o)=>o.version-i.version),e[0].version!==e[1].version))return e[0];let n=e.filter(i=>i.version===e[0].version);return n.sort((i,o)=>this.comparePoolSize(i,o,t)),n[0]}static comparePoolSize(e,t,n){let i=n[e.id],o=n[t.id];return i===void 0?1:o===void 0?-1:e.baseMint===t.baseMint?i.baseReserve.sub(o.baseReserve).gte(Ke)?-1:1:i.baseReserve.sub(o.quoteReserve).gte(Ke)?-1:1}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(ne));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}=e,i=await this.getWSolAccounts(),o=this.createTxBuilder();o.addCustomComputeBudget(e.computeBudgetConfig);let s=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});o.addInstruction(s);let a=G(t);for(let u=0;u<i.length;u++)a.gte(i[u].amount)?(o.addInstruction({instructions:[_t({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),a.sub(i[u].amount)):(o.addInstruction({instructions:[_t({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),tr({destination:s.addresses.newAccount,source:i[u].publicKey,amount:a,owner:this.scope.ownerPubKey,tokenProgram:n}));return o.build()}async wrapWSol(e,t){let n=await this.getWSolAccounts(),i=this.createTxBuilder(),o=await Vt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(o),n.length&&i.addInstruction({instructions:[tr({destination:n[0].publicKey,source:o.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[_t({tokenAccount:o.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.build()}};import{TOKEN_PROGRAM_ID as _p}from"@solana/spl-token";import{PublicKey as Vp,Transaction as os,TransactionInstruction as Ep}from"@solana/web3.js";import Du from"bn.js";var $e=class extends Be{static getPdaPoolId(e,t){return oe([$e.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return oe([$e.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Du(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:o}){if(n.length===0)return[];let s=n.map(l=>$e.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<$e.VERSION_PROJECT.length;l++)a.push(...s.map(m=>$e.getPdaOwnerId(t,m,i,l).publicKey));let u=await It(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=u[d],b=u[n.length+l];if(!(f&&b)||f.data.length!==$e.POOL_LAYOUT.span||b.data.length!==$e.OWNER_LAYOUT.span)continue;let g=$e.POOL_LAYOUT.decode(f.data),P=$e.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),T=g.endTime.toNumber(),h=P.tokenInfo.map(x=>x.debtAmount.gt(new Du(0))).filter(x=>!x).length!==3,I=o>A&&o<T&&g.status===1,S=h&&I;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:P.lpAmount,project:$e.VERSION_PROJECT[m],openTime:A,endTime:T,canClaim:S,canClaimErrorType:h?I?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,K)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:P.tokenInfo[K].debtAmount.add(P.tokenInfo[K].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o=[];for(let u of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(pe.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(pe.WSOL.mint),associatedOnly:u.mintAddress.equals(pe.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),o.push(c)}n.addInstruction({instructions:[$e.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:o}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(pe.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(pe.WSOL.mint),associatedOnly:m.mintAddress.equals(pe.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(o[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[$e.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:i,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return Jr(u,[i,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new os().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new os().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new os().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=L([]),o=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:_p,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Ep({keys:o,programId:e,data:a})}},pt=$e;pt.CLAIMED_NUM=3,pt.POOL_LAYOUT=L([fe(8),_("bump"),_("status"),w("openTime"),w("endTime"),B("ammId"),q(L([_("mintDecimals"),B("mintAddress"),B("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),$e.CLAIMED_NUM,"tokenInfo"),q(w(),10,"padding")]),pt.OWNER_LAYOUT=L([fe(8),_("bump"),_("version"),B("poolId"),B("owner"),w("lpAmount"),q(L([B("mintAddress"),w("debtAmount"),w("claimedAmount")]),$e.CLAIMED_NUM,"tokenInfo"),q(w(),4,"padding")]),pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Vp(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 Br}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as zu}from"@solana/spl-token";import Sr from"bn.js";import{TransactionInstruction as vp,SYSVAR_RENT_PUBKEY as Wp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as qu}from"@solana/spl-token";import{createInitializeAccountInstruction as Uu}from"@solana/spl-token";import{SystemProgram as bn,Transaction as Gu}from"@solana/web3.js";function Fp(r="accountFlags"){let e=new ai(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 ss=L([fe(5),Fp("accountFlags"),B("ownAddress"),w("vaultSignerNonce"),B("baseMint"),B("quoteMint"),B("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),B("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),B("requestQueue"),B("eventQueue"),B("bids"),B("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]);function Dp({programId:r,marketInfo:e}){let t=L([_("version"),Ye("instruction"),w("baseLotSize"),w("quoteLotSize"),Bt("feeRateBps"),w("vaultSignerNonce"),w("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:Wp,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}:[]),i=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},i),new vp({keys:n,programId:r,data:i})}async function Xu({connection:r,wallet:e,marketInfo:t}){let n=new Gu,i=await r.getMinimumBalanceForRentExemption(165);n.add(bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:qu}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:qu}),Uu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Uu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let o=new Gu;return o.add(bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(ss.span),space:ss.span,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(5120+12),space:5120+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(262144+12),space:262144+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),Dp({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:[V.CreateAccount,V.CreateAccount,V.InitAccount,V.InitAccount]},{transaction:o,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.InitMarket]}]}var Vn=class extends Be{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:o,txVersion:s,computeBudgetConfig:a}){let u=this.scope.ownerPubKey,c=He({fromPublicKey:u,programId:o}),l=He({fromPublicKey:u,programId:o}),m=He({fromPublicKey:u,programId:o}),d=He({fromPublicKey:u,programId:o}),p=He({fromPublicKey:u,programId:o}),y=He({fromPublicKey:u,programId:zu}),f=He({fromPublicKey:u,programId:zu}),b=0,g=new Sr(100);function P(){let K=new Sr(0);for(;;)try{return{vaultOwner:Br.createProgramAddressSync([c.publicKey.toBuffer(),K.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:K}}catch{if(K.iaddn(1),K.gt(new Sr(25555)))throw Error("find vault owner error")}}let{vaultOwner:A,vaultSignerNonce:T}=P(),h=new Sr(Math.round(10**e.decimals*n)),I=new Sr(Math.round(n*10**t.decimals*i));if(h.eq(Ke))throw Error("lot size is too small");if(I.eq(Ke))throw Error("tick size or lot size is too small");let S=await Xu({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:c,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:A,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:T,baseLotSize:h,quoteLotSize:I}}),x=this.createTxBuilder();x.addInstruction({instructions:S[0].transaction.instructions,signers:S[0].signer});for await(let K of S.slice(1,S.length))x.addInstruction({instructions:K.transaction.instructions,signers:K.signer,instructionTypes:K.instructionTypes});return s===0?x.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Br(e.mint),quoteMin:new Br(t.mint)}}):x.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Br(e.mint),quoteMin:new Br(t.mint)}})}};import{PublicKey as Cr}from"@solana/web3.js";import{TransactionInstruction as us,SYSVAR_CLOCK_PUBKEY as qp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as cs}from"@solana/spl-token";var as=L([_("instruction"),ba("amount")]),Kr=L([_("instruction")]);function _B({programId:r,amount:e,instructionKeys:t}){let n=[{pubkey:Gr,isSigner:!1,isWritable:!1},{pubkey:cs,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Gi,isSigner:!1,isWritable:!1},...Object.entries(t).map(([o,s])=>({pubkey:s,isSigner:o==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(o)}))],i=Buffer.alloc(as.span);return as.encode({instruction:1,amount:Number(e)},i),new us({keys:n,programId:r,data:i})}function xi({programId:r},e){let t=[{pubkey:cs,isSigner:!1,isWritable:!1},{pubkey:Gi,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,o])=>({pubkey:o,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(Kr.span);return Kr.encode({instruction:2},n),new us({keys:t,programId:r,data:n})}function ls(r){let{poolConfig:e,userKeys:t,side:n}=r,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,o=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Kr.span);Kr.encode({instruction:2},s);let a=[{pubkey:cs,isWritable:!1,isSigner:!1},{pubkey:qp,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new us({programId:e.programId,keys:a,data:s})}import Yu from"bn.js";var Up={[Jn.IDO_PROGRAM_ID_V1.toString()]:1,[Jn.IDO_PROGRAM_ID_V2.toString()]:2,[Jn.IDO_PROGRAM_ID_V3.toString()]:3,[Jn.IDO_PROGRAM_ID_V4.toString()]:4},En=class extends Be{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:o}){let s=this.createTxBuilder(),a=Up[t.programId];a||this.logAndCreateError("invalid version",a);let u=ye(t),[c,l]=[!new Yu(e.coin).isZero(),!new Yu(e.pc).isZero()],m=u.projectInfo.mint.address.equals(ne),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:i});!d&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&p&&s.addInstruction(p);let y=u.buyInfo.mint.address.equals(ne),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:i});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:[...c?[xi({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Cr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[xi({programId:new Cr(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Cr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[xi({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Cr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});let g={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new Cr(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[ls(D(M({},g),{side:"base"}))]:[],...l?[ls(D(M({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};import{PublicKey as Gp}from"@solana/web3.js";import{MintLayout as Xp,TOKEN_2022_PROGRAM_ID as ms,TOKEN_PROGRAM_ID as ds}from"@solana/spl-token";var Rr=class extends Be{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:i="strict"}=t||{},{mintList:o,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(i,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(Tt.address,Tt),this._mintGroup.official.add(Tt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,D(M({},c),{priority:-1}))}),o.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,D(M({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?ms.toBase58():ds.toBase58()})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,D(M({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?ms.toBase58():ds.toBase58()})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,D(M({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?ms.toBase58():ds.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[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(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Tt;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,D(M({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new Gp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Xp.decode(s.data),u=n.toString().substring(0,6),c={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var Bi=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new gt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.api=o,this._apiCacheTime=u||5*60*1e3,this.logger=ae("Raydium"),this.farm=new dr({scope:this,moduleName:"Raydium_Farm"}),this.account=new nr({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Pr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Rr({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new xr({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new kr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ir({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new pt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Vn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new En({scope:this,moduleName:"Raydium_ido"}),this.availability={};let c=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:c,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=zp({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:o,logRequests:s,urlConfigs:a}=t,u=new ii({cluster:n,timeout:i,urlConfigs:a,logCount:o,logRequests:s}),c=new Bi(D(M({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(oi);return this._owner.publicKey}setOwner(e){return this._owner=e?new gt(e):void 0,this}get connection(){if(!this._connection)throw new Error(da);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(oi),new Error(oi)}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;let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}async fetchJupTokenList(e,t){var o;let n=(o=this.apiData.jupTokenList)==null?void 0:o[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;let i=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=D(M({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:i}}),this.apiData.jupTokenList[e].data}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{}}}};import{TOKEN_PROGRAM_ID as ys,TOKEN_2022_PROGRAM_ID as ps}from"@solana/spl-token";import{PublicKey as ft,TransactionInstruction as bs,SystemProgram as Qu}from"@solana/web3.js";import fs from"bn.js";function DS(r,e,t,n,i,o,s,a,u,c,l,m){let d=L([_("instruction"),w("amountIn"),w("amountOut")]),p=[{pubkey:Qu.programId,isSigner:!1,isWritable:!1},{pubkey:ys,isSigner:!1,isWritable:!1},{pubkey:new ft(t.programId),isSigner:!1,isWritable:!1},{pubkey:new ft(t.id),isSigner:!1,isWritable:!0},{pubkey:new ft(n.id),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=ye(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(u)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(u)?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=ye(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 ft("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=ye(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:c,amountOut:l},y),new bs({keys:p,programId:r,data:y})}function qS(r,e,t,n,i,o,s,a,u,c){let l=L([_("instruction")]),m=[{pubkey:Qu.programId,isSigner:!1,isWritable:!1},{pubkey:ys,isSigner:!1,isWritable:!1},{pubkey:new ft(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new ft(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new ft(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=ye(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(u)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(u)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...c.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=ye(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 ft("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=ye(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 bs({keys:m,programId:r,data:d})}function Hu(r,e,t,n,i,o){if(r.pooltype.includes("StablePool")){let s=ye(e);return[{pubkey:s.programId,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.authority,isSigner:!1,isWritable:!1},{pubkey:s.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:new ft("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:s.openOrders,isSigner:!1,isWritable:!0},{pubkey:s.vault.A,isSigner:!1,isWritable:!0},{pubkey:s.vault.B,isSigner:!1,isWritable:!0},{pubkey:s.marketId,isSigner:!1,isWritable:!0},{pubkey:s.marketBids,isSigner:!1,isWritable:!0},{pubkey:s.marketAsks,isSigner:!1,isWritable:!0},{pubkey:s.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0}]}else if(r.type==="Concentrated"){let s=r,a=ye(e),u=s.mintA.address===t;return[{pubkey:new ft(String(r.programId)),isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a.config.id,isSigner:!1,isWritable:!1},{pubkey:a.id,isSigner:!1,isWritable:!0},{pubkey:u?a.vault.A:a.vault.B,isSigner:!1,isWritable:!0},{pubkey:u?a.vault.B:a.vault.A,isSigner:!1,isWritable:!0},{pubkey:a.id,isSigner:!1,isWritable:!0},...a.mintA.programId.equals(ps)||a.mintB.programId.equals(ps)?[{pubkey:ps,isSigner:!1,isWritable:!1},{pubkey:kn,isSigner:!1,isWritable:!1},{pubkey:u?a.mintA.address:a.mintB.address,isSigner:!1,isWritable:!1},{pubkey:u?a.mintB.address:a.mintA.address,isSigner:!1,isWritable:!1}]:[],...(o!=null?o:[]).map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:mt(new ft(String(r.programId)),new ft(r.id)).publicKey,isSigner:!1,isWritable:!0}]}else{let s=ye(e);return[{pubkey:s.programId,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.authority,isSigner:!1,isWritable:!1},{pubkey:s.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:s.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:s.openOrders,isSigner:!1,isWritable:!0},{pubkey:s.vault.A,isSigner:!1,isWritable:!0},{pubkey:s.vault.B,isSigner:!1,isWritable:!0},{pubkey:s.marketId,isSigner:!1,isWritable:!0},{pubkey:s.marketBids,isSigner:!1,isWritable:!0},{pubkey:s.marketAsks,isSigner:!1,isWritable:!0},{pubkey:s.marketEventQueue,isSigner:!1,isWritable:!0},...s.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:s.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:s.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:s.id,isSigner:!1,isWritable:!0},{pubkey:s.id,isSigner:!1,isWritable:!0}]]}}function Yp(r,e,t,n,i,o,s,a,u,c,l,m,d,p){let y=L([_("instruction"),w("amountIn"),w("amountOut")]),f=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:ys,isSigner:!1,isWritable:!1}];f.push(...Hu(a,c,o,t,n,p[0])),f.push(...Hu(u,l,s,n,i,p[1]));let b=Buffer.alloc(y.span);return y.encode({instruction:8,amountIn:m,amountOut:d},b),new bs({keys:f,programId:r,data:b})}async function US({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var i,o,s,a,u,c;if(n.routeType==="amm")if(n.poolInfo[0].type==="Concentrated"){let l=ye(n.poolKey[0]),m=t.equals(l.mintA.address)?Kt.add(at):Ct.sub(at);return await Se.makeSwapBaseInInstructions({poolInfo:l,poolKeys:l,observationId:l.vault.A,ownerInfo:{wallet:e.wallet,tokenAccountA:l.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:l.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((o=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?o:new fs(0)),sqrtPriceLimitX64:m,remainingAccounts:n.remainingAccounts[0]})}else{let l=n.poolKey[0];return{signers:[],instructions:[yi({poolKeys:l,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((a=(s=n.minAmountOut.fee)==null?void 0:s.raw)!=null?a:new fs(0)),fixedSide:"in"})],lookupTableAddress:l.lookupTableAccount?[l.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?V.AmmV5SwapBaseIn:V.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let l=n.poolInfo[0],m=n.poolInfo[1],d=n.poolKey[0],p=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Yp(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.minMiddleAmountFee.token.mint.toString(),l,m,d,p,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((c=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?c:new fs(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[d.lookupTableAccount,p.lookupTableAccount].filter(y=>y!==void 0),address:{}}}else throw Error("route type error")}import Zu from"bn.js";var gs=new Zu(1e6);function Hp(r,e,t){return r.mul(e).add(t).sub(new Zu(1)).div(t)}function ju(r,e,t){return r.mul(e).div(t)}var Si=class{static tradingFee(e,t){return Hp(e,t,gs)}static protocolFee(e,t){return ju(e,t,gs)}static fundFee(e,t){return ju(e,t,gs)}};import Lr from"bn.js";function Ki(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Qp(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=Ki(r,e);if(n.gt(Fn)){t=t.add(new Lr(1));let i=r.div(t);n=Ki(r,t),n.gt(Fn)&&(i=i.add(new Lr(1)))}return[t,e]}var Fn=new Lr(0),Ci=class{static swapWithoutFees(e,t,n){let i=t.mul(n),o=t.add(e),[s,a]=Qp(i,o),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}static lpTokensToTradingTokens(e,t,n,i,o){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(o===0)return{tokenAmount0:s,tokenAmount1:a};if(o===1)return Ki(e.mul(n),t).gt(Fn)&&s.gt(Fn)&&(s=s.add(new Lr(1))),Ki(e.mul(i),t).gt(Fn)&&a.gt(Fn)&&(a=a.add(new Lr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Ju=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Ju||{}),$u=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,i){let o=Si.tradingFee(e,i),s=e.sub(o),{sourceAmountSwapped:a,destinationAmountSwapped:u}=Ci.swapWithoutFees(s,t,n),c=a.add(o);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:o}}};var ec={[ni.toBase58()]:3},tc={3:ni};var jp=L([fe(5),fe(8),B("ownAddress"),w("vaultSignerNonce"),B("baseMint"),B("quoteMint"),B("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),B("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),B("requestQueue"),B("eventQueue"),B("bids"),B("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]),nc={3:jp};import{PublicKey as rc}from"@solana/web3.js";var Ri=ae("Serum"),ic=class{static getProgramId(e){let t=tc[e];return t||Ri.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=ec[t];return n||Ri.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=nc[e];return t||Ri.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()],i=0,o;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));o=rc.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:o,nonce:i}}return Ri.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:rc.default,nonce:i}}};var EK=r=>r;export{Pb as ACCOUNT_TYPE_SIZE,zb as ALL_PROGRAM_ID,Jd as AMM_CONFIG_SEED,Fl as AMM_STABLE,io as AMM_V4,gf as ANAMint,De as API_URLS,Nl as AccountType,fT as AmmConfigLayout,ii as Api,fu as BIT_PRECISION,Yt as BNDivCeil,an as BNLayout,xy as BN_100,By as BN_1000,Sy as BN_10000,Iy as BN_FIVE,Ys as BN_ONE,nn as BN_TEN,Ty as BN_THREE,hy as BN_TWO,Ke as BN_ZERO,ew as BitStructure,ya as Blob,vl as CLMM_PROGRAM_ID,Gi as CLOCK_PROGRAM_ID,zl as CREATE_CPMM_POOL_AUTH,Yl as CREATE_CPMM_POOL_FEE_ACC,Xl as CREATE_CPMM_POOL_PROGRAM,kr as Clmm,Se as ClmmInstrument,Ci as ConstantProductCurve,vu as CpmmConfigInfoLayout,Si as CpmmFee,Wu as CpmmPoolInfoLayout,Gn as Currency,rn as CurrencyAmount,$u as CurveCalculator,Yb as DEVNET_PROGRAM_ID,Pg as DEV_API_URLS,Ql as DEV_CREATE_CPMM_POOL_AUTH,jl as DEV_CREATE_CPMM_POOL_FEE_ACC,Hl as DEV_CREATE_CPMM_POOL_PROGRAM,Ed as DataElement,wf as ETHMint,Jo as EXTENSION_TICKARRAY_BITMAP_SIZE,Ea as FARM_LOCK_MINT,Fa as FARM_LOCK_VAULT,no as FARM_PROGRAM_ID_V3,ro as FARM_PROGRAM_ID_V5,Sn as FARM_PROGRAM_ID_V6,ct as FARM_PROGRAM_TO_VERSION,Wa as FARM_VERSION_TO_LEDGER_LAYOUT,va as FARM_VERSION_TO_STATE_LAYOUT,Xb as FEE_DESTINATION_ID,Ai as FEE_RATE_DENOMINATOR,gs as FEE_RATE_DENOMINATOR_VALUE,sp as FETCH_TICKARRAY_COUNT,op as Fee,te as Fraction,Jn as IDO_ALL_PROGRAM,Dl as IDO_PROGRAM_ID_V1,ql as IDO_PROGRAM_ID_V2,Ul as IDO_PROGRAM_ID_V3,Gl as IDO_PROGRAM_ID_V4,Ur as INSTRUCTION_PROGRAM_ID,V as InstructionType,oo as JupTokenType,Su as LIQUIDITY_FEES_DENOMINATOR,Bu as LIQUIDITY_FEES_NUMERATOR,pp as LIQUIDITY_VERSION_TO_SERUM_VERSION,Rk as LIQUIDITY_VERSION_TO_STATE_LAYOUT,yu as LOG_B_2_X32,bu as LOG_B_P_ERR_MARGIN_LOWER_X64,gu as LOG_B_P_ERR_MARGIN_UPPER_X64,ei as LOOKUP_TABLE_CACHE,$n as Layout,ce as LiquidityMath,mc as LogLevel,Ni as Logger,ss as MARKET_STATE_LAYOUT_V2,jp as MARKET_STATE_LAYOUT_V3,nc as MARKET_VERSION_TO_STATE_LAYOUT,ta as MAX_BASE64_SIZE,Ct as MAX_SQRT_PRICE_X64,tt as MAX_TICK,kn as MEMO_PROGRAM_ID,Ds as MEMO_PROGRAM_ID2,hn as METADATA_PROGRAM_ID,Kt as MIN_SQRT_PRICE_X64,je as MIN_TICK,Nn as MODEL_DATA_PUBKEY,ic as Market,$ as MathUtil,Zo as MaxU64,pu as MaxUint128,Ft as NEGATIVE_ONE,bf as NRVMint,at as ONE,El as OPEN_BOOK_PROGRAM,rp as OPERATION_SEED,es as ObservationInfoLayout,cp as ObservationLayout,ku as OperationLayout,po as OptionLayout,gt as Owner,cf as PAIMint,tp as POOL_REWARD_VAULT_SEED,$d as POOL_SEED,ip as POOL_TICK_ARRAY_BITMAP_SEED,ep as POOL_VAULT_SEED,lu as POSITION_SEED,Ve as Percent,ca as PoolFetchType,Pi as PoolInfoLayout,Ze as PoolUtils,ki as PositionInfoLayout,mp as PositionRewardInfoLayout,wr as PositionUtils,ze as Price,yT as ProtocolPositionLayout,wi as Q128,ut as Q64,uf as RAYMint,rt as RENT_PROGRAM_ID,Bi as Raydium,lp as RewardInfo,Ju as RoundDirection,Hi as Rounding,Wl as Router,ec as SERUM_PROGRAMID_TO_VERSION,ni as SERUM_PROGRAM_ID_V3,tc as SERUM_VERSION_TO_PROGRAMID,la as SESSION_KEY,Me as SOLMint,Tt as SOL_INFO,ok as SPL_MINT_LAYOUT,lf as SRMMint,so as STORAGE_KEY,Gr as SYSTEM_PROGRAM_ID,J as SqrtPriceMath,On as StableLayout,fo as Structure,pn as SwapMath,dn as TICK_ARRAY_BITMAP_SIZE,np as TICK_ARRAY_SEED,Ee as TICK_ARRAY_SIZE,rh as TICK_SPACINGS,_e as TOKEN_WSOL,vt as TickArrayBitmap,Pu as TickArrayBitmapExtensionLayout,gr as TickArrayBitmapExtensionUtils,br as TickArrayLayout,dp as TickLayout,fn as TickMath,le as TickQuery,X as TickUtils,pe as Token,Te as TokenAmount,ti as TxBuilder,In as TxVersion,yr as U64Resolution,oh as U64_IGNORE_RANGE,co as UInt,mf as USDCMint,yf as USDHMint,df as USDTMint,Vl as UTIL1216,yo as Union,_a as Voter,wd as VoterDepositEntry,gd as VoterLockup,Ma as VoterRegistrar,bd as VoterVotingMintConfig,ne as WSOLMint,ai as WideBits,Mt as WrappedLayout,de as ZERO,Us as _100_PERCENT,k as accountMeta,cy as add,Zr as addComputeBudget,Go as addLiquidityLayout,vw as array,To as associatedLedgerAccountLayout,lo as bits,fe as blob,Ue as bool,Vo as calFarmRewardAmount,Hp as ceilDiv,Xn as checkLegacyTxSize,zn as checkV0TxSize,eo as chunkArray,Kr as claimLayout,_t as closeAccountInstruction,Di as commonSystemAccountMeta,fi as createAssociatedLedgerAccountInstruction,ae as createLogger,ja as createPoolFeeLayout,ou as createPoolV4InstructionV2,Ck as createPoolV4Layout,Vt as createWSolAccountInstructions,Kw as cstr,Yf as currencyEquals,Pl as decimalToFraction,zm as decodeBool,oy as div,Yr as divCeil,et as dwLayout,Ym as encodeBool,Wg as endlessRetry,gl as eq,Tw as f32,Iw as f32be,xw as f64,Bw as f64be,So as farmAddRewardLayout,GA as farmLedgerLayoutV3_1,ir as farmLedgerLayoutV3_2,XA as farmLedgerLayoutV5_1,Oa as farmLedgerLayoutV5_2,Na as farmLedgerLayoutV6_1,qa as farmRewardInfoToConfig,xo as farmRewardLayout,Bo as farmRewardRestartLayout,yd as farmRewardTimeInfoLayout,Ra as farmStateV3Layout,La as farmStateV5Layout,rr as farmStateV6Layout,bP as fetchMultipleFarmInfoAndUpdate,GT as fetchMultipleInfo,kb as fetchMultipleMintInfos,oe as findProgramAddress,Wo as fixedSwapInLayout,Do as fixedSwapOutLayout,ju as floorDiv,Jr as forecastTransactionSize,Yd as formatLayout,He as generatePubKey,be as getATAAddress,Da as getAssociatedAuthority,rs as getAssociatedConfigId,Qe as getAssociatedLedgerAccount,sr as getAssociatedLedgerPoolAccount,gp as getAssociatedOpenOrders,Cu as getAssociatedPoolKeys,Sp as getCpmmPdaAmmConfigId,Kp as getCpmmPdaPoolId,Ou as getCreatePoolKeys,sa as getDate,Eo as getDepositEntryIndex,eu as getDxByDyBaseIn,$a as getDyByDxBaseIn,mb as getEpochInfo,Ln as getFarmLedgerLayout,Ad as getFarmStateLayout,wp as getLiquidityAssociatedAuthority,yn as getLiquidityAssociatedId,Gh as getLiquidityFromAmounts,uy as getMax,It as getMultipleAccountsInfo,Bn as getMultipleAccountsInfoWithCustomFlags,to as getMultipleLookupTableInfo,eh as getPdaAmmConfigId,mt as getPdaExBitmapAccount,Cp as getPdaLpMint,gi as getPdaMetadataKey,Ti as getPdaObservationId,fr as getPdaOperationAccount,lt as getPdaPersonalPositionAddress,Bp as getPdaPoolAuthority,mu as getPdaPoolId,du as getPdaPoolRewardVaulId,jo as getPdaPoolVaultId,mn as getPdaProtocolPositionAddress,we as getPdaTickArrayAddress,Lu as getPdaVault,xn as getRecentBlockHash,Ro as getRegistrarAddress,$l as getSessionKey,tu as getStablePrice,_l as getTime,eb as getTimestamp,_o as getTokenOwnerRecordAddress,eg as getTransferAmountFee,Pe as getTransferAmountFeeV2,No as getVoterAddress,Mo as getVoterWeightRecordAddress,Oo as getVotingMintAuthority,Lo as getVotingTokenMint,Kd as governanceCreateTokenOwnerRecord,tw as greedy,bl as gt,iy as gte,ha as i128,Qk as i16ToBytes,bi as i32ToBytes,ui as i64,ka as i8,qo as initPoolLayout,ko as initTokenAccountInstruction,Dp as initializeMarket,Fb as intersection,ua as isDateAfter,aa as isDateBefore,kl as isDecimal,ay as isMeaningfulNumber,oa as isNumber,Ko as isValidFarmVersion,pr as isZero,ye as jsonInfo2PoolKeys,gP as judgeFarmType,Ho as leadingZeros,cu as leastSignificantBit,Uo as liquidityStateV4Layout,_d as liquidityStateV5Layout,ny as lt,ry as lte,pf as mSOLMint,yi as makeAMMSwapInstruction,iu as makeAddLiquidityInstruction,vo as makeAddNewRewardInstruction,xi as makeClaimInstruction,ls as makeClaimInstructionV4,Mu as makeCreateCpmmPoolInInstruction,Ua as makeCreateFarmInstruction,Xu as makeCreateMarketInstruction,Ga as makeCreatorWithdrawFarmRewardInstruction,_u as makeDepositCpmmInInstruction,Xa as makeDepositInstructionV3,za as makeDepositInstructionV5,Ya as makeDepositInstructionV6,MP as makeDepositTokenInstruction,VP as makeDepositWithdrawInstruction,Yk as makeInitPoolInstructionV4,_B as makePurchaseInstruction,Fo as makeRestartRewardInstruction,su as makeSimulatePoolInfoInstruction,Eu as makeSwapCpmmBaseInInInstruction,Fu as makeSwapCpmmBaseOutInInstruction,jd as makeSwapFixedInInstruction,Zd as makeSwapFixedOutInstruction,US as makeSwapInstruction,tr as makeTransferInstruction,Vu as makeWithdrawCpmmInInstruction,mr as makeWithdrawInstructionV3,lr as makeWithdrawInstructionV5,cr as makeWithdrawInstructionV6,_P as makeWithdrawTokenInstruction,sn as minExpirationTime,ih as mockCreatePoolInfo,wu as mockV3CreatePoolInfo,Fd as modelDataInfoLayout,uu as mostSignificantBit,Zi as mul,Ji as notInnerObject,bw as ns64,hw as ns64be,ba as nu64,lw as nu64be,mo as offset,qb as offsetDateTime,Mw as option,G as parseBigNumberish,tn as parseNumberInfo,ra as parseSimulateLogToJson,Nt as parseSimulateValue,Ca as parseTokenAccountResp,pk as parseTokenInfo,Jt as poolTypeV6,on as printSimulate,B as publicKey,as as purchaseLayout,dd as realFarmStateV3Layout,pd as realFarmStateV5Layout,fd as realFarmV6Layout,zs as recursivelyDecimalToFraction,Yo as removeLiquidityInstruction,Xo as removeLiquidityLayout,DS as route1Instruction,qS as route2Instruction,Yp as routeInstruction,Fw as rustEnum,dw as s16,gw as s16be,pw as s24,ww as s24be,qe as s32,Aw as s32be,fw as s40,Pw as s40be,yw as s48,kw as s48be,mw as s8,q as seq,tf as setLoggerLevel,wl as shakeFractionDecimal,na as simulateMultipleInstruction,zk as simulatePoolInfoInstruction,Kl as simulateTransaction,js as sleep,Tn as solToWSol,bk as solToWSolToken,Ht as splAccountLayout,Qs as splitNumber,ff as stSOLMint,Ew as str,L as struct,sy as sub,Vw as tagged,Qi as tenExponential,Al as toBN,Cl as toBuffer,Hs as toFraction,ty as toFractionWithDecimals,Ky as toPercent,Qa as toToken,yk as toTokenAmount,fk as toTokenInfo,Cy as toTokenPrice,Ry as toTotalPrice,Xs as toUsdCurrency,Qo as trailingZeros,Ui as tryParsePublicKey,Y as u128,Bt as u16,au as u16ToBytes,ow as u16be,nw as u24,sw as u24be,Ye as u32,jk as u32ToBytes,aw as u32be,rw as u40,uw as u40be,iw as u48,cw as u48be,w as u64,_ as u8,Ww as union,EK as unionArr,Sw as unionLayoutDiscriminator,Wb as uniq,Pd as updateFarmPoolInfo,ri as updateReqHistory,Cw as utf8,qi as validateAndParsePublicKey,Co as validateFarmRewards,_w as vec,Hm as vecU8,Rd as voterStakeRegistryCreateDepositEntry,Cd as voterStakeRegistryCreateVoter,xd as voterStakeRegistryDeposit,Bd as voterStakeRegistryUpdateVoterWeightRecord,Sd as voterStakeRegistryWithdraw,gk as wSolToSolToken,Io as withdrawRewardLayout,vb as xor,Dw as zeros};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=index.mjs.map