@raydium-io/raydium-sdk-v2 0.1.63-alpha → 0.1.64-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/lib/api/api.d.ts +1 -1
  2. package/lib/api/index.d.ts +1 -1
  3. package/lib/api/type.d.ts +1 -1
  4. package/lib/{api-11ffb196.d.ts → api-f242758a.d.ts} +8 -8
  5. package/lib/common/accountInfo.d.ts +1 -1
  6. package/lib/common/bignumber.d.ts +1 -1
  7. package/lib/common/fractionUtil.d.ts +1 -1
  8. package/lib/common/index.d.ts +1 -1
  9. package/lib/common/transfer.d.ts +1 -1
  10. package/lib/common/txTool/txTool.d.ts +1 -1
  11. package/lib/common/txTool/txUtils.d.ts +1 -1
  12. package/lib/common/utility.d.ts +1 -1
  13. package/lib/index.d.ts +3 -3
  14. package/lib/index.js +1 -1
  15. package/lib/index.js.map +1 -1
  16. package/lib/index.mjs +1 -1
  17. package/lib/index.mjs.map +1 -1
  18. package/lib/module/amount.d.ts +1 -1
  19. package/lib/module/fraction.d.ts +1 -1
  20. package/lib/module/index.d.ts +1 -1
  21. package/lib/module/percent.d.ts +1 -1
  22. package/lib/module/price.d.ts +1 -1
  23. package/lib/raydium/account/account.d.ts +3 -3
  24. package/lib/raydium/account/index.d.ts +1 -1
  25. package/lib/raydium/account/instruction.d.ts +1 -1
  26. package/lib/raydium/account/types.d.ts +1 -1
  27. package/lib/raydium/account/util.d.ts +1 -1
  28. package/lib/raydium/clmm/clmm.d.ts +3 -3
  29. package/lib/raydium/clmm/index.d.ts +3 -3
  30. package/lib/raydium/clmm/instrument.d.ts +2 -2
  31. package/lib/raydium/clmm/layout.d.ts +6 -6
  32. package/lib/raydium/clmm/type.d.ts +2 -2
  33. package/lib/raydium/clmm/utils/math.d.ts +2 -2
  34. package/lib/raydium/clmm/utils/pool.d.ts +2 -2
  35. package/lib/raydium/clmm/utils/position.d.ts +2 -2
  36. package/lib/raydium/clmm/utils/tick.d.ts +2 -2
  37. package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
  38. package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
  39. package/lib/raydium/cpmm/cpmm.d.ts +3 -3
  40. package/lib/raydium/cpmm/curve/calculator.d.ts +1 -1
  41. package/lib/raydium/cpmm/curve/constantProduct.d.ts +1 -1
  42. package/lib/raydium/cpmm/index.d.ts +1 -1
  43. package/lib/raydium/cpmm/layout.d.ts +1 -1
  44. package/lib/raydium/cpmm/type.d.ts +1 -1
  45. package/lib/raydium/farm/config.d.ts +1 -1
  46. package/lib/raydium/farm/farm.d.ts +3 -3
  47. package/lib/raydium/farm/index.d.ts +1 -1
  48. package/lib/raydium/farm/instruction.d.ts +1 -1
  49. package/lib/raydium/farm/layout.d.ts +1 -1
  50. package/lib/raydium/farm/type.d.ts +1 -1
  51. package/lib/raydium/farm/util.d.ts +1 -1
  52. package/lib/raydium/ido/ido.d.ts +3 -3
  53. package/lib/raydium/ido/index.d.ts +3 -3
  54. package/lib/raydium/ido/instruction.d.ts +1 -1
  55. package/lib/raydium/ido/type.d.ts +1 -1
  56. package/lib/raydium/index.d.ts +3 -3
  57. package/lib/raydium/index.js +1 -1
  58. package/lib/raydium/index.js.map +1 -1
  59. package/lib/raydium/index.mjs +1 -1
  60. package/lib/raydium/index.mjs.map +1 -1
  61. package/lib/raydium/liquidity/index.d.ts +1 -1
  62. package/lib/raydium/liquidity/instruction.d.ts +1 -1
  63. package/lib/raydium/liquidity/layout.d.ts +6 -6
  64. package/lib/raydium/liquidity/liquidity.d.ts +3 -3
  65. package/lib/raydium/liquidity/type.d.ts +1 -1
  66. package/lib/raydium/liquidity/utils.d.ts +1 -1
  67. package/lib/raydium/marketV2/createMarket.d.ts +3 -3
  68. package/lib/raydium/marketV2/index.d.ts +3 -3
  69. package/lib/raydium/moduleBase.d.ts +3 -3
  70. package/lib/raydium/raydium.d.ts +3 -3
  71. package/lib/raydium/raydium.js +1 -1
  72. package/lib/raydium/raydium.js.map +1 -1
  73. package/lib/raydium/raydium.mjs +1 -1
  74. package/lib/raydium/raydium.mjs.map +1 -1
  75. package/lib/raydium/token/constant.d.ts +1 -1
  76. package/lib/raydium/token/index.d.ts +1 -1
  77. package/lib/raydium/token/token.d.ts +3 -3
  78. package/lib/raydium/token/token.js +1 -1
  79. package/lib/raydium/token/token.js.map +1 -1
  80. package/lib/raydium/token/token.mjs +1 -1
  81. package/lib/raydium/token/token.mjs.map +1 -1
  82. package/lib/raydium/token/type.d.ts +1 -1
  83. package/lib/raydium/token/utils.d.ts +1 -1
  84. package/lib/raydium/tradeV2/index.d.ts +2 -2
  85. package/lib/raydium/tradeV2/instrument.d.ts +2 -2
  86. package/lib/raydium/tradeV2/trade.d.ts +3 -3
  87. package/lib/raydium/tradeV2/type.d.ts +2 -2
  88. package/lib/raydium/type.d.ts +1 -1
  89. package/lib/raydium/utils1216/index.d.ts +3 -3
  90. package/lib/raydium/utils1216/utils1216.d.ts +3 -3
  91. package/lib/{raydium-a023305c.d.ts → raydium-5502e631.d.ts} +3 -3
  92. package/lib/{type-1bf767ed.d.ts → type-b1a9baec.d.ts} +1 -1
  93. package/package.json +1 -1
  94. package/src/raydium/raydium.ts +1 -1
  95. package/src/raydium/token/token.ts +1 -2
package/lib/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- var _c=Object.defineProperty,vc=Object.defineProperties;var Vc=Object.getOwnPropertyDescriptors;var jo=Object.getOwnPropertySymbols;var Hs=Object.prototype.hasOwnProperty,Zs=Object.prototype.propertyIsEnumerable;var js=(o,e,t)=>e in o?_c(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,K=(o,e)=>{for(var t in e||(e={}))Hs.call(e,t)&&js(o,t,e[t]);if(jo)for(var t of jo(e))Zs.call(e,t)&&js(o,t,e[t]);return o},E=(o,e)=>vc(o,Vc(e));var Oe=(o,e)=>{var t={};for(var n in o)Hs.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&jo)for(var n of jo(o))e.indexOf(n)<0&&Zs.call(o,n)&&(t[n]=o[n]);return t};import Wa from"axios";import{get as oi,set as $s}from"lodash";var Fc=(r=>(r[r.Error=0]="Error",r[r.Warning=1]="Warning",r[r.Info=2]="Info",r[r.Debug=3]="Debug",r))(Fc||{}),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 Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},ii={},Js={};function ce(o){let e=oi(ii,o);if(!e){let t=oi(Js,o);e=new ri({name:o,logLevel:t}),$s(ii,o,e)}return e}function Sf(o,e){$s(Js,o,e);let t=oi(ii,o);t&&(t.level=e)}import{PublicKey as Zl}from"@solana/web3.js";import $l from"bn.js";import jl from"big.js";import nn from"bn.js";import Te from"bn.js";var Nn=9e15,tn=1e9,si="0123456789abcdef",Zo="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",$o="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",ai={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Nn,maxE:Nn,crypto:!1},oa,Et,oe=!0,er="[DecimalError] ",en=er+"Invalid argument: ",ra=er+"Precision limit exceeded",ia=er+"crypto unavailable",sa="[object Decimal]",$e=Math.floor,Ve=Math.pow,Ec=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Dc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Wc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,aa=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,It=1e7,te=7,qc=9007199254740991,Uc=Zo.length-1,ui=$o.length-1,v={toStringTag:sa};v.absoluteValue=v.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),$(o)};v.ceil=function(){return $(new this.constructor(this),this.e+1,2)};v.clampedTo=v.clamp=function(o,e){var t,n=this,r=n.constructor;if(o=new r(o),e=new r(e),!o.s||!e.s)return new r(NaN);if(o.gt(e))throw Error(en+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new r(n)};v.comparedTo=v.cmp=function(o){var e,t,n,r,i=this,s=i.d,a=(o=new i.constructor(o)).d,c=i.s,u=o.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(i.e!==o.e)return i.e>o.e^c<0?1:-1;for(n=s.length,r=a.length,e=0,t=n<r?n:r;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===r?0:n>r^c<0?1:-1};v.cosine=v.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+te,n.rounding=1,t=Gc(n,da(n,t)),n.precision=o,n.rounding=e,$(Et==2||Et==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};v.cubeRoot=v.cbrt=function(){var o,e,t,n,r,i,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,i=l.s*Ve(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=ze(l.d),o=l.e,(i=(o-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Ve(t,1/3),o=$e((o+1)/3)-(o%3==(o<0?-1:2)),i==1/0?t="5e"+o:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(o=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=ke(u.plus(l).times(a),u.plus(c),s+2,1),ze(a.d).slice(0,s)===(t=ze(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&($(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,r=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&($(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,$(n,o,m.rounding,e)};v.decimalPlaces=v.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-$e(this.e/te))*te,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};v.dividedBy=v.div=function(o){return ke(this,new this.constructor(o))};v.dividedToIntegerBy=v.divToInt=function(o){var e=this,t=e.constructor;return $(ke(e,new t(o),0,1,1),t.precision,t.rounding)};v.equals=v.eq=function(o){return this.cmp(o)===0};v.floor=function(){return $(new this.constructor(this),this.e+1,3)};v.greaterThan=v.gt=function(o){return this.cmp(o)>0};v.greaterThanOrEqualTo=v.gte=function(o){var e=this.cmp(o);return e==1||e===0};v.hyperbolicCosine=v.cosh=function(){var o,e,t,n,r,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,r=i.d.length,r<32?(o=Math.ceil(r/3),e=(1/nr(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=Mn(s,1,i.times(e),new s(1),!0);for(var c,u=o,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return $(i,s.precision=t,s.rounding=n,!0)};v.hyperbolicSine=v.sinh=function(){var o,e,t,n,r=this,i=r.constructor;if(!r.isFinite()||r.isZero())return new i(r);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(r.e,r.sd())+4,i.rounding=1,n=r.d.length,n<3)r=Mn(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/nr(5,o)),r=Mn(i,2,r,r,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);o--;)s=r.times(r),r=r.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,$(r,e,t,!0)};v.hyperbolicTangent=v.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,ke(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};v.inverseCosine=v.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),r=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?Tt(t,r,i):new t(0):new t(NaN):e.isZero()?Tt(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=Tt(t,r+4,i).times(.5),t.precision=r,t.rounding=i,o.minus(e))};v.inverseHyperbolicCosine=v.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};v.inverseHyperbolicSine=v.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln())};v.inverseHyperbolicTangent=v.atanh=function(){var o,e,t,n,r=this,i=r.constructor;return r.isFinite()?r.e>=0?new i(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(o=i.precision,e=i.rounding,n=r.sd(),Math.max(n,o)<2*-r.e-1?$(new i(r),o,e,!0):(i.precision=t=n-r.e,r=ke(r.plus(1),new i(1).minus(r),t+o,1),i.precision=o+4,i.rounding=1,r=r.ln(),i.precision=o,i.rounding=e,r.times(.5))):new i(NaN)};v.inverseSine=v.asin=function(){var o,e,t,n,r=this,i=r.constructor;return r.isZero()?new i(r):(e=r.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(o=Tt(i,t+4,n).times(.5),o.s=r.s,o):new i(NaN):(i.precision=t+6,i.rounding=1,r=r.div(new i(1).minus(r.times(r)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,r.times(2)))};v.inverseTangent=v.atan=function(){var o,e,t,n,r,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=ui)return s=Tt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=ui)return s=Tt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/te+2|0),o=t;o;--o)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/te),n=1,c=u.times(u),s=new l(u),r=u;o!==-1;)if(r=r.times(c),i=s.minus(r.div(n+=2)),r=r.times(c),s=i.plus(r.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===i.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),oe=!0,$(s,l.precision=m,l.rounding=d,!0)};v.isFinite=function(){return!!this.d};v.isInteger=v.isInt=function(){return!!this.d&&$e(this.e/te)>this.d.length-2};v.isNaN=function(){return!this.s};v.isNegative=v.isNeg=function(){return this.s<0};v.isPositive=v.isPos=function(){return this.s>0};v.isZero=function(){return!!this.d&&this.d[0]===0};v.lessThan=v.lt=function(o){return this.cmp(o)<0};v.lessThanOrEqualTo=v.lte=function(o){return this.cmp(o)<1};v.logarithm=v.log=function(o){var e,t,n,r,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)i=!0;else{for(r=t[0];r%10===0;)r/=10;i=r!==1}if(oe=!1,a=m+p,s=Jt(u,a),n=e?Jo(l,a+10):Jt(o,a),c=ke(s,n,a,1),$n(c.d,r=m,d))do if(a+=10,s=Jt(u,a),n=e?Jo(l,a+10):Jt(o,a),c=ke(s,n,a,1),!i){+ze(c.d).slice(r+1,r+15)+1==1e14&&(c=$(c,m+1,0));break}while($n(c.d,r+=10,d));return oe=!0,$(c,m,d)};v.minus=v.sub=function(o){var e,t,n,r,i,s,a,c,u,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(u=p.d,d=o.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])o.s=-o.s;else if(u[0])o=new y(p);else return new y(c===3?-0:0);return oe?$(o,a,c):o}if(t=$e(o.e/te),l=$e(p.e/te),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/te),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}i=0}for(m&&(e=u,u=d,d=e,o.s=-o.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>i;){if(u[--n]<d[n]){for(r=n;r&&u[--r]===0;)u[r]=It-1;--u[r],u[n]+=It}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(o.d=u,o.e=tr(u,t),oe?$(o,a,c):o):new y(c===3?-0:0)};v.modulo=v.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?$(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=ke(t,o.abs(),0,3,1),e.s*=o.s):e=ke(t,o,0,n.modulo,1),e=e.times(o),oe=!0,t.minus(e))};v.naturalExponential=v.exp=function(){return ci(this)};v.naturalLogarithm=v.ln=function(){return Jt(this)};v.negated=v.neg=function(){var o=new this.constructor(this);return o.s=-o.s,$(o)};v.plus=v.add=function(o){var e,t,n,r,i,s,a,c,u,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(u=m.d,l=o.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(o=new d(m)),oe?$(o,a,c):o;if(i=$e(m.e/te),n=$e(o.e/te),u=u.slice(),r=i-n,r){for(r<0?(t=u,r=-r,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/te),s=i>s?i+1:s+1,r>s&&(r=s,t.length=1),t.reverse();r--;)t.push(0);t.reverse()}for(s=u.length,r=l.length,s-r<0&&(r=s,t=l,l=u,u=t),e=0;r;)e=(u[--r]=u[r]+l[r]+e)/It|0,u[r]%=It;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return o.d=u,o.e=tr(u,n),oe?$(o,a,c):o};v.precision=v.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(en+o);return t.d?(e=ua(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};v.round=function(){var o=this,e=o.constructor;return $(new e(o),o.e+1,e.rounding)};v.sine=v.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+te,n.rounding=1,t=zc(n,da(n,t)),n.precision=o,n.rounding=e,$(Et>2?t.neg():t,o,e,!0)):new n(NaN)};v.squareRoot=v.sqrt=function(){var o,e,t,n,r,i,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(oe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=ze(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=$e((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(i=n,n=i.plus(ke(s,i,t+2,1)).times(.5),ze(i.d).slice(0,t)===(e=ze(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&($(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,r=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&($(n,c+1,1),o=!n.times(n).eq(s));break}return oe=!0,$(n,c,l.rounding,o)};v.tangent=v.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=ke(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,$(Et==2||Et==4?t.neg():t,o,e,!0)):new n(NaN)};v.times=v.mul=function(o){var e,t,n,r,i,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=$e(l.e/te)+$e(o.e/te),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,s=c,c=u,u=s),i=[],s=c+u,n=s;n--;)i.push(0);for(n=u;--n>=0;){for(e=0,r=c+n;r>n;)a=i[r]+p[n]*d[r-n-1]+e,i[r--]=a%It|0,e=a/It|0;i[r]=(i[r]+e)%It|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),o.d=i,o.e=tr(i,t),oe?$(o,m.precision,m.rounding):o};v.toBinary=function(o,e){return mi(this,2,o,e)};v.toDecimalPlaces=v.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(at(o,0,tn),e===void 0?e=n.rounding:at(e,0,8),$(t,o+t.e+1,e))};v.toExponential=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Nt(n,!0):(at(o,0,tn),e===void 0?e=r.rounding:at(e,0,8),n=$(new r(n),o+1,e),t=Nt(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toFixed=function(o,e){var t,n,r=this,i=r.constructor;return o===void 0?t=Nt(r):(at(o,0,tn),e===void 0?e=i.rounding:at(e,0,8),n=$(new i(r),o+r.e+1,e),t=Nt(n,!1,o+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};v.toFraction=function(o){var e,t,n,r,i,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),i=e.e=ua(y)-p.e-1,s=i%te,e.d[0]=Ve(10,s<0?te+s:s),o==null)o=i>0?e:u;else{if(a=new f(o),!a.isInt()||a.lt(u))throw Error(en+a);o=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(ze(y)),l=f.precision,f.precision=i=y.length*te*2;m=ke(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(o)!=1;)t=n,n=r,r=u,u=c.plus(m.times(r)),c=r,r=e,e=a.minus(m.times(r)),a=r;return r=ke(o.minus(t),n,0,1,1),c=c.plus(r.times(u)),t=t.plus(r.times(n)),c.s=u.s=p.s,d=ke(u,n,i,1).minus(p).abs().cmp(ke(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};v.toHexadecimal=v.toHex=function(o,e){return mi(this,16,o,e)};v.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:at(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(oe=!1,t=ke(t,o,0,e,1).times(o),oe=!0,$(t)):(o.s=t.s,t=o),t};v.toNumber=function(){return+this};v.toOctal=function(o,e){return mi(this,8,o,e)};v.toPower=v.pow=function(o){var e,t,n,r,i,s,a=this,c=a.constructor,u=+(o=new c(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new c(Ve(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,o.eq(1))return $(a,n,i);if(e=$e(o.e/te),e>=o.d.length-1&&(t=u<0?-u:u)<=qc)return r=ca(c,a,t,n),o.s<0?new c(1).div(r):$(r,n,i);if(s=a.s,s<0){if(e<o.d.length-1)return new c(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Ve(+a,u),e=t==0||!isFinite(t)?$e(u*(Math.log("0."+ze(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(oe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),r=ci(o.times(Jt(a,n+t)),n),r.d&&(r=$(r,n+5,1),$n(r.d,n,i)&&(e=n+10,r=$(ci(o.times(Jt(a,e+t)),e),e+5,1),+ze(r.d).slice(n+1,n+15)+1==1e14&&(r=$(r,n+1,0)))),r.s=s,oe=!0,c.rounding=i,$(r,n,i))};v.toPrecision=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Nt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(at(o,1,tn),e===void 0?e=r.rounding:at(e,0,8),n=$(new r(n),o,e),t=Nt(n,o<=n.e||n.e<=r.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toSignificantDigits=v.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(at(o,1,tn),e===void 0?e=n.rounding:at(e,0,8)),$(new n(t),o,e)};v.toString=function(){var o=this,e=o.constructor,t=Nt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};v.truncated=v.trunc=function(){return $(new this.constructor(this),this.e+1,1)};v.valueOf=v.toJSON=function(){var o=this,e=o.constructor,t=Nt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function ze(o){var e,t,n,r=o.length-1,i="",s=o[0];if(r>0){for(i+=s,e=1;e<r;e++)n=o[e]+"",t=te-n.length,t&&(i+=$t(t)),i+=n;s=o[e],n=s+"",t=te-n.length,t&&(i+=$t(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function at(o,e,t){if(o!==~~o||o<e||o>t)throw Error(en+o)}function $n(o,e,t,n){var r,i,s,a;for(i=o[0];i>=10;i/=10)--e;return--e<0?(e+=te,r=0):(r=Math.ceil((e+1)/te),e%=te),i=Ve(10,te-e),a=o[r]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==i||t>3&&a+1==i/2)&&(o[r+1]/i/100|0)==Ve(10,e-2)-1||(a==i/2||a==0)&&(o[r+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(o[r+1]/i/1e3|0)==Ve(10,e-3)-1,s}function Ho(o,e,t){for(var n,r=[0],i,s=0,a=o.length;s<a;){for(i=r.length;i--;)r[i]*=e;for(r[0]+=si.indexOf(o.charAt(s++)),n=0;n<r.length;n++)r[n]>t-1&&(r[n+1]===void 0&&(r[n+1]=0),r[n+1]+=r[n]/t|0,r[n]%=t)}return r.reverse()}function Gc(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/nr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=Mn(o,1,e.times(r),new o(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var ke=function(){function o(n,r,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*r+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,r,i,s){var a,c;if(i!=s)c=i>s?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=r[a]){c=n[a]>r[a]?1:-1;break}return c}function t(n,r,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<r[i]?1:0,n[i]=a*s+n[i]-r[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,r,i,s,a,c){var u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B,M,D,V=n.constructor,Z=n.s==r.s?1:-1,G=n.d,q=r.d;if(!G||!G[0]||!q||!q[0])return new V(!n.s||!r.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?Z*0:Z/0);for(c?(p=1,l=n.e-r.e):(c=It,p=te,l=$e(n.e/p)-$e(r.e/p)),M=q.length,R=G.length,g=new V(Z),w=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,i==null?(T=i=V.precision,s=V.rounding):a?T=i+(n.e-r.e)+1:T=i,T<0)w.push(1),y=!0;else{if(T=T/p+2|0,m=0,M==1){for(d=0,q=q[0],T++;(m<R||d)&&T--;m++)S=d*c+(G[m]||0),w[m]=S/q|0,d=S%q|0;y=d||m<R}else{for(d=c/(q[0]+1)|0,d>1&&(q=o(q,d,c),G=o(G,d,c),M=q.length,R=G.length),x=M,A=G.slice(0,M),k=A.length;k<M;)A[k++]=0;D=q.slice(),D.unshift(0),B=q[0],q[1]>=c/2&&++B;do d=0,u=e(q,A,M,k),u<0?(I=A[0],M!=k&&(I=I*c+(A[1]||0)),d=I/B|0,d>1?(d>=c&&(d=c-1),f=o(q,d,c),b=f.length,k=A.length,u=e(f,A,b,k),u==1&&(d--,t(f,M<b?D:q,b,c))):(d==0&&(u=d=1),f=q.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,c),u==-1&&(k=A.length,u=e(q,A,M,k),u<1&&(d++,t(A,M<k?D:q,k,c))),k=A.length):u===0&&(d++,A=[0]),w[m++]=d,u&&A[0]?A[k++]=G[x]||0:(A=[G[x]],k=1);while((x++<R||A[0]!==void 0)&&T--);y=A[0]!==void 0}w[0]||w.shift()}if(p==1)g.e=l,oa=y;else{for(m=1,d=w[0];d>=10;d/=10)m++;g.e=m+l*p-1,$(g,a?i+g.e+1:i,s,y)}return g}}();function $(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(r=1,a=m[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=te,s=e,l=m[d=0],c=l/Ve(10,r-s-1)%10|0;else if(d=Math.ceil((i+1)/te),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,r=1,i%=te,s=i-te+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;i%=te,s=i-te+r,c=s<0?0:l/Ve(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Ve(10,r-s-1)),u=t<4?(c||n)&&(t==0||t==(o.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/Ve(10,r-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=o.e+1,m[0]=Ve(10,(te-e%te)%te),o.e=-e||0):m[0]=o.e=0,o;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Ve(10,te-i),m[d]=s>0?(l/Ve(10,r-s)%Ve(10,s)|0)*a:0),u)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(o.e++,m[0]==It&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=It)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Nt(o,e,t){if(!o.isFinite())return ma(o);var n,r=o.e,i=ze(o.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+$t(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+$t(-r-1)+i,t&&(n=t-s)>0&&(i+=$t(n))):r>=s?(i+=$t(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+$t(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=$t(n))),i}function tr(o,e){var t=o[0];for(e*=te;t>=10;t/=10)e++;return e}function Jo(o,e,t){if(e>Uc)throw oe=!0,t&&(o.precision=t),Error(ra);return $(new o(Zo),e,1,!0)}function Tt(o,e,t){if(e>ui)throw Error(ra);return $(new o($o),e,t,!0)}function ua(o){var e=o.length-1,t=e*te+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function $t(o){for(var e="";o--;)e+="0";return e}function ca(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/te+4);for(oe=!1;;){if(t%2&&(i=i.times(e),ta(i.d,s)&&(r=!0)),t=$e(t/2),t===0){t=i.d.length-1,r&&i.d[t]===0&&++i.d[t];break}e=e.times(e),ta(e.d,s)}return oe=!0,i}function ea(o){return o.d[o.d.length-1]&1}function la(o,e,t){for(var n,r=new o(e[0]),i=0;++i<e.length;)if(n=new o(e[i]),n.s)r[t](n)&&(r=n);else{r=n;break}return r}function ci(o,e){var t,n,r,i,s,a,c,u=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(oe=!1,c=y):c=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Ve(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=$(i.times(o),c,1),t=t.times(++l),a=s.plus(ke(i,t,c,1)),ze(a.d).slice(0,c)===ze(s.d).slice(0,c)){for(r=m;r--;)s=$(s.times(s),c,1);if(e==null)if(u<3&&$n(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return $(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function Jt(o,e){var t,n,r,i,s,a,c,u,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,w=g.rounding,A=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(oe=!1,l=A):l=e,g.precision=l+=y,t=ze(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=ze(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return u=Jo(g,l+2,A).times(i+""),f=Jt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=A,e==null?$(f,A,w,oe=!0):f;for(m=f,c=s=f=ke(f.minus(1),f.plus(1),l,1),d=$(f.times(f),l,1),r=3;;){if(s=$(s.times(d),l,1),u=c.plus(ke(s,new g(r),l,1)),ze(u.d).slice(0,l)===ze(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(Jo(g,l+2,A).times(i+""))),c=ke(c,new g(p),l,1),e==null)if($n(c.d,l-y,w,a))g.precision=l+=y,u=s=f=ke(m.minus(1),m.plus(1),l,1),d=$(f.times(f),l,1),r=a=1;else return $(c,g.precision=A,w,oe=!0);else return g.precision=A,c;c=u,r+=2}}function ma(o){return String(o.s*o.s/0)}function li(o,e){var t,n,r;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(r=e.length;e.charCodeAt(r-1)===48;--r);if(e=e.slice(n,r),e){if(r-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%te,t<0&&(n+=te),n<r){for(n&&o.d.push(+e.slice(0,n)),r-=te;n<r;)o.d.push(+e.slice(n,n+=te));e=e.slice(n),n=te-e.length}else n-=r;for(;n--;)e+="0";o.d.push(+e),oe&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function Xc(o,e){var t,n,r,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),aa.test(e))return li(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(Dc.test(e))t=16,e=e.toLowerCase();else if(Ec.test(e))t=2;else if(Wc.test(e))t=8;else throw Error(en+e);for(i=e.search(/p/i),i>0?(c=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=o.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,r=ca(n,new n(t),i,i*2)),u=Ho(e,t,It),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(o.s*0):(o.e=tr(u,l),o.d=u,oe=!1,s&&(o=ke(o,r,a*4)),c&&(o=o.times(Math.abs(c)<54?Ve(2,c):Jn.pow(2,c))),oe=!0,o)}function zc(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Mn(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/nr(5,t)),e=Mn(o,2,e,e);for(var r,i=new o(5),s=new o(16),a=new o(20);t--;)r=e.times(e),e=e.times(i.plus(r.times(s.times(r).minus(a))));return e}function Mn(o,e,t,n,r){var i,s,a,c,u=1,l=o.precision,m=Math.ceil(l/te);for(oe=!1,c=t.times(t),a=new o(n);;){if(s=ke(a.times(c),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=ke(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function nr(o,e){for(var t=o;--e;)t*=o;return t}function da(o,e){var t,n=e.s<0,r=Tt(o,o.precision,1),i=r.times(.5);if(e=e.abs(),e.lte(i))return Et=n?4:1,e;if(t=e.divToInt(r),t.isZero())Et=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(i))return Et=ea(t)?n?2:3:n?4:1,e;Et=ea(t)?n?1:4:n?3:2}return e.minus(r).abs()}function mi(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor,y=t!==void 0;if(y?(at(t,1,tn),n===void 0?n=p.rounding:at(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=ma(o);else{for(l=Nt(o),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Ho(Nt(d),10,r),d.e=d.d.length),m=Ho(l,10,r),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=m,o.e=i,o=ke(o,d,t,n,0,r),m=o.d,i=o.e,u=oa),s=m[t],a=r/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,u)for(;++m[--t]>r-1;)m[t]=0,t||(++i,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=si.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=Ho(l,r,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=si.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>c)for(i-=c;i--;)l+="0";else i<c&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function ta(o,e){if(o.length>e)return o.length=e,!0}function Qc(o){return new this(o).abs()}function Yc(o){return new this(o).acos()}function jc(o){return new this(o).acosh()}function Hc(o,e){return new this(o).plus(e)}function Zc(o){return new this(o).asin()}function $c(o){return new this(o).asinh()}function Jc(o){return new this(o).atan()}function el(o){return new this(o).atanh()}function tl(o,e){o=new this(o),e=new this(e);var t,n=this.precision,r=this.rounding,i=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=Tt(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?Tt(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=Tt(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(ke(o,e,i,1)),e=Tt(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(ke(o,e,i,1)),t}function nl(o){return new this(o).cbrt()}function ol(o){return $(o=new this(o),o.e+1,2)}function rl(o,e,t){return new this(o).clamp(e,t)}function il(o){if(!o||typeof o!="object")throw Error(er+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,tn,"rounding",0,8,"toExpNeg",-Nn,0,"toExpPos",0,Nn,"maxE",0,Nn,"minE",-Nn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=ai[t]),(n=o[t])!==void 0)if($e(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(en+t+": "+n);if(t="crypto",r&&(this[t]=ai[t]),(n=o[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(ia);else this[t]=!1;else throw Error(en+t+": "+n);return this}function sl(o){return new this(o).cos()}function al(o){return new this(o).cosh()}function pa(o){var e,t,n;function r(i){var s,a,c,u=this;if(!(u instanceof r))return new r(i);if(u.constructor=r,na(i)){u.s=i.s,oe?!i.d||i.e>r.maxE?(u.e=NaN,u.d=null):i.e<r.minE?(u.e=0,u.d=[0]):(u.e=i.e,u.d=i.d.slice()):(u.e=i.e,u.d=i.d?i.d.slice():i.d);return}if(c=typeof i,c==="number"){if(i===0){u.s=1/i<0?-1:1,u.e=0,u.d=[0];return}if(i<0?(i=-i,u.s=-1):u.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;oe?s>r.maxE?(u.e=NaN,u.d=null):s<r.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[i]):(u.e=s,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return li(u,i.toString())}else if(c!=="string")throw Error(en+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),aa.test(i)?li(u,i):Xc(u,i)}if(r.prototype=v,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=il,r.clone=pa,r.isDecimal=na,r.abs=Qc,r.acos=Yc,r.acosh=jc,r.add=Hc,r.asin=Zc,r.asinh=$c,r.atan=Jc,r.atanh=el,r.atan2=tl,r.cbrt=nl,r.ceil=ol,r.clamp=rl,r.cos=sl,r.cosh=al,r.div=ul,r.exp=cl,r.floor=ll,r.hypot=ml,r.ln=dl,r.log=pl,r.log10=yl,r.log2=fl,r.max=bl,r.min=gl,r.mod=Al,r.mul=wl,r.pow=Pl,r.random=hl,r.round=kl,r.sign=Tl,r.sin=Il,r.sinh=Bl,r.sqrt=xl,r.sub=Sl,r.sum=Kl,r.tan=Cl,r.tanh=Rl,r.trunc=Ol,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return r.config(o),r}function ul(o,e){return new this(o).div(e)}function cl(o){return new this(o).exp()}function ll(o){return $(o=new this(o),o.e+1,3)}function ml(){var o,e,t=new this(0);for(oe=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function na(o){return o instanceof Jn||o&&o.toStringTag===sa||!1}function dl(o){return new this(o).ln()}function pl(o,e){return new this(o).log(e)}function fl(o){return new this(o).log(2)}function yl(o){return new this(o).log(10)}function bl(){return la(this,arguments,"lt")}function gl(){return la(this,arguments,"gt")}function Al(o,e){return new this(o).mod(e)}function wl(o,e){return new this(o).mul(e)}function Pl(o,e){return new this(o).pow(e)}function hl(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:at(o,1,tn),n=Math.ceil(o/te),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)r=e[i],r>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=r%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)r=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(r%1e7),i+=4);i=n/4}else throw Error(ia);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],o%=te,n&&o&&(r=Ve(10,te-o),a[i]=(n/r|0)*r);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=te)a.shift();for(n=1,r=a[0];r>=10;r/=10)n++;n<te&&(t-=te-n)}return s.e=t,s.d=a,s}function kl(o){return $(o=new this(o),o.e+1,this.rounding)}function Tl(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function Il(o){return new this(o).sin()}function Bl(o){return new this(o).sinh()}function xl(o){return new this(o).sqrt()}function Sl(o,e){return new this(o).sub(e)}function Kl(){var o=0,e=arguments,t=new this(e[o]);for(oe=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return oe=!0,$(t,this.precision,this.rounding)}function Cl(o){return new this(o).tan()}function Rl(o){return new this(o).tanh()}function Ol(o){return $(o=new this(o),o.e+1,1)}v[Symbol.for("nodejs.util.inspect.custom")]=v.toString;v[Symbol.toStringTag]="Decimal";var Jn=v.constructor=pa(ai);Zo=new Jn(Zo);$o=new Jn($o);var O=Jn;import{PublicKey as bi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ll}from"@solana/spl-token";import{PublicKey as xe,SystemProgram as fa,SYSVAR_RENT_PUBKEY as Nl}from"@solana/web3.js";function P({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var di=[P({pubkey:Ll,isWritable:!1}),P({pubkey:fa.programId,isWritable:!1}),P({pubkey:Nl,isWritable:!1})];function pi({publicKey:o,transformSol:e}){let t=fi(o.toString());if(t instanceof xe)return e&&t.equals(Fe)?j:t;if(e&&t.toString()===Fe.toBase58())return j;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 fi(o){try{return new xe(o)}catch{return o}}var or=new xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),rr=new xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ut=new xe("SysvarRent111111111111111111111111111111111"),yi=new xe("SysvarC1ock11111111111111111111111111111111"),_n=new xe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),ir=new xe("Sysvar1nstructions1111111111111111111111111"),sr=fa.programId,Nf=new xe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Mf=new xe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),_f=new xe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),vf=new xe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Vf=new xe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Ff=new xe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Ef=new xe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Df=new xe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Wf=new xe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),qf=new xe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Uf=new xe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),j=new xe("So11111111111111111111111111111111111111112"),Fe=xe.default;function pt(o){return pi({publicKey:o,transformSol:!0})}import{PublicKey as Ml}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ya}from"@solana/spl-token";var Mt={chainId:101,address:Ml.default.toBase58(),programId:ya.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ee={chainId:101,address:"So11111111111111111111111111111111111111112",programId:ya.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 gi=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===Fe.toBase58()||e instanceof bi&&Fe.equals(e)){this.decimals=Ee.decimals,this.symbol=Ee.symbol,this.name=Ee.name,this.mint=new bi(Ee.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=r||e.toString().substring(0,6),this.mint=i?bi.default:pi({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},ye=gi;ye.WSOL=new gi(E(K({},Ee),{mint:Ee.address}));import ur from"big.js";import Vl from"bn.js";import Fl from"decimal.js-light";import _l from"toformat";var vl=_l,eo=vl;var ar=ce("module/fraction"),Ai=eo(ur),to=eo(Fl),El={[0]:to.ROUND_DOWN,[1]:to.ROUND_HALF_UP,[2]:to.ROUND_UP},Dl={[0]:ur.roundDown,[1]:ur.roundHalfUp,[2]:ur.roundUp},re=class{constructor(e,t=new Vl(1)){this.numerator=Y(e),this.denominator=Y(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new re(this.denominator,this.numerator)}add(e){let t=e instanceof re?e:new re(Y(e));return this.denominator.eq(t.denominator)?new re(this.numerator.add(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof re?e:new re(Y(e));return this.denominator.eq(t.denominator)?new re(this.numerator.sub(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof re?e:new re(Y(e));return new re(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof re?e:new re(Y(e));return new re(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||ar.logWithError(`${e} is not an integer.`),e<=0&&ar.logWithError(`${e} is not positive.`),to.set({precision:e+1,rounding:El[n]});let r=new to(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return r.toFormat(r.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||ar.logWithError(`${e} is not an integer.`),e<0&&ar.logWithError(`${e} is negative.`),Ai.DP=e,Ai.RM=Dl[n]||1,new Ai(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Wl=ce("Raydium_price"),Ue=class extends re{constructor(t){let{baseToken:n,quoteToken:r,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=r,this.scalar=new re(Pi(n.decimals),Pi(r.decimals))}get raw(){return new re(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Ue({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Wl.logWithError("mul token not equals");let n=super.mul(t);return new Ue({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,r){return this.adjusted.toSignificant(t,n,r)}toFixed(t=this.quoteToken.decimals,n,r){return this.adjusted.toFixed(t,n,r)}};var hi=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},no=hi;no.SOL=new hi(Mt);function Ay(o,e){return o instanceof ye&&e instanceof ye?o.equals(e):o instanceof ye||e instanceof ye?!1:o===e}import ql from"bn.js";var ba=new re(new ql(100)),Me=class extends re{toSignificant(e=5,t,n){return this.mul(ba).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(ba).toFixed(e,t,n)}};function Le(o){if(o instanceof Me)return new re(o.numerator,o.denominator);if(o instanceof Ue)return o.adjusted;if(o instanceof fe)try{return Le(o.toExact())}catch{return new re(De)}if(o instanceof re)return o;let e=String(o),t=dn(e);return new re(t.numerator,t.denominator)}function xy(o){var n;if(o instanceof Me)return{fr:new re(o.numerator,o.denominator)};if(o instanceof Ue)return{fr:o.adjusted};if(o instanceof fe)return{fr:Le(o.toExact()),decimals:o.token.decimals};if(o instanceof re)return{fr:o};let e=String(o),t=dn(e);return{fr:new re(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function Sy(o,e){if(o==null||e==null)return!1;let t=Le(o),n=Le(e);return t.sub(n).numerator,t.sub(n).numerator.lt(De)}function Ul(o,e){if(o==null||e==null)return!1;let t=Le(o),n=Le(e);return t.sub(n).numerator.gt(De)}function Ky(o,e){if(o==null||e==null)return!1;let t=Le(o),n=Le(e);return t.sub(n).numerator.lte(De)}function Cy(o,e){if(o==null||e==null)return!1;let t=Le(o),n=Le(e);return t.sub(n).numerator.gte(De)}function Gl(o,e){if(o==null||e==null)return!1;let t=Le(o),n=Le(e);return t.sub(n).numerator.eq(De)}function Ry(o,e){if(o==null||e==null)return;let t=Le(o),n=Le(e);try{return t.div(n)}catch{return t}}function Oy(o,e){if(o==null||e==null)return;let t=Le(o),n=Le(e);return t.sub(n)}function Ly(o){return o==null?!1:!Gl(o,0)}function Ny(o,e){return Ul(e,o)?e:o}function ki(o,e){if(o==null||e==null)return;let t=Le(o),n=Le(e);return t.mul(n)}function My(o,e){if(o==null||e==null)return;let t=Le(o),n=Le(e);return t.add(n)}var wi=(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))(wi||{}),De=new Te(0),Pa=new Te(1),Qy=new Te(2),Yy=new Te(3),jy=new Te(5),pn=new Te(10),Hy=new Te(100),Zy=new Te(1e3),$y=new Te(1e4),ga=9007199254740991;function Y(o){let e=ce("Raydium_parseBigNumberish");if(o instanceof Te)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new Te(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=ga||o<=-ga)&&e.logWithError(`BigNumberish number overflow: ${o}`),new Te(String(o))):typeof o=="bigint"?new Te(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new Te(0))}function Pi(o){return pn.pow(Y(o))}function dn(o){var a;if(o===void 0)return{denominator:"1",numerator:"0"};if(o instanceof Te)return{numerator:o.toString(),denominator:"1"};if(o instanceof re)return{denominator:o.denominator.toString(),numerator:o.numerator.toString()};let e=String(o),[,t="",n="",r=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],i="1"+"0".repeat(r.length),s=t+(n==="0"?"":n)+r||"0";return{denominator:i,numerator:s,sign:t,int:n,dec:r}}function cr(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Xl(o){var n;let[,e="",t=""]=(n=o.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function zl(o,e=0){return o instanceof Te?o:new Te(Xl(ha(o).mul(pn.pow(new Te(String(e))))))}function ha(o){if(o instanceof Me)return new re(o.numerator,o.denominator);if(o instanceof Ue)return o.adjusted;if(o instanceof fe)try{return ha(o.toExact())}catch{return new re(De)}if(o instanceof re)return o;let e=String(o),t=dn(e);return new re(t.numerator,t.denominator)}function Jy(o,e){let{numerator:t,denominator:n}=dn(o);return new Me(new Te(t),new Te(n).mul(e!=null&&e.alreadyDecimaled?new Te(100):new Te(1)))}function eb(o){let{token:e,numberPrice:t,decimalDone:n}=o,r=new ye({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:i,denominator:s}=dn(t),a=n?new Te(i).mul(pn.pow(new Te(e.decimals))):i,c=new Te(s).mul(pn.pow(new Te(r.decimals)));return new Ue({baseToken:r,denominator:c.toString(),quoteToken:new ye(E(K({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function Aa(o){let e=new no({decimals:6,symbol:"usd",name:"usd"}),t=zl(ki(o,10**e.decimals));return new fn(e,t)}function tb(o,e){return Aa(!e||!o?0:ki(o,e))}function Ql(o){if(o==null)return;let{numerator:e,denominator:t}=dn(o.toString());return new re(e,t)}function Yl(o){return o instanceof O}function wa(o){return Yl(o)?Ql(o):Array.isArray(o)?o.map(e=>wa(e)):Ti(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,wa(t)])):o}var Hl=ce("Raydium_amount"),lr=eo(jl);function ka(o,e){let t="0",n="0";if(o.includes(".")){let r=o.split(".");r.length===2?([t,n]=r,n=n.padEnd(e,"0")):Hl.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var fe=class extends re{constructor(t,n,r=!0,i){let s=new nn(0),a=pn.pow(new nn(t.decimals));if(r)s=Y(n);else{let c=new nn(0),u=new nn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=ka(n.toString(),t.decimals);c=Y(l),u=Y(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ce(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new fe(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new fe(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.token.decimals,n,r=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return lr.DP=this.token.decimals,new lr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},fn=class extends re{constructor(t,n,r=!0,i){let s=new nn(0),a=pn.pow(new nn(t.decimals));if(r)s=Y(n);else{let c=new nn(0),u=new nn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=ka(n.toString(),t.decimals);c=Y(l),u=Y(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ce(i||"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 fn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new fn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.currency.decimals,n,r=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return lr.DP=this.currency.decimals,new lr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};async function Ta(o){new Promise(e=>setTimeout(e,o))}function Bb(){return new Date().getTime()}function Ti(o){return typeof o=="object"&&o!==null&&![ye,fe,Zl,re,$l,Ue,Me].some(e=>typeof e=="object"&&o instanceof e)}function Ie(o){return typeof o=="string"?fi(o):Array.isArray(o)?o.map(e=>Ie(e)):Ti(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ie(t)])):o}import{PublicKey as io,sendAndConfirmTransaction as Ki,Transaction as so,TransactionMessage as ao,VersionedTransaction as uo}from"@solana/web3.js";import um from"axios";var yn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(yn||{}),F={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut"};import{PublicKey as Ba,ComputeBudgetProgram as Ia,Transaction as dr,TransactionMessage as Jl,Keypair as xa,VersionedTransaction as Ii}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as em}from"@solana/spl-token";var Dt=ce("Raydium_txUtil"),Sa=1644;function pr(o){let e=[],t=[];return o.microLamports&&(e.push(Ia.setComputeUnitPrice({microLamports:o.microLamports})),t.push(F.SetComputeUnitPrice)),o.units&&(e.push(Ia.setComputeUnitLimit({units:o.units})),t.push(F.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function vn(o,e){var n,r;let t=e!=null?e:"confirmed";try{return((r=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:r.blockhash)||(await o.getRecentBlockhash(t)).blockhash}catch{return(await o.getRecentBlockhash(t)).blockhash}}function fr(o,e){o.length<1&&Dt.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Dt.logWithError(`no signers provided:, ${e.toString()}`);let t=new dr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Sa}catch{return!1}}async function Ka(o,e,t,n=!0){let r=new Ba("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new dr;s.feePayer=r;for(let u of e)fr([...s.instructions,u],[r])||(i.push(s),s=new dr,s.feePayer=r),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await tm(o,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Dt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Dt.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Dt.debug("filteredLog:",c),l.length||Dt.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function Ca(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?Dt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Wt(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?Dt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ue(o,e){let[t,n]=Ba.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function tm(o,e,t){let n=[];if(t){let r=await o.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=r.blockhash,u.lastValidBlockHeight=r.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.map(u=>{let l=o._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await o._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async r=>await(await o.simulateTransaction(r)).value))}catch(r){r instanceof Error&&Dt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:r.message})}return n}function oo({instructions:o,payer:e,signers:t}){return fr(o,[e,...t])}function ro({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=xa.generate().publicKey.toString()}){let i=new Jl({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Ii(i).serialize()).toString("base64").length<Sa}catch{return!1}}var mr={time:0,data:void 0};async function Vb(o){if(!mr.data||(Date.now()-mr.time)/1e3>30){let e=await o.getEpochInfo();return mr={time:Date.now(),data:e},e}else return mr.data}var Ra=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o),nm=o=>{let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});o instanceof Ii&&(e=Ra(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function bn(o){let e=[];return o.forEach(t=>{t instanceof dr&&(t.recentBlockhash||(t.recentBlockhash=em.toBase58()),t.feePayer||(t.feePayer=xa.generate().publicKey)),e.push(nm(t))}),console.log("simulate tx string:",e),e}function Fb(o){let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});return o instanceof Ii&&(e=Ra(e)),e.toString("base64")}import{PublicKey as La,AddressLookupTableAccount as yr}from"@solana/web3.js";import{PublicKey as Oa}from"@solana/web3.js";import{MINT_SIZE as om,TOKEN_PROGRAM_ID as rm,getTransferFeeConfig as im,unpackMint as sm}from"@solana/spl-token";var Bi=ce("Raydium_accountInfo_util");async function Bt(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=K({batchRequest:!1},t),s=xi(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=xi(c,10);a=(await(await Promise.all(u.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Bi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Bi.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Oa(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,r)))}catch(c){c instanceof Error&&Bi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function We(o,e,t){let n=await Bt(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>E(K({},r),{accountInfo:n[i]}))}var am=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(am||{}),Qb=1;async function Vn({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await We(o,e.map(c=>({pubkey:pt(c)})),t),r={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<om){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=sm(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);r[c.pubkey.toString()]=E(K({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||rm,feeConfig:(a=im(u))!=null?a:void 0})}return r[Oa.default.toBase58()]=r[j.toBase58()],r}async function Si({connection:o,address:e}){let t=await Bt(o,[...new Set(e.map(r=>r.toString()))].map(r=>new La(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new yr({key:s,state:yr.deserialize(i.data)});n[s.toString()]=a,br[s.toString()]=a}return n}var br={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new yr({key:new La("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:yr.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 gr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await um.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=pr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}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:r=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...r),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==io.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(K({},t||{})):this.build(t)}build(e){var n;let t=new so;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async r=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=r||{},c=i!=null?i:await vn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),bn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await Ki(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await vn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let w of s){let A=await Ki(this.connection,w,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((A,k)=>(A.recentBlockhash=f,a[k].length&&A.sign(...a[k]),A));bn(g);let w=await this.signAllTransactions(g);if(m){let A=0,k=[],I=async()=>{if(!w[A])return;let T=await this.connection.sendRawTransaction(w[A].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:w[A]}),d==null||d([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:k.map(T=>T.txId),signedTxs:w}}else{let A=[];for(let k=0;k<w.length;k+=1){let I=await this.connection.sendRawTransaction(w[k].serialize(),{skipPreflight:y});A.push(I)}return{txIds:A,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r,recentBlockhash:i}=y,s=Oe(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=K(K({},this.cluster==="devnet"?{}:br),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new io(b));let l=await Si({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=r?io.default.toBase58():i!=null?i:await vn(this.connection,this.blockhashCommitment),d=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new uo(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var A;let{skipPreflight:g=!0,sendAndConfirm:w}=b||{};if(bn([p]),(A=this.owner)!=null&&A.isKeyPair){let k=await this.connection.sendTransaction(p,{skipPreflight:g});if(w){let{lastValidBlockHeight:I,blockhash:T}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:T,lastValidBlockHeight:I,signature:k},"confirmed")}return{txId:k,signedTx:p}}if(this.signAllTransactions){let k=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(k[0],{skipPreflight:g}),signedTx:k[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),bn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let w=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:A,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:A,signature:w},"confirmed"),b.push(w)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,w=[],A=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});w.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...w]),g++,this.connection.onSignature(k,I=>{let T=w.findIndex(S=>S.txId===k);T>-1&&(w[T].status=I.err?"error":"success"),d==null||d([...w]),I.err||A()},"processed"),this.connection.getSignatureStatus(k)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let w=0;w<b.length;w+=1){let A=await this.connection.sendTransaction(b[w],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=Oe(u,["computeBudgetConfig"]),r=t?pr(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>E(K({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...r.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new io(b));if(c.length<12&&oo({instructions:p,payer:this.feePayer,signers:f})||oo({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");oo({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new so().add(...r.instructions,...c)):s.push(new so().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);oo({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new so().add(...r.instructions,...c)):s.push(new so().add(...c)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await vn(this.connection,this.blockhashCommitment);if(s.forEach(async(w,A)=>{w.recentBlockhash=b,a[A].length&&w.sign(...a[A])}),bn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let w=[];for(let A of s){let k=await Ki(this.connection,A,this.signers.find(I=>I.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});w.push(k)}return{txIds:w,signedTxs:s}}return{txIds:await Promise.all(s.map(async w=>await this.connection.sendRawTransaction(w.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let w=await this.signAllTransactions(s);if(d){let A=0,k=[],I=async()=>{if(!w[A])return;let T=await this.connection.sendRawTransaction(w[A].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:w[A]}),p==null||p([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:k.map(T=>T.txId),signedTxs:w}}else{let A=[];for(let k=0;k<w.length;k+=1){let I=await this.connection.sendRawTransaction(w[k].serialize(),{skipPreflight:f});A.push(I)}return{txIds:A,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:r=[]}=b,i=Oe(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=K(K({},this.cluster==="devnet"?{}:br),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),c=[];for(let w of a)s[w]===void 0&&c.push(new io(w));let u=await Si({connection:this.connection,address:c});for(let[w,A]of Object.entries(u))s[w]=A;let l=t?pr(t):{instructions:[],instructionTypes:[]},m=await vn(this.connection,this.blockhashCommitment),d=this.signers.reduce((w,A)=>E(K({},w),{[A.publicKey.toBase58()]:A}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(w=>{let A=[...f,w],k=t?[...l.instructions,...A]:A;if(f.length<12&&ro({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||ro({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(w);else{if(f.length===0)throw Error("item ins too big");let I={};for(let T of[...new Set(a)])s[T]!==void 0&&(I[T]=s[T]);if(t&&ro({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new uo(T))}else{let T=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new uo(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[w]}}),f.length>0){let A=[...new Set(f.map(k=>k.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&ro({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new uo(k))}else{let k=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new uo(k))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(w=>{w.some(A=>A.publicKey.equals(this.owner.publicKey))||w.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async w=>{var S;let{sequentially:A,onTxUpdate:k,recentBlockHash:I,skipPreflight:T=!0}=w||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),I&&(x.message.recentBlockhash=I)}),bn(p),(S=this.owner)!=null&&S.isKeyPair){if(A){let x=[];for(let R of p){let B=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:M,blockhash:D}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:D,lastValidBlockHeight:M,signature:B},"confirmed"),x.push(B)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(A){let R=0,B=[],M=async()=>{if(!x[R])return;let D=await this.connection.sendTransaction(x[R],{skipPreflight:T});B.push({txId:D,status:"sent",signedTx:x[R]}),k==null||k([...B]),R++,this.connection.onSignature(D,V=>{let Z=B.findIndex(G=>G.txId===D);Z>-1&&(B[Z].status=V.err?"error":"success"),k==null||k([...B]),V.err||M()},"processed"),this.connection.getSignatureStatus(D)};return M(),{txIds:[],signedTxs:x}}else{let R=[];for(let B=0;B<x.length;B+=1){let M=await this.connection.sendTransaction(x[B],{skipPreflight:T});R.push(M)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var xt=class{constructor(e){this._owner=e}get publicKey(){return xt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return xt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return xt.isKeyPair(this._owner)}get isPublicKey(){return xt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!xt.isKeyPair(e)}};function xi(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function mg(o,...e){return o.filter(t=>e.every(n=>n.includes(t)))}function dg(o,...e){return o.filter(t=>e.every(n=>!n.includes(t)))}function pg(o){return[...new Set(o)]}var Na=o=>typeof o=="number",Ma=o=>o?new Date(o):new Date,cm=o=>Ma(o).getTime();function _a(o,e,t){let n=Na(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function va(o,e,t){let n=Na(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()>n}function yg(o,e){let n=cm(o)+(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 Ma(n)}import{PublicKey as de}from"@solana/web3.js";var Ci=new de("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Ri=new de("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Fn=new de("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),lm=new de("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),mm=new de("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ar=new de("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Oi=new de("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),dm=new de("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Va=new de("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Li=new de("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),pm=new de("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Ag=new de("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),fm=new de("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),ym=new de("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),bm=new de("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),gm=new de("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Ni=new de("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Am=new de("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),wm=new de("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Pm=new de("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),hm=new de("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),km=new de("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),co={IDO_PROGRAM_ID_V1:fm,IDO_PROGRAM_ID_V2:ym,IDO_PROGRAM_ID_V3:bm,IDO_PROGRAM_ID_V4:gm},wg={AMM_V4:Oi,AMM_STABLE:dm,CLMM_PROGRAM_ID:Li,FARM_PROGRAM_ID_V3:Ci,FARM_PROGRAM_ID_V5:Ri,FARM_PROGRAM_ID_V6:Fn,OPEN_BOOK_PROGRAM:mm,SERUM_PROGRAM_ID_V3:Ar,UTIL1216:lm,Router:pm,CREATE_CPMM_POOL_PROGRAM:Ni,CREATE_CPMM_POOL_AUTH:Am,CREATE_CPMM_POOL_FEE_ACC:wm},Pg={SERUM_MARKET:de.default,OPENBOOK_MARKET:new de("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:de.default,FarmV3:new de("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new de("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new de("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new de("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new de("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new de("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new de("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Pm,CREATE_CPMM_POOL_AUTH:hm,CREATE_CPMM_POOL_FEE_ACC:km,FEE_DESTINATION_ID:new de("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Tm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Im}from"@solana/spl-token";function we(o,e,t){return ue([o.toBuffer(),(t!=null?t:Im).toBuffer(),e.toBuffer()],new Tm("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import _e from"bn.js";var _t=1e4;function Sg(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new _e(r.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===_t){let a=new _e(r.maximumFee.toString());return{amount:o.add(a),fee:a,expirationTime:s}}else{let a=St(o.mul(new _e(_t)),new _e(_t-r.transferFeeBasisPoints)),c=new _e(r.maximumFee.toString()),u=a.sub(o).gt(c)?o.add(c):a,l=St(u.mul(new _e(r.transferFeeBasisPoints)),new _e(_t)),m=l.gt(i)?i:l;return{amount:u,fee:m,expirationTime:s}}else{let a=St(o.mul(new _e(r.transferFeeBasisPoints)),new _e(_t)),c=a.gt(i)?i:a;return{amount:o,fee:c,expirationTime:s}}}function be(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=E(K({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new _e(i.maximumFee.toString()),a=t.epoch<r.newerTransferFee.epoch?(Number(r.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===_t){let c=new _e(i.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=St(o.mul(new _e(_t)),new _e(_t-i.transferFeeBasisPoints)),u=new _e(i.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,m=St(l.mul(new _e(i.transferFeeBasisPoints)),new _e(_t)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=St(o.mul(new _e(i.transferFeeBasisPoints)),new _e(_t)),u=c.gt(s)?s:c;return{amount:o,fee:u,expirationTime:a}}}function Kt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function St(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new _e(0))?t.add(new _e(1)):t}var Fa=(t=>(t.ALL="all",t.Strict="strict",t))(Fa||{}),Ea=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(Ea||{});var Ne={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},Qg=K({},Ne);var Da="ray_tab_hash",Mi="ray_req_hash",Bm=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(Da);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(Da,o)),o},wr=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=Oe(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(Mi)||"[]").slice(0,o-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(E(K({},t),{time:Date.now(),session:Bm()}));try{localStorage.setItem(Mi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(Mi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return wr(E(K({},t),{logCount:o,removeLastLog:!0}))}};var En=ce("Raydium_Api"),_i=new Map;async function fA(o,e,t=1e3){let n;for(;n==null;)try{En.debug(`Request ${o} through endlessRetry`),n=await e()}catch(r){En.error(`Request ${o} failed, retry after ${t} ms`,r),await Ta(t)}return n}var Pr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=Wa.create({baseURL:this.urlConfigs.BASE_HOST||Ne.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return En.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(En.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&wr({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),En.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&wr({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),En.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ne.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Ne.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ne.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Wa.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(r=>r.numSlots);return n.reduce((r,i)=>r+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Ne.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ne.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ne.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Ne.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ne.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:r="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Ne.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${r}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Ne.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>_i.has(s)?(n.push(_i.get(s)),!1):!0),i=[];return r.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ne.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),i.forEach(a=>{_i.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:r="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&pt(t).toBase58(),n&&n!=="undefined"?pt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ne.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Ne.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ne.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ne.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ne.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ne.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ne.JITO})).data}};import{merge as If}from"lodash";var hr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",qa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as ji,TOKEN_PROGRAM_ID as an,AccountLayout as qn,TOKEN_2022_PROGRAM_ID as _d}from"@solana/spl-token";import{PublicKey as Sr,SystemProgram as vd}from"@solana/web3.js";var vi=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Ke=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ce(t)}createTxBuilder(e){return this.scope.checkOwner(),new gr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(vi(e))}logInfo(...e){this.logger.info(vi(e))}logAndCreateError(...e){let t=vi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Cd,createCloseAccountInstruction as Rd,createTransferInstruction as Od,TOKEN_PROGRAM_ID as Wn}from"@solana/spl-token";import{PublicKey as Ld,SystemProgram as Nd}from"@solana/web3.js";import Md from"bn.js";import{PublicKey as ru,Keypair as Bd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as xd}from"@solana/spl-token";import Sd from"bn.js";import{PublicKey as gd}from"@solana/web3.js";import ja,{isBN as Ha}from"bn.js";import{bits as xm,BitStructure as Sm,blob as Km,Blob as Cm,cstr as Rm,f32 as Om,f32be as Lm,f64 as Nm,f64be as Mm,greedy as _m,Layout as vm,ns64 as Vm,ns64be as Fm,nu64 as Em,nu64be as Dm,offset as Wm,s16 as qm,s16be as Um,s24 as Gm,s24be as Xm,s32 as zm,s32be as Qm,s40 as Ym,s40be as jm,s48 as Hm,s48be as Zm,s8 as $m,seq as Jm,struct as SA,Structure as ed,u16 as td,u16be as nd,u24 as od,u24be as rd,u32 as id,u32be as sd,u40 as ad,u40be as ud,u48 as cd,u48be as ld,u8 as md,UInt as dd,union as pd,Union as fd,unionLayoutDiscriminator as yd,utf8 as bd}from"@solana/buffer-layout";var lo=vm,Ua=ed,Ga=fd,KA=Sm,Vi=dd,Xa=Cm,CA=_m,kr=md,qt=td,RA=od,mo=id,OA=ad,LA=cd,za=Em,NA=nd,MA=rd,_A=sd,vA=ud,VA=ld,FA=Dm,EA=$m,DA=qm,WA=Gm,Qe=zm,qA=Ym,UA=Hm,GA=Vm,XA=Um,zA=Xm,QA=Qm,YA=jm,jA=Zm,HA=Fm,ZA=Om,$A=Lm,JA=Nm,ew=Mm;var Qa=Jm,Ya=pd,tw=yd,ge=Km,nw=Rm,ow=bd,Fi=xm,Ei=Wm;var gn=class extends lo{constructor(t,n,r){super(t,r);this.blob=ge(t),this.signed=n}decode(t,n=0){let r=new ja(this.blob.decode(t,n),10,"le");return this.signed?r.fromTwos(this.span*8).clone():r}encode(t,n,r=0){return typeof t=="number"&&(t=new ja(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},Tr=class extends lo{constructor(t){super(8,t);this._lower=Fi(mo(),!1),this._upper=Fi(mo(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return K(K({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function W(o){return new Vi(1,o)}function Ye(o){return new Vi(4,o)}function h(o){return new gn(8,!1,o)}function J(o){return new gn(16,!1,o)}function Za(o){return new gn(1,!0,o)}function Dn(o){return new gn(8,!0,o)}function $a(o){return new gn(16,!0,o)}var Ut=class extends lo{constructor(t,n,r,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=r}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,r){return this.layout.encode(this.encoder(t),n,r)}getSpan(t,n){return this.layout.getSpan(t,n)}};function C(o){return new Ut(ge(32),e=>new gd(e),e=>e.toBuffer(),o)}var Di=class extends lo{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=kr()}encode(t,n,r=0){return t==null?this.discriminator.encode(0,n,r):(this.discriminator.encode(1,n,r),this.layout.encode(t,n,r+1)+1)}decode(t,n=0){let r=this.discriminator.decode(t,n);if(r===0)return null;if(r===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let r=this.discriminator.decode(t,n);if(r===0)return 1;if(r===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function uw(o,e){return new Di(o,e)}function je(o){return new Ut(kr(),Ad,wd,o)}function Ad(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function wd(o){return o?1:0}function cw(o,e){let t=mo("length"),n=_([t,X(o,Ei(t,-t.span),"values")]);return new Ut(n,({values:r})=>r,r=>({values:r}),e)}function lw(o,e,t){let n=_([h("tag"),e.replicate("data")]);function r({tag:i,data:s}){if(!i.eq(o))throw new Error("Invalid tag, expected: "+o.toString("hex")+", got: "+i.toString("hex"));return s}return new Ut(n,r,i=>({tag:o,data:i}),t)}function Pd(o){let e=mo("length"),t=_([e,ge(Ei(e,-e.span),"data")]);return new Ut(t,({data:n})=>n,n=>({data:n}),o)}function mw(o){return new Ut(Pd(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),o)}function dw(o,e){let t=Ya(kr(),e);return o.forEach((n,r)=>t.addVariant(r,n,n.property)),t}function pw(o,e,t){let n=_([X(o,e,"values")]);return new Ut(n,({values:r})=>r,r=>({values:r}),t)}var Wi=class extends Ua{decode(e,t){return super.decode(e,t)}};function _(o,e,t){return new Wi(o,e,t)}var qi=class extends Ga{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(r=>r.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function fw(o,e,t){return new qi(o,e,t)}var Ui=class extends Xa{decode(e,t){let n=super.decode(e,t);if(!n.every(r=>r===0))throw new Error("nonzero padding bytes");return n}};function yw(o){return new Ui(o)}function X(o,e,t){let n,r=typeof e=="number"?e:Ha(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Ha(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,s)},set(i,s,a){return s==="count"&&(n=a),Reflect.set(i,s,a)}});return Qa(o,r,t)}var on=_([C("mint"),C("owner"),h("amount"),Ye("delegateOption"),C("delegate"),W("state"),Ye("isNativeOption"),h("isNative"),h("delegatedAmount"),Ye("closeAuthorityOption"),C("closeAuthority")]);function hd(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function Gi(o,...e){if(!hd(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function Xi(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function Ja(o,e){Gi(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Br=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),Ct=(o,e)=>o<<32-e|o>>>e;var kw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function kd(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function zi(o){return typeof o=="string"&&(o=kd(o)),Gi(o),o}var Ir=class{clone(){return this._cloneInto()}},Tw={}.toString;function eu(o){let e=n=>o().update(zi(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Td(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let r=BigInt(32),i=BigInt(4294967295),s=Number(t>>r&i),a=Number(t&i),c=n?4:0,u=n?0:4;o.setUint32(e+c,s,n),o.setUint32(e+u,a,n)}var tu=(o,e,t)=>o&e^~o&t,nu=(o,e,t)=>o&e^o&t^e&t,xr=class extends Ir{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Br(this.buffer)}update(e){Xi(this);let{view:t,buffer:n,blockLen:r}=this;e=zi(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(r-this.pos,i-s);if(a===r){let c=Br(e);for(;r<=i-s;s+=r)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Xi(this),Ja(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;Td(n,r-8,BigInt(this.length*8),i),this.process(n,0);let a=Br(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:i,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=i,e.destroyed=s,r%t&&e.buffer.set(n),e}};var Id=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]),rn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),sn=new Uint32Array(64),Qi=class extends xr{constructor(){super(64,32,8,!1),this.A=rn[0]|0,this.B=rn[1]|0,this.C=rn[2]|0,this.D=rn[3]|0,this.E=rn[4]|0,this.F=rn[5]|0,this.G=rn[6]|0,this.H=rn[7]|0}get(){let{A:e,B:t,C:n,D:r,E:i,F:s,G:a,H:c}=this;return[e,t,n,r,i,s,a,c]}set(e,t,n,r,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)sn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=sn[m-15],p=sn[m-2],y=Ct(d,7)^Ct(d,18)^d>>>3,f=Ct(p,17)^Ct(p,19)^p>>>10;sn[m]=f+sn[m-7]+y+sn[m-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=Ct(a,6)^Ct(a,11)^Ct(a,25),p=l+d+tu(a,c,u)+Id[m]+sn[m]|0,f=(Ct(n,2)^Ct(n,13)^Ct(n,22))+nu(n,r,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=r,r=n,n=p+f|0}n=n+this.A|0,r=r+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,r,i,s,a,c,u,l)}roundClean(){sn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ou=eu(()=>new Qi);var Dw=ce("Raydium_Util");function iu({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=on.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:we(o,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),r.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:ru.default,amount:new Sd(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function ct({fromPublicKey:o,programId:e=xd}){let t=Bd.generate().publicKey.toBase58().slice(0,32);return{publicKey:Kd(o,t,e),seed:t}}function Kd(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=ou(n);return new ru(r)}function Yi(o){let{mint:e,tokenAccount:t,owner:n,programId:r=Wn}=o;return Cd(t,e,n,r)}function vt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=Wn}=o;return Rd(e,t,r,n,i)}async function Gt(o){let{connection:e,amount:t,commitment:n,payer:r,owner:i,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(on.span,n),c=Y(t).add(new Md(a)),u=ct({fromPublicKey:r,programId:Wn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[Nd.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:on.span,programId:Wn}),Yi({mint:new Ld(Ee.address),tokenAccount:u.publicKey,owner:i,programId:Wn})],instructionTypes:[F.CreateAccount,F.InitAccount],endInstructionTypes:s?[]:[F.CloseAccount],endInstructions:s?[]:[vt({tokenAccount:u.publicKey,payer:r,owner:i})]}}function po({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=Wn}){return Od(o,e,t,BigInt(String(n)),r,i)}var fo=class extends Ke{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=r||[],this._clientOwnedToken=!!(n||r)}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 we(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=K(K({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:an},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:_d},r.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=iu({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=an,associatedOnly:r=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!r||r&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Sr(t.tokenProgram||an),m=this.getAssociatedTokenAccount(n,new Sr(l)),d=(a?[]:this.tokenAccountRawInfos).filter(w=>w.accountInfo.mint.equals(n)&&(!i||w.pubkey.equals(m))).sort((w,A)=>w.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let w=ji(s,m,s,n,l);if(u){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(w),p.instructionTypes.push(F.CreateATA);else if(!(A.owner.equals(l)&&qn.decode(A.data).mint.equals(n)&&qn.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(w),p.instructionTypes.push(F.CreateATA);if(n.equals(j)&&r.amount){let A=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),r.amount&&(p.instructions.push(po({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:an})),p.instructionTypes.push(F.TransferAmount))}return c||(p.endInstructions.push(vt({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(F.CloseAccount)),{account:m,instructionParams:p}}else{let w=ct({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(qn.span),k=vd.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:w.seed,newAccountPubkey:w.publicKey,lamports:A+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:qn.span,programId:l});return p.instructions.push(k,Yi({mint:n,tokenAccount:w.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(F.CreateAccount),p.instructionTypes.push(F.InitAccount),c||(p.endInstructions.push(vt({owner:s,payer:r.payer||s,tokenAccount:w.publicKey,programId:l})),p.endInstructionTypes.push(F.CloseAccount)),{account:w.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=an,autoUnwrapWSOLToSOL:r}){var c;await this.fetchWalletTokenAccounts();let i=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await ji(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[F.CreateATA],i=u}return r&&j.toBase58()===t.toBase58()&&(a.endInstructions=[vt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[F.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=an,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new Sr(j).equals(i)){let p=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:r,skipCloseAccount:l});return K({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=ji(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(an)&&qn.decode(f.data).mint.equals(i)&&qn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[F.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=an,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Sr(j))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Oe(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Oe(m,["tokenAccount"]);c=d,u.addInstruction(p)}return K({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as op}from"@solana/spl-token";import{PublicKey as Ae,SystemProgram as rp}from"@solana/web3.js";import{PublicKey as du}from"@solana/web3.js";var Hi=_([W("instruction")]),Zi=_([W("instruction")]),Vd=_([h("rewardState"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardLastUpdateTime"),h("totalReward"),h("totalRewardEmissioned"),h("rewardClaimed"),h("rewardPerSecond"),J("accRewardPerShare"),C("rewardVault"),C("rewardMint"),C("rewardSender"),h("rewardType"),X(h(),15,"padding")]),Fd=_([h("state"),h("nonce"),C("lpVault"),C("rewardVault"),C(),C(),h(),h(),h("totalReward"),J("perShareReward"),h("lastSlot"),h("perSlotReward")]),Ed=_([h("state"),h("nonce"),C("lpVault"),C("rewardVaultA"),h("totalRewardA"),J("perShareRewardA"),h("perSlotRewardA"),W("option"),C("rewardVaultB"),ge(7),h("totalRewardB"),J("perShareRewardB"),h("perSlotRewardB"),h("lastSlot"),C()]),Dd=_([h(),h("state"),h("nonce"),h("validRewardTokenNum"),J("rewardMultiplier"),h("rewardPeriodMax"),h("rewardPeriodMin"),h("rewardPeriodExtend"),C("lpMint"),C("lpVault"),X(Vd,5,"rewardInfos"),C("creator"),C(),X(h(),32,"padding")]),su=new Proxy(Fd,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(K({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),au=new Proxy(Ed,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(K({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(o,e,t)}}),yo=new Proxy(Dd,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(K({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return E(K({},i),{rewardType:((s=Object.entries(un).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),Wd=_([h("isSet"),h("rewardPerSecond"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardType")]),$i=_([W("instruction"),h("nonce"),X(Wd,5,"rewardTimeInfo")]),Ji=_([W("instruction"),h("rewardReopenTime"),h("rewardEndTime"),h("rewardPerSecond")]),es=_([W("instruction"),h("isSet"),h("rewardPerSecond"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardType")]),AP=_([h("state"),C("id"),C("owner"),h("deposited"),X(h(),1,"rewardDebts")]),bo=_([h("state"),C("id"),C("owner"),h("deposited"),X(J(),1,"rewardDebts"),h(""),h("voteLockedBalance"),X(h(),15)]),wP=_([h("state"),C("id"),C("owner"),h("deposited"),X(h(),2,"rewardDebts")]),uu=_([h("state"),C("id"),C("owner"),h("deposited"),X(J(),2,"rewardDebts"),X(h(),17)]),cu=_([h(),h("state"),C("id"),C("owner"),h("deposited"),X(J(),5,"rewardDebts"),X(h(),16)]),rt=_([W("instruction"),h("amount")]),qd=_([C("mint"),C("grantAuthority"),h("baselineVoteWeightScaledFactor"),h("maxExtraLockupVoteWeightScaledFactor"),h("lockupSaturationSecs"),Za("digitShift"),X(W(),7,"reserved1"),X(h(),7,"reserved2")]),lu=_([ge(8),C("governanceProgramId"),C("realm"),C("realmGoverningTokenMint"),C("realmAuthority"),X(W(),32,"reserved1"),X(qd,4,"votingMints"),Dn("timeOffset"),W("bump"),X(W(),7,"reserved2"),X(h(),11,"reserved3")]),Ud=_([Dn("startTime"),Dn("endTime"),W("kind"),X(W(),15,"reserved")]),Gd=_([X(Ud,1,"lockup"),h("amountDeposited_native"),h("amountInitiallyLockedNative"),je("isUsed"),je("allowClawback"),W("votingMintConfigIdx"),X(W(),29,"reserved")]),mu=_([ge(8),C("voterAuthority"),C("registrar"),X(Gd,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),X(W(),94,"reserved")]);var SP=ce("Raydium_farm_config"),pu=new du("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),fu=new du("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),yu={3:su,5:au,6:yo},bu={3:bo,5:uu,6:cu},ts=o=>[3,5,6].indexOf(o)!==-1,ns=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,r=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${r}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${r}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${r}`}};return(s=i[e])==null?void 0:s.call(i)},un={"Standard SPL":0,"Option tokens":1},gt={[Ci.toString()]:3,[Ri.toString()]:5,[Fn.toString()]:6};import{PublicKey as ae,SystemProgram as An,SYSVAR_RENT_PUBKEY as Qd,SYSVAR_CLOCK_PUBKEY as wo,TransactionInstruction as Ge}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Yd,TOKEN_PROGRAM_ID as ft,ASSOCIATED_TOKEN_PROGRAM_ID as jd}from"@solana/spl-token";import Kr from"bn.js";function os(o,e,t){return ue([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function rs(o,e){return ue([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function is(o,e){return ue([e.toBuffer()],o)}function ss(o,e,t){return ue([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function as(o,e,t){return ue([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function us(o,e,t,n){return ue([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import lt from"bn.js";var go=ce("Raydium.farm.util");function Ao({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return r}function Je({programId:o,poolId:e,owner:t,version:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var gu=({programId:o,poolId:e})=>ue([e.toBuffer()],o);function Au(o){return{isSet:new lt(1),rewardPerSecond:Y(o.perSecond),rewardOpenTime:Y(o.openTime),rewardEndTime:Y(o.endTime),rewardType:Y(un[o.rewardType])}}function cs(o){return Y(o.endTime).sub(Y(o.openTime)).mul(Y(o.perSecond))}function Un(o){let e=bu[o];return e||go.logWithError("invalid version",o),e}function Xd(o){let e=yu[o];return e||go.logWithError("invalid version",o),e}function zd(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new lt(t)))return o;let r=new lt(t).sub(o.lastSlot);o.lastSlot=new lt(t);for(let i of o.rewardInfos){if(e.amount.eq(new lt(0)))continue;let s=i.perSlotReward.mul(r);i.perShareReward=i.perShareReward.add(s.mul(new lt(10).pow(new lt(o.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(o.version===6)for(let r of o.rewardInfos){if(r.rewardState.eq(new lt(0)))continue;let i=lt.min(new lt(n),r.rewardEndTime);if(r.rewardOpenTime.gte(i))continue;let a=i.sub(r.rewardLastUpdateTime).mul(r.rewardPerSecond),c=r.totalReward.sub(r.totalRewardEmissioned);c.lt(a)?(a=c,r.rewardLastUpdateTime=r.rewardLastUpdateTime.add(c.div(r.rewardPerSecond))):r.rewardLastUpdateTime=i,!e.amount.eq(new lt(0))&&(r.accRewardPerShare=r.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),r.totalRewardEmissioned=r.totalRewardEmissioned.add(a))}return o}async function GP({connection:o,farmPools:e,owner:t,config:n,chainTime:r}){let i=!1,s=!1,a=new lt(10),c=[];for(let d of e){let p=Ie(d);p.version===6?s=!0:i=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:Je({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await We(o,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=K({},u[g]),y==="state"){let w=Xd(p);(!b||!b.data||b.data.length!==w.span)&&go.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=w.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==on.span)&&go.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=on.decode(b.data);else if(y==="ledger"){let w=Un(p);b&&b.data&&(b.data.length!==w.span&&go.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=w.decode(b.data))}}let m=s||i?await o.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=zd(u[d].state,u[d].lpVault,m,r));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new lt(9)):a.pow(new lt(15)),b=p.rewardInfos.map((g,w)=>{let A=y.rewardDebts[w];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(A)});u[d].wrapped=E(K({},u[d].wrapped),{pendingRewards:b})}return u}function XP(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>_a(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>va(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=o.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 ls(o,e,t,n){let r=await o.getAccountInfo(e);if(r===null)throw Error("registrar info check error");let s=lu.decode(r.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await o.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=mu.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Hd=ce("Raydium_farm_instruction"),Po={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 ho(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||Hd.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Hi.span);Hi.encode({instruction:s},a);let c=[P({pubkey:t}),P({pubkey:n}),P({pubkey:i,isWritable:!1}),P({pubkey:An.programId,isWritable:!1}),P({pubkey:Qd,isWritable:!1})];return{instruction:new Ge({programId:r,keys:c,data:a}),instructionType:F.FarmV3CreateLedger}}function wu(o){var n;let e=Buffer.alloc($i.span);$i.encode({instruction:0,nonce:new Kr(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...di,P({pubkey:o.farmId}),P({pubkey:o.farmAuthority,isWritable:!1}),P({pubkey:o.lpVault}),P({pubkey:o.lpMint,isWritable:!1}),P({pubkey:o.lockVault}),P({pubkey:o.lockMint,isWritable:!1}),P({pubkey:(n=o.lockUserAccount)!=null?n:Fe}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let r of o.rewardInfo)t.push(P({pubkey:r.rewardMint,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}));return{instruction:new Ge({programId:o.programId,keys:t,data:e}),instructionType:F.FarmV6Create}}function Pu(o){let e=Buffer.alloc(Zi.span);Zi.encode({instruction:5},e);let t=[P({pubkey:ft,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.lpVault,isWritable:!1}),P({pubkey:o.rewardVault}),P({pubkey:o.userRewardToken}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ge({programId:o.programId,keys:t,data:e}),instructionType:F.FarmV6CreatorWithdraw}}function Zd(o,e,t,n,r,i,s,a,c,u,l,m,d){let p=_([W("depositEntryIndex"),h("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...Po.voterStakeRegistryDeposit,...f]);return new Ge({keys:y,programId:o,data:b})}function $d(o,e,t,n){let r=_([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:An.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([...Po.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ge({keys:i,programId:o,data:a})}function Jd(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([W("depositEntryIndex"),h("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:ft,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let w=Buffer.from([...Po.voterStakeRegistryWithdraw,...g]);return new Ge({keys:b,programId:o,data:w})}function ep(o,e,t,n,r,i){let s=_([W("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:An.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Ge({keys:a,programId:o,data:c})}function tp(o,e,t,n,r,i,s,a){let c=_([W("voterBump"),W("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:An.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...Po.voterStakeRegistryCreateVoter,...l]);return new Ge({keys:u,programId:o,data:m})}function np(o,e,t,n,r,i,s,a,c,u,l,m){let d=_([W("depositEntryIndex"),W("kind"),W("option"),h("startTs"),Ye("periods"),je("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:An.programId,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1},{pubkey:jd,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...Po.voterStakeRegistryCreateDepositEntry,...y]);return new Ge({keys:p,programId:o,data:f})}async function uh({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=os(n,r,i).publicKey,l=Je({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=bo.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new Kr(0)))throw Error("user do not has new stake amount");let y=rs(e,a).publicKey,f=is(e,a).publicKey,{publicKey:b,nonce:g}=ss(n,u,s),w=we(b,y,c).publicKey,{publicKey:A,nonce:k}=as(n,u,s),I=us(t,r,i,s).publicKey,T=[],S=we(s,y,c).publicKey;if(await o.getAccountInfo(S)===null&&T.push(Yd(s,S,s,y)),await o.getAccountInfo(b)===null){let D=ep(t,r,s,i,s,I);T.push(D,tp(n,u,b,A,s,s,g,k))}let{index:B,isInit:M}=await ls(o,u,b,y);return M||T.push(np(n,u,b,w,s,s,y,B,0,void 0,0,!1)),T.push(Zd(n,u,b,w,S,s,l,a,y,f,e,B,p),$d(n,u,b,A)),T}async function ch({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=os(n,r,i).publicKey,l=Je({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=bo.decode(m.data);if(d.voteLockedBalance.eq(new Kr(0)))throw Error("user has vote locked balance = 0");let p=rs(e,a).publicKey,y=is(e,a).publicKey,{publicKey:f}=ss(n,u,s),b=we(f,p,c).publicKey,{publicKey:g}=as(n,u,s),w=us(t,r,i,s).publicKey,A=[],{index:k,isInit:I}=await ls(o,u,f,p);if(!I)throw Error("deposit entry index check error");return A.push(Jd(n,u,f,s,w,g,b,we(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),A}function ms({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(Ji.span);Ji.encode({instruction:3,rewardReopenTime:Y(r.openTime),rewardEndTime:Y(r.endTime),rewardPerSecond:Y(r.perSecond)},i);let s=[P({pubkey:ft,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Ge({programId:n.programId,keys:s,data:i})}function ds({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(es.span);es.encode({instruction:4,isSet:new Kr(1),rewardPerSecond:Y(r.perSecond),rewardOpenTime:Y(r.openTime),rewardEndTime:Y(r.endTime),rewardType:Y(un[r.rewardType])},i);let s=[...di,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:r.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Ge({programId:t.programId,keys:s,data:i})}function lh(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:r,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=o,[l,m]=[new ae(e.programId),new ae(e.id)],d=Je({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(rt.span);rt.encode({instruction:a,amount:c},p);let y=n===6?[P({pubkey:ft,isWritable:!1}),...u?[P({pubkey:An.programId,isWritable:!1})]:[],P({pubkey:m}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:new ae(t.lpVault)}),P({pubkey:d}),P({pubkey:s,isWritable:!1,isSigner:!0}),P({pubkey:r})]:[P({pubkey:m}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:d}),P({pubkey:s,isWritable:!1,isSigner:!0}),P({pubkey:r}),P({pubkey:new ae(t.lpVault)}),P({pubkey:i[0]}),P({pubkey:new ae(t.rewardInfos[0].vault)}),P({pubkey:wo,isWritable:!1}),P({pubkey:ft,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(P({pubkey:i[f]})),y.push(P({pubkey:new ae(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(P({pubkey:new ae(t.rewardInfos[f].vault)})),y.push(P({pubkey:i[f]}));return new Ge({programId:l,keys:y,data:p})}function ko(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new ae(e.programId),new ae(e.id)],u=Je({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:2,amount:Y(s)},l);let m=[P({pubkey:ft,isWritable:!1}),P({pubkey:c}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:new ae(t.lpVault)}),P({pubkey:u}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new ae(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Ge({programId:a,keys:m,data:l})}function To(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ae(e.programId),new ae(e.id)],l=Je({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:12,amount:Y(s)},m);let d=[P({pubkey:u}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ae(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ae(t.rewardInfos[0].vault)}),P({pubkey:wo,isWritable:!1}),P({pubkey:ft,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new ae(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Ge({programId:c,keys:d,data:m})}function Io(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ae(e.programId),new ae(e.id)],l=Je({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Y(s)},m);let d=[P({pubkey:u}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ae(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ae(t.rewardInfos[0].vault)}),P({pubkey:wo,isWritable:!1}),P({pubkey:ft,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Ge({programId:c,keys:d,data:m})}function hu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ae(e.programId),new ae(e.id)],l=Je({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:10,amount:Y(s)},m);let d=[P({pubkey:u}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ae(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ae(t.rewardInfos[0].vault)}),P({pubkey:wo,isWritable:!1}),P({pubkey:ft,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Ge({programId:c,keys:d,data:m})}function ku(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ae(e.programId),new ae(e.id)],l=Je({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Y(s)},m);let d=[P({pubkey:u}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ae(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ae(t.rewardInfos[0].vault)}),P({pubkey:wo,isWritable:!1}),P({pubkey:ft,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new ae(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Ge({programId:c,keys:d,data:m})}function Tu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new ae(e.programId),new ae(e.id)],u=Je({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:1,amount:Y(s)},l);let m=[P({pubkey:ft,isWritable:!1}),P({pubkey:An.programId,isWritable:!1}),P({pubkey:c}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:new ae(t.lpVault)}),P({pubkey:u}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new ae(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Ge({programId:a,keys:m,data:l})}var Bo=class extends Ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Fe)){let n=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:cs(E(K({},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:r=Fn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new Ae(e.lpMint.address),lockInfo:{lockMint:pu,lockVault:fu},version:6,rewardInfos:t,programId:r},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=ct({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(yo.span);c.addInstruction({instructions:[rp.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:yo.span,programId:a.programId})]});let{publicKey:d,nonce:p}=gu({programId:new Ae(a.programId),poolId:l.publicKey}),y=Ao({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let I of a.rewardInfos){I.openTime>=I.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",I.openTime.toString()),isNaN(un[I.rewardType])&&this.logAndCreateError("rewardType error",I.rewardType),Number(I.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",I.perSecond),f.push(Au(I));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:I,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=I.mint.equals(Fe)?new Ae(Ee.address):I.mint;b.push({rewardMint:x,rewardVault:Ao({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({mint:new Ae(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});w&&c.addInstruction(w),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:k}=wu({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[A],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:r}){var b;let i=gt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(Fe)?new Ae(Ee.address):n.mint,l=a.rewardInfos.findIndex(g=>new Ae(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:Fe,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[ms({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[F.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=gt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Fe)?new Ae(Ee.address):m.mint,p=a.rewardInfos.findIndex(A=>new Ae(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:Fe,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let w=ms({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[w],instructionTypes:[F.FarmV6Restart]})}return u.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=gt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=r.mint.equals(Fe)?new Ae(Ee.address):r.mint,m=Ao({programId:new Ae(n.programId),poolId:new Ae(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,u.addInstruction({instructions:[ds({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[F.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=gt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of r){let m=l.mint.equals(Fe)?new Ae(Ee.address):l.mint,d=Ao({programId:new Ae(n.programId),poolId:new Ae(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=ds({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:E(K({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[F.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:r,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=gt[d];ts(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new Ae(n.programId),new Ae(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=Je({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),w=this.createTxBuilder();w.addCustomComputeBudget(l);let A={};for(let V of this.scope.account.tokenAccounts)if(a){let Z=we(this.scope.ownerPubKey,V.mint,V.programId).publicKey;V.publicKey&&Z.equals(V.publicKey)&&(A[V.mint.toString()]=V.publicKey)}else A[V.mint.toString()]=V.publicKey;let k=b.lpMint,I=A[k.address];I||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let V of m){let Z=s&&V.mint.address===j.toString(),G=A[V.mint.address];if(!G){let{account:q,instructionParams:ot}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:V.mint.programId,mint:new Ae(V.mint.address),notUseTokenAccount:Z,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!Z,associatedOnly:Z?!1:a,checkCreateATAOwner:c});G=q,ot&&w.addInstruction(ot)}A[V.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Un(p).decode(x.data)),n.programId!==Fn.toString()&&!S){let{instruction:V,instructionType:Z}=ho({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[V],instructionTypes:[Z]})}let R=ns({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let B={amount:Y(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(V=>new Ae(V))},M=p===6?Tu(B):p===5?ku(B):hu(B),D={3:F.FarmV3Deposit,5:F.FarmV5Deposit,6:F.FarmV6Deposit};return w.addInstruction({instructions:[M],instructionTypes:[D[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:r,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=gt[n.programId];ts(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(c){let B=we(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&B.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=Je({programId:new Ae(n.programId),poolId:new Ae(n.id),owner:this.scope.ownerPubKey,version:p}),B=await this.scope.connection.getAccountInfo(R);if(B)Un(p).decode(B.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:M,instructionType:D}=ho({id:new Ae(y.id),programId:new Ae(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[M],instructionTypes:[D]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:B})}let g=y.lpMint.address,w=s&&g===j.toString(),A=b[g.toString()];if(!A){let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Ae(g),notUseTokenAccount:w,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:w?!1:c,checkCreateATAOwner:u});A=R,B&&f.addInstruction(B)}b[g.toString()]=A;let k=[];for(let R of d){let B=s&&R.mint.address===j.toString(),M=b[R.mint.address];if(!M){let{account:D,instructionParams:V}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new Ae(R.mint.address),notUseTokenAccount:B,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!B,associatedOnly:B?!1:c,checkCreateATAOwner:u});M=D,V&&f.addInstruction(V)}b[R.mint.address]=M,k.push(M)}let I=ns({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});I&&this.logAndCreateError(I);let T={amount:Y(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new Ae(R))},S=p===6?ko(T):p===5?To(T):Io(T),x={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=gt[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Fe.toString()?new Ae(Ee.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Fe,u=this.createTxBuilder(),l;if(t.equals(Fe)){let y=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:cs(E(K({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new O(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[op(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[F.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Pu({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=we(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>E(K({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:w}=y,A=gt[f],k=b.address,I=n&&k===j.toString(),T=m[k];if(!T){let{account:D,instructionParams:V}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Ae(k),notUseTokenAccount:I,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:I?!1:i,checkCreateATAOwner:s});T=D,V&&l.addInstruction(V)}m[k.toString()]=T;let S=[];for(let D of g){let V=n&&D.mint.address===j.toString(),Z=m[D.mint.address];if(!Z){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new Ae(D.mint.address),notUseTokenAccount:V,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!V,associatedOnly:V?!1:i,checkCreateATAOwner:s});Z=G,q&&l.addInstruction(q)}m[D.mint.address]=Z,S.push(Z)}let x=p[w],R={amount:De,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(D=>new Ae(D))},B=A===6?ko(R):A===5?To(R):Io(R),M={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};l.addInstruction({instructions:[B],instructionTypes:[M[A]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as tt}from"@solana/web3.js";import{AccountLayout as zp,NATIVE_MINT as ac,TOKEN_PROGRAM_ID as Qn}from"@solana/spl-token";var Nh=_([Ye("mintAuthorityOption"),C("mintAuthority"),h("supply"),W("decimals"),W("isInitialized"),Ye("freezeAuthorityOption"),C("freezeAuthority")]);import{PublicKey as ip}from"@solana/web3.js";import{MintLayout as Iu,TOKEN_PROGRAM_ID as sp}from"@solana/spl-token";var Uh=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new ip(e));return!t||t.data.length!==Iu.span?void 0:Iu.decode(t.data)},Gh=({mint:o,decimals:e,programId:t=sp,logoURI:n="",priority:r=3})=>{let i=o.toBase58().substring(0,6);return{address:o.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:r}},Cr=o=>new ye({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),xo=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=Oe(i,["amount","isRaw","name"]);return new fe(new ye({mint:pt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function Xh(o){return o.address===Mt.address?Ee:o}function zh(o){return o.address===Ee.address?Mt:o}var it=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=Oe(i,["address","programId","decimals"]);return K({chainId:101,address:pt(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},cn=o=>o?E(K({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:E(K({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:E(K({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as zn,ASSOCIATED_TOKEN_PROGRAM_ID as Pp}from"@solana/spl-token";import{PublicKey as Pe,TransactionInstruction as Xt,SystemProgram as Lu,SYSVAR_RENT_PUBKEY as hp}from"@solana/web3.js";var ps=_([W("instruction"),h("amountIn"),h("minAmountOut")]),fs=_([W("instruction"),h("maxAmountIn"),h("amountOut")]),rk=_([W("instruction"),W("nonce")]),ys=_([W("instruction"),W("nonce"),h("startTime")]),So=_([h("status"),h("nonce"),h("maxOrder"),h("depth"),h("baseDecimal"),h("quoteDecimal"),h("state"),h("resetFlag"),h("minSize"),h("volMaxCutRatio"),h("amountWaveRatio"),h("baseLotSize"),h("quoteLotSize"),h("minPriceMultiplier"),h("maxPriceMultiplier"),h("systemDecimalValue"),h("minSeparateNumerator"),h("minSeparateDenominator"),h("tradeFeeNumerator"),h("tradeFeeDenominator"),h("pnlNumerator"),h("pnlDenominator"),h("swapFeeNumerator"),h("swapFeeDenominator"),h("baseNeedTakePnl"),h("quoteNeedTakePnl"),h("quoteTotalPnl"),h("baseTotalPnl"),h("poolOpenTime"),h("punishPcAmount"),h("punishCoinAmount"),h("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),h("swapBase2QuoteFee"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),h("swapQuote2BaseFee"),C("baseVault"),C("quoteVault"),C("baseMint"),C("quoteMint"),C("lpMint"),C("openOrders"),C("marketId"),C("marketProgramId"),C("targetOrders"),C("withdrawQueue"),C("lpVault"),C("owner"),h("lpReserve"),X(h(),3,"padding")]),ap=_([h("accountType"),h("status"),h("nonce"),h("maxOrder"),h("depth"),h("baseDecimal"),h("quoteDecimal"),h("state"),h("resetFlag"),h("minSize"),h("volMaxCutRatio"),h("amountWaveRatio"),h("baseLotSize"),h("quoteLotSize"),h("minPriceMultiplier"),h("maxPriceMultiplier"),h("systemDecimalsValue"),h("abortTradeFactor"),h("priceTickMultiplier"),h("priceTick"),h("minSeparateNumerator"),h("minSeparateDenominator"),h("tradeFeeNumerator"),h("tradeFeeDenominator"),h("pnlNumerator"),h("pnlDenominator"),h("swapFeeNumerator"),h("swapFeeDenominator"),h("baseNeedTakePnl"),h("quoteNeedTakePnl"),h("quoteTotalPnl"),h("baseTotalPnl"),h("poolOpenTime"),h("punishPcAmount"),h("punishCoinAmount"),h("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),h("swapQuote2BaseFee"),h("swapBase2QuoteFee"),C("baseVault"),C("quoteVault"),C("baseMint"),C("quoteMint"),C("lpMint"),C("modelDataAccount"),C("openOrders"),C("marketId"),C("marketProgramId"),C("targetOrders"),C("owner"),X(h(),64,"padding")]),bs=_([W("instruction"),h("baseAmountIn"),h("quoteAmountIn"),h("fixedSide")]),gs=_([W("instruction"),h("amountIn")]),ik={4:So,5:ap},Bu=_([h("fee")]);import{PublicKey as up}from"@solana/web3.js";var Xn=new up("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Pn=5e4,cp=_([h("x"),h("y"),h("price")]),lp=_([h("accountType"),h("status"),h("multiplier"),h("validDataCount"),X(cp,Pn,"DataElement")]);function mp(o,e){return[0,Pn-2]}function dp(o){return[0,Pn-2]}function pp(o){return[0,Pn-2]}function fp(o,e,t){let[n,r]=mp(e,t),i=n,s=r,a=0,c=e*o.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=Pn-2)return[a,a,!1];let u=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function As(o,e,t){let[n,r,i]=fp(o,e,t);if(!i)return 0;if(n===r){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,c=o.DataElement[r].x,u=o.DataElement[r].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*o.multiplier*l/p}}function wn(o,e,t){return e*o.multiplier/t}function xu(o,e,t){return e*t/o.multiplier}function yp(o,e){let[t,n]=dp(e),r=t,i=n,s=0,a=e;for(;r<i;){if(s=Math.floor((i+r)/2),s<=0||s>Pn-2)return[s,s,!1];let c=o.DataElement[s].x,u=o.DataElement[s-1].x,l=o.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)i=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];r=s+1}}return[s,s,!1]}function bp(o,e){let[t,n]=pp(e),r=t,i=n,s=0,a=e;for(;r<=i;){if(s=Math.floor((i+r)/2),s<=0||s>=Pn-2)return[s,s,!1];let c=o.DataElement[s].y,u=o.DataElement[s-1].y,l=o.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)r=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function Su(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=yp(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(r-c)*o.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-r)*o.multiplier/l),[y,f,!1,a]}}}function gp(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=bp(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-r)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function Ap(o,e){let t=Su(o,e,0,!1);return t[3]?t[0]:0}function Ku(o,e,t,n){let r=As(o,e,t),i=wn(o,e,r),s=wn(o,t,r),a=wn(o,n,r),c=!0,[u,l,m,d]=Su(o,i,a,c);if(!d)return 0;if(m)return n*o.multiplier/u;{let p=s-l;return xu(o,p,r)}}function Cu(o,e,t,n){let r=As(o,e,t),i=wn(o,e,r),s=wn(o,t,r),a=wn(o,n,r),c=!1,[u,l,m,d]=gp(o,s,a,c);if(!d)return 0;if(m)return n*u/o.multiplier;{let p=i-l;return xu(o,p,r)}}function wp(o){let e=lp.decode(o);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 Ru(o,e,t,n){let r=Ap(o,wn(o,e,As(o,e,t)))/o.multiplier;return n?r:1/r}var Gn=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(Xn);e&&(this._layoutData=wp(e==null?void 0:e.data))}}};var Ou=ce("Raydium_liquidity_instruction");function Nu(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(bs.span);bs.encode({instruction:3,baseAmountIn:Y(r),quoteAmountIn:Y(i),fixedSide:s==="base"?De:Pa},a);let c=[P({pubkey:zn,isWritable:!1}),P({pubkey:new Pe(e.id)}),P({pubkey:new Pe(t.authority),isWritable:!1}),P({pubkey:new Pe(t.openOrders),isWritable:!1}),P({pubkey:new Pe(t.targetOrders)}),P({pubkey:new Pe(e.lpMint.address)}),P({pubkey:new Pe(t.vault.A)}),P({pubkey:new Pe(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(P({pubkey:Xn})),c.push(P({pubkey:new Pe(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new Pe(t.marketEventQueue),isWritable:!1})),new Xt({programId:new Pe(e.programId),keys:c,data:a})}function ws(o){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=o,i=Ie(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(gs.span);gs.encode({instruction:4,amountIn:Y(r)},a);let c=[P({pubkey:zn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.mintLp.address}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return s===5?c.push(P({pubkey:Xn})):(c.push(P({pubkey:i.id})),c.push(P({pubkey:i.id}))),c.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks})),new Xt({programId:i.programId,keys:c,data:a})}return new Xt({programId:i.programId,keys:[]})}function Mu({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:i,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:w,openTime:A,coinAmount:k,pcAmount:I,ammConfigId:T,feeDestinationId:S}){let x=_([W("instruction"),W("nonce"),h("openTime"),h("pcAmount"),h("coinAmount")]),R=[{pubkey:zn,isSigner:!1,isWritable:!1},{pubkey:Pp,isSigner:!1,isWritable:!1},{pubkey:Lu.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],B=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:w,openTime:A,coinAmount:k,pcAmount:I},B),{instruction:new Xt({keys:R,programId:o,data:B}),instructionType:F.AmmV4CreatePool}}function hk(o){let e=_([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[P({pubkey:new Pe(o.id),isWritable:!1}),P({pubkey:new Pe(o.authority),isWritable:!1}),P({pubkey:new Pe(o.openOrders),isWritable:!1}),P({pubkey:new Pe(o.vault.A),isWritable:!1}),P({pubkey:new Pe(o.vault.B),isWritable:!1}),P({pubkey:new Pe(o.mintLp.address),isWritable:!1}),P({pubkey:new Pe(o.marketId),isWritable:!1}),P({pubkey:new Pe(o.marketEventQueue),isWritable:!1})];return new Xt({programId:new Pe(o.programId),keys:n,data:t})}function kp({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=Ie(o),s=Buffer.alloc(ps.span);ps.encode({instruction:9,amountIn:Y(t),minAmountOut:Y(n)},s);let a=[P({pubkey:zn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders})];return r===4&&a.push(P({pubkey:i.targetOrders})),a.push(P({pubkey:i.vault.A}),P({pubkey:i.vault.B})),r===5&&a.push(P({pubkey:Xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new Xt({programId:i.programId,keys:a,data:s})}function Tp({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=Ie(o),s=Buffer.alloc(fs.span);fs.encode({instruction:11,maxAmountIn:Y(t),amountOut:Y(n)},s);let a=[P({pubkey:zn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return r===5&&a.push(P({pubkey:Xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Xt({programId:i.programId,keys:a,data:s})}function Rr(o){let{poolKeys:e,version:t,userKeys:n,amountIn:r,amountOut:i,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return kp(E(K({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return Tp(E(K({},a),{maxAmountIn:r,amountOut:i}),t);Ou.logWithError("invalid params","params",o)}throw Ou.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function kk({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(ys.span);ys.encode({instruction:0,nonce:5,startTime:Y(t)},n);let r=Ie(o),i=[P({pubkey:zn,isWritable:!1}),P({pubkey:Lu.programId,isWritable:!1}),P({pubkey:hp,isWritable:!1}),P({pubkey:r.id}),P({pubkey:r.authority,isWritable:!1}),P({pubkey:r.openOrders}),P({pubkey:r.mintLp.address}),P({pubkey:r.mintA.address,isWritable:!1}),P({pubkey:r.mintB.address,isWritable:!1}),P({pubkey:r.vault.A,isWritable:!1}),P({pubkey:r.vault.B,isWritable:!1}),P({pubkey:r.id}),P({pubkey:r.targetOrders}),P({pubkey:e.lpTokenAccount}),P({pubkey:r.id,isWritable:!1}),P({pubkey:r.marketProgramId,isWritable:!1}),P({pubkey:r.marketId,isWritable:!1}),P({pubkey:e.payer,isSigner:!0})];return new Xt({programId:r.programId,keys:i,data:n})}function _u({poolKeys:o}){let e=_([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[P({pubkey:new Pe(o.id),isWritable:!1}),P({pubkey:new Pe(o.authority),isWritable:!1}),P({pubkey:new Pe(o.openOrders),isWritable:!1}),P({pubkey:new Pe(o.vault.A),isWritable:!1}),P({pubkey:new Pe(o.vault.B),isWritable:!1}),P({pubkey:new Pe(o.mintLp.address),isWritable:!1}),P({pubkey:new Pe(o.marketId),isWritable:!1}),P({pubkey:new Pe(o.marketEventQueue),isWritable:!1})];return{instruction:new Xt({programId:new Pe(o.programId),keys:n,data:t})}}import{ASSOCIATED_TOKEN_PROGRAM_ID as tc,TOKEN_2022_PROGRAM_ID as ln,TOKEN_PROGRAM_ID as He}from"@solana/spl-token";import{Keypair as Ss,PublicKey as U,SystemProgram as Mo,TransactionInstruction as Ot}from"@solana/web3.js";import nc from"bn.js";import _p from"bn.js";function vu(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function Ik(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function Bk(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function Or(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Ps(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function hs(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function Ko(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Vu(o,e){return Ko(o,e)?null:Ps(o,e)}function Fu(o,e){return Ko(o,e)?null:hs(o,e)}var Ip=Buffer.from("amm_config","utf8"),Bp=Buffer.from("pool","utf8"),xp=Buffer.from("pool_vault","utf8"),Sp=Buffer.from("pool_reward_vault","utf8"),Eu=Buffer.from("position","utf8"),Kp=Buffer.from("tick_array","utf8"),Cp=Buffer.from("operation","utf8"),Rp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Op=Buffer.from("observation","utf8");function Ck(o,e){return ue([Ip,vu(e)],o)}function Du(o,e,t,n){return ue([Bp,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function ks(o,e,t){return ue([xp,e.toBuffer(),t.toBuffer()],o)}function Wu(o,e,t){return ue([Sp,e.toBuffer(),t.toBuffer()],o)}function he(o,e,t){return ue([Kp,e.toBuffer(),Or(t)],o)}function hn(o,e,t,n){return ue([Eu,e.toBuffer(),Or(t),Or(n)],o)}function At(o,e){return ue([Eu,e.toBuffer()],o)}function Lr(o){return ue([Buffer.from("metadata","utf8"),_n.toBuffer(),o.toBuffer()],_n)}function Co(o){return ue([Cp],o)}function mt(o,e){return ue([Rp,e.toBuffer()],o)}function qu(o,e){return ue([Op,e.toBuffer()],o)}import wt from"bn.js";var pe=new wt(0),yt=new wt(1),zt=new wt(-1),bt=new wt(1).shln(64),Nr=new wt(1).shln(128),Ts=bt.sub(yt),Ro=64,Uu=Nr.subn(1),et=-443636,st=-et,Pt=new wt("4295048016"),ht=new wt("79226673521066979257578248091"),Mr=new wt("4295048017"),_r=new wt("79226673521066979257578248090"),Gu=16,Xu="59543866431248",zu="184467440737095516",Qu="15793534762490258745",vr=new wt(10).pow(new wt(6)),Lp=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(Lp||{}),Lk={[500]:10,[3e3]:60,[1e4]:200},Nk={version:6,liquidity:pe,tickCurrent:0,feeGrowthGlobalX64A:pe,feeGrowthGlobalX64B:pe,protocolFeesTokenA:pe,protocolFeesTokenB:pe,swapInAmountTokenA:pe,swapOutAmountTokenB:pe,swapInAmountTokenB:pe,swapOutAmountTokenA:pe,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},Yu={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:[]},Mk=new wt("18446744073700000000");var Np=15,me=class{static async getTickArrays(e,t,n,r,i,s,a){let c=[],u=H.getTickArrayStartIndexByTick(r,i),l=H.getInitializedTickArrayInRange(s,a,i,u,Math.floor(Np/2));for(let p=0;p<l.length;p++){let{publicKey:y}=he(t,n,l[p]);c.push(y)}let m=(await Bt(e,c)).map(p=>p!==null?Oo.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=E(K({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,r,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,r,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=H.getNextTickArrayStartIndex(u,i,s),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,r,i){let s=Math.floor(e/me.tickCount(t)),a=n?H.searchLowBitFromStart(r,i,s-1,1,t):H.searchHightBitFromStart(r,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,r){let i;if(r){let a=qe-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a-1}}else{let a=0;for(;a<qe;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=he(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,i,s){let a=H.getTickArrayStartIndexByTick(r,i),c=Math.floor((r-a)/i),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<qe;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=he(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(H.checkIsOutOfBoundary(e)){if(e>st)return!1;let n=H.getTickArrayStartIndexByTick(et,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return qe*e}};import se from"bn.js";import{PublicKey as Rt}from"@solana/web3.js";import Be from"bn.js";var Is=14,Qt=class{static maxTickInTickarrayBitmap(e){return e*qe*kn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(r+=1);let i=n*r;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,r){if(!me.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=r?t-me.tickCount(n):t+me.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*qe,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(r){let l=e.shln(1024-u-1),m=Vu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=Fu(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-me.tickCount(n)}}}},Lo=class{static getBitmapOffset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Qt.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&r--,r}static getBitmap(e,t,n){let r=this.getBitmapOffset(e,t);return e<0?{offset:r,tickarrayBitmap:n.negativeTickArrayBitmap[r]}:{offset:r,tickarrayBitmap:n.positiveTickArrayBitmap[r]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:r}=this.extensionTickBoundary(t);if(e>=r&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Qt.maxTickInTickarrayBitmap(e),n=-t;if(st<=t)throw Error(`extensionTickBoundary check error: ${st}, ${t}`);if(n<=et)throw Error(`extensionTickBoundary check error: ${n}, ${et}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:r}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:H.mergeTickArrayBitmap(r).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let i=me.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,r);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,r){let{minValue:i,maxValue:s}=Qt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let c=H.mergeTickArrayBitmap(e).shln(kn-1-a),u=Ko(512,c)?null:Ps(512,c);if(u!==null){let l=t-u*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=H.mergeTickArrayBitmap(e).shrn(a),u=Ko(512,c)?null:hs(512,c);if(u!==null){let l=t+u*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-me.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Qt.maxTickInTickarrayBitmap(t),r=Math.floor(n/me.tickCount(t));return e<0&&n!=0&&(r=kn-r),r}};import Vt from"bn.js";var No=class{static getfeeGrowthInside(e,t,n){let r=new Vt(0),i=new Vt(0);e.tickCurrent>=t.tick?(r=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Vt(0),a=new Vt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,bt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,bt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,bt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,bt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,r){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,bt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,r){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,bt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Vt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Vt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Vt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Vt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,add:i,epochInfo:s}){var b,g,w,A;let a=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),c=ee.getSqrtPriceX64FromTick(t.tickLower),u=ee.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+r:1-r,m=le.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[be(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),be(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[be(new Vt(new O(m.amountA.toString()).mul(l).toFixed(0)),(w=e.mintA.extensions)==null?void 0:w.feeConfig,s,!0),be(new Vt(new O(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Kt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as ju}from"@solana/spl-token";var Ce=class{static getOutputAmountAndRemainAccounts(e,t,n,r,i,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=Tn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,l,i,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(zt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=he(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=Tn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(zt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Ce.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Lo.checkTickArrayIsInit(me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):H.checkTickArrayIsInitialized(H.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=he(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=he(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/me.tickCount(e.tickSpacing)),r=t?H.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):H.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return r.length>0?{isExist:!0,nextStartIndex:r[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=me.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:i}=Qt.nextInitializedTickArrayStartIndex(H.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=Lo.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<et||t>st)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,rewardInfos:i}){var a,c,u;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=E(K({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Rt(d)});if(p.tokenMint.equals(Rt.default))continue;if(n<=p.openTime.toNumber()||r.eq(pe)){s.push(p);continue}let y=new Be(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),w=ne.mulDivFloor(f,p.emissionsPerSecondX64,bt),A=p.rewardTotalEmissioned.add(w);s.push(E(K({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let i of t){let s=H.getTickArrayStartIndexByTick(i,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=Qt.maxTickInTickarrayBitmap(e),n=-t;return t>st&&(t=me.getArrayStartIndex(st,e)+me.tickCount(e)),n<et&&(n=me.getArrayStartIndex(et,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/me.tickCount(t)*kn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await We(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=Zu.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},i=[];for(let c of t){let u=H.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=H.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=he(c.programId,c.id,m);i.push({pubkey:d}),r[d.toString()]=c.id}}let s=await We(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=r[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Oo.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=E(K({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:r=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(At(p,d).publicKey);let l=await Bt(t,u,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=Vr.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=H._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),w=H._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:k}=le.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,w.tickSqrtPriceX64,p.liquidity,!1),I=1/(1-Math.sqrt(Math.sqrt(g.price.div(w.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:w.price,amountA:A,amountB:k,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>E(K({},x),{pendingReward:new Be(0)})),leverage:I,tokenFeeAmountA:new Be(0),tokenFeeAmountB:new Be(0)}];let T=await H.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await H.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await Bt(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=Oo.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let w=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[w].toString()],I=y[m[A].toString()],T=k.ticks[H.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=I.ticks[H.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await No.GetPositionFees(f,g,T,S),B=await No.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Be(0))?x:new Be(0),g.tokenFeeAmountB=R.gte(new Be(0))?R:new Be(0);for(let M=0;M<B.length;M++)g.rewardInfos[M].pendingReward=B[M].gte(new Be(0))?B[M]:new Be(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:i,slippage:s,priceLimit:a=new O(0),catchLiquidityInsufficient:c=!1}){var D;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new O(0))?u=l?Pt.add(new Be(1)):ht.sub(new Be(1)):u=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=be(i,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:w}=Ce.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((D=p.fee)!=null?D:pe),u,c),A=be(f,d,r,!1),k=ee.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),I=l?k:new O(1).div(k),T=f.mul(new Be(Math.floor((1-s)*1e10))).div(new Be(1e10)),S=be(T,d,r,!1),x=l?e.currentPrice:new O(1).div(e.currentPrice),R=new O(I).sub(x).abs(),B=x,M=new Me(new O(R).mul(10**15).toFixed(0),new O(B).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:Kt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:I,priceImpact:M,fee:w,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=r.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new ye(E(K({},u),{mint:u.address,isToken2022:u.programId===ju.toBase58()})),new ye(E(K({},l),{mint:l.address,isToken2022:l.programId===ju.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:w,executionPrice:A,priceImpact:k,fee:I,remainingAccounts:T,executionPriceX64:S}=Ce.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Rt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=E(K({},y),{amount:new fe(m,y.amount),fee:y.fee===void 0?void 0:new fe(m,y.fee)}),R=E(K({},f),{amount:new fe(d,f.amount),fee:f.fee===void 0?void 0:new fe(d,f.fee)}),B=E(K({},b),{amount:new fe(d,b.amount),fee:b.fee===void 0?void 0:new fe(d,b.fee)}),M=new Ue({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:w.mul(new O(10**(20+d.decimals))).toFixed(0)}),D=new Ue({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:A.mul(new O(10**(20+d.decimals))).toFixed(0)}),V=new fe(m,I);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:B,expirationTime:g,currentPrice:M,executionPrice:D,priceImpact:k,fee:V,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountOut:i,slippage:s,priceLimit:a=new O(0)}){var B;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new O(0))?l=c?ht.sub(new Be(1)):Pt.add(new Be(1)):l=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=be(i,u[n.toString()],r,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=Ce.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((B=m.fee)!=null?B:pe),l),b=c?e.mintB.address:e.mintA.address,g=be(d,u[b],r,!1),w=ee.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),A=c?w:new O(1).div(w),k=d.mul(new Be(Math.floor((1+s)*1e10))).div(new Be(1e10)),I=be(k,u[b],r,!0),T=c?e.currentPrice:new O(1).div(e.currentPrice),S=new O(A).sub(T).abs(),x=T,R=new Me(new O(S).mul(10**15).toFixed(0),new O(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:I,realAmountOut:m,expirationTime:Kt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:R,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let i=e[t],s=H.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=H.getTickPrice({poolInfo:e,tick:r,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:r,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[pt(e.mintA.address).toString()],d=r[pt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),b=ee.getSqrtPriceX64FromTick(s),g=ee.getSqrtPriceX64FromTick(a),{amountSlippageA:w,amountSlippageB:A}=le.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:I}=le.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new O(w.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(A.toString()).div(new O(10).pow(y)).mul(d.value)),S=new O(k.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(I.toString()).div(new O(10).pow(y)).mul(d.value)),x=new O(1).div(T.add(S)),B=new O(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),M=3600*24*365,D=e.rewardDefaultInfos.map(V=>{var q,ot;let Z=V.mint.decimals,G=r[V.mint.address];return c<((q=V.startTime)!=null?q:0)||c>((ot=V.endTime)!=null?ot:0)||!V.perSecond||!G||Z===void 0?0:new O(G.value).mul(new O(V.perSecond).mul(M)).div(new O(10).pow(Z)).mul(x).mul(100).toNumber()});return{feeApr:B,rewardsApr:D,apr:B+D.reduce((V,Z)=>V+Z,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:r,amount:i,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,w;let l=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),m=ee.getSqrtPriceX64FromTick(n),d=ee.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=be(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Be(new O(y.amount.sub((w=y.fee)!=null?w:pe).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?le.getLiquidityFromTokenAmountA(m,d,f,!a):new Be(0);else if(l.lte(d)){let A=le.getLiquidityFromTokenAmountA(l,d,f,!a),k=le.getLiquidityFromTokenAmountB(m,l,f);b=t?A:k}else b=t?new Be(0):le.getLiquidityFromTokenAmountB(m,d,f);return Ce.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:r,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:r,liquidity:i,slippage:s,add:a}){var b,g,w,A;let c=ee.getSqrtPriceX64FromTick(n),u=ee.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=le.getAmountsFromLiquidity(ee.priceToSqrtPriceX64(new O(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[be(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),be(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[be(m.amountA.muln(l),(w=t.mintA.extensions)==null?void 0:w.feeConfig,e,!0),be(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Kt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(c=>!n[c.id]).map(c=>new Rt(c.id));(await Bt(e,r)).forEach((c,u)=>{!c||(n[r[u].toBase58()]=In.decode(c.data))});let s=t.map(c=>mt(new Rt(c.programId),new Rt(c.id)).publicKey),a=await Ce.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>E(K({},c),{[u.id]:E(K({},n[u.id]),{id:new Rt(u.id),version:6,programId:new Rt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:E(K({},u.config),{id:new Rt(u.config.id),fundOwner:""}),currentPrice:new O(u.price),exBitmapInfo:a[mt(new Rt(u.programId),new Rt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber()})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function wT({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:r,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var A,k,I,T;let[u,l,m,d]=e<t?[e,t,n,r]:[t,e,r,n],p=ee.priceToSqrtPriceX64(new O(o.price),o.mintA.decimals,o.mintB.decimals),y=ee.getSqrtPriceX64FromTick(u),f=ee.getSqrtPriceX64FromTick(l),[b,g]=[be(m,(A=o.mintA.extensions)==null?void 0:A.feeConfig,a,!c),be(d,(k=o.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],w=le.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((I=b.fee)!=null?I:pe),g.amount.sub((T=g.fee)!=null?T:pe));return le.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:w,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var Bs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Hu(o){return E(K({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:Bs,week:Bs,month:Bs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:E(K({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),i=r.div(n);return r.mod(n).eq(pe)||(i=i.add(yt)),i}static mulDivFloor(e,t,n){if(n.eq(pe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(pe))throw new Error("division by 0");return e.mul(t).add(n.sub(yt)).div(n)}static x64ToDecimal(e,t){return new O(e.toString()).div(O.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new se(e.mul(O.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Nr).sub(t).mod(Nr)}};function Xe(o,e){return xs(o.mul(e),64,256)}function Mp(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function xs(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ee=class{static sqrtPriceX64ToPrice(e,t,n){return ne.x64ToDecimal(e).pow(2).mul(O.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(O.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(pe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(pe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,r){if(!e.gt(pe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(pe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,r){if(n.eq(pe))return e;let i=t.shln(Ro);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,yt,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return ne.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let i=n.shln(Ro);if(r)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,yt,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<et||e>st)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new se("18445821805675395072"):new se("18446744073709551616");return(t&2)!=0&&(n=Xe(n,new se("18444899583751176192"))),(t&4)!=0&&(n=Xe(n,new se("18443055278223355904"))),(t&8)!=0&&(n=Xe(n,new se("18439367220385607680"))),(t&16)!=0&&(n=Xe(n,new se("18431993317065453568"))),(t&32)!=0&&(n=Xe(n,new se("18417254355718170624"))),(t&64)!=0&&(n=Xe(n,new se("18387811781193609216"))),(t&128)!=0&&(n=Xe(n,new se("18329067761203558400"))),(t&256)!=0&&(n=Xe(n,new se("18212142134806163456"))),(t&512)!=0&&(n=Xe(n,new se("17980523815641700352"))),(t&1024)!=0&&(n=Xe(n,new se("17526086738831433728"))),(t&2048)!=0&&(n=Xe(n,new se("16651378430235570176"))),(t&4096)!=0&&(n=Xe(n,new se("15030750278694412288"))),(t&8192)!=0&&(n=Xe(n,new se("12247334978884435968"))),(t&16384)!=0&&(n=Xe(n,new se("8131365268886854656"))),(t&32768)!=0&&(n=Xe(n,new se("3584323654725218816"))),(t&65536)!=0&&(n=Xe(n,new se("696457651848324352"))),(t&131072)!=0&&(n=Xe(n,new se("26294789957507116"))),(t&262144)!=0&&(n=Xe(n,new se("37481735321082"))),e>0&&(n=Uu.div(n)),n}static getTickFromPrice(e,t,n){return ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(ht)||e.lt(Pt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new se(t-64),r=Mp(n,32,128),i=new se("8000000000000000","hex"),s=0,a=new se(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new se(0))&&s<Gu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let u=a.shrn(32),m=r.add(u).mul(new se(Xu)),d=xs(m.sub(new se(zu)),64,128).toNumber(),p=xs(m.add(new se(Qu)),64,128).toNumber();return d==p?d:ee.getSqrtPriceX64FromTick(p).lte(e)?p:d}},Bn=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,n,r))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,r){let i=Bn.getTickWithPriceAndTickspacing(e,t,n,r),s=ee.getSqrtPriceX64FromTick(i);return ee.sqrtPriceX64ToPrice(s,n,r)}},le=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(pe))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Ro),s=t.sub(e);return r?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),yt,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(pe))throw new Error("sqrtPriceX64A must greater than 0");return r?ne.mulDivCeil(n,t.sub(e),bt):ne.mulDivFloor(n,t.sub(e),bt)}static getLiquidityFromTokenAmountA(e,t,n,r){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return r?ne.mulDivRoundingUp(a,yt,Ts):a.shrn(Ro)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,Ts,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return le.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=le.getLiquidityFromTokenAmountA(e,n,r,!1),a=le.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return le.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:le.getTokenAmountAFromLiquidity(t,n,r,i),amountB:new se(0)};if(e.lt(n)){let s=le.getTokenAmountAFromLiquidity(e,n,r,i),a=le.getTokenAmountBFromLiquidity(t,e,r,i);return{amountA:s,amountB:a}}else return{amountA:new se(0),amountB:le.getTokenAmountBFromLiquidity(t,n,r,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,i,s,a){let{amountA:c,amountB:u}=le.getAmountsFromLiquidity(e,t,n,r,s),l=i?1+a:1-a,m=new se(new O(c.toString()).mul(l).toFixed(0)),d=new se(new O(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee:c}){var w,A,k,I;let u=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),l=ee.getSqrtPriceX64FromTick(t),m=ee.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=le.getAmountsFromLiquidity(u,l,m,r,s),[y,f]=[be(p.amountA,(w=e.mintA.extensions)==null?void 0:w.feeConfig,a,c),be(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,c)],[b,g]=[be(new se(new O(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),be(new se(new O(p.amountB.toString()).mul(d).toFixed(0)),(I=e.mintB.extensions)==null?void 0:I.feeConfig,a,c)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Kt(y.expirationTime,f.expirationTime)}}},Tn=class{static swapCompute(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(pe))throw new Error("amountSpecified must not be 0");if(y||(y=s?Pt.add(yt):ht.sub(yt)),s){if(y.lt(Pt))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(ht))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(pe),g={amountSpecifiedRemaining:d,amountCalculated:pe,sqrtPriceX64:m,tick:u>p?Math.min(p+me.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new se(0)},w=p,A=n[p],k=0,I=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(pe)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=H.nextInitTick(A,g.tick,l,s,I),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let M=Ce.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:i},w,s);if(!M.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}w=M.nextStartIndex;let{publicKey:D}=he(e,t,w);R=D,A=n[w];try{x=H.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==w&&R&&(g.accounts.push(R),p=w),T.tickNext<et?T.tickNext=et:T.tickNext>st&&(T.tickNext=st),T.sqrtPriceNextX64=ee.getSqrtPriceX64FromTick(T.tickNext);let B;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?B=y:B=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=Tn.swapStepCompute(g.sqrtPriceX64,B,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let M=x.liquidityNet;s&&(M=M.mul(zt)),g.liquidity=le.addDelta(g.liquidity,M)}I=T.tickNext!=g.tick&&!s&&A.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let M=ee.getTickFromSqrtPriceX64(g.sqrtPriceX64);I=M!=g.tick&&!s&&A.startTickIndex===M,g.tick=M}++k}try{let{nextStartIndex:T,isExist:S}=me.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==T&&(g.accounts.push(he(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:pe,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,r,i){let s={sqrtPriceX64Next:new se(0),amountIn:new se(0),amountOut:new se(0),feeAmount:new se(0)},a=e.gte(t),c=r.gte(pe);if(c){let l=ne.mulDivFloor(r,vr.sub(new se(i.toString())),vr);s.amountIn=a?le.getTokenAmountAFromLiquidity(t,e,n,!0):le.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?le.getTokenAmountBFromLiquidity(t,e,n,!1):le.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(zt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromOutput(e,n,r.mul(zt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=le.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=le.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:le.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:le.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(r.mul(zt))&&(s.amountOut=r.mul(zt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new se(i),vr.sub(new se(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var qe=60,kn=512,H=class{static getTickArrayAddressByTick(e,t,n,r){let i=H.getTickArrayStartIndexByTick(n,r),{publicKey:s}=he(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=H.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=qe)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=me.tickCount(t),r=e/n;return e<0&&e%n!=0?r=Math.ceil(r)-1:r=Math.floor(r),r}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*me.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*qe,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*qe,i=Math.floor(t/r)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*r}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*qe:e+t*qe}static mergeTickArrayBitmap(e){let t=new _p(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,r,i){let s=Math.floor(r/(n*qe));return[...H.searchLowBitFromStart(e,t,s-1,i,n),...H.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return H.searchHightBitFromStart(e,t,0,kn,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=H.getAllInitializedTickArrayStartIndex(n,r,i);for(let c of a){let{publicKey:u}=he(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>H.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===r)break}let c=me.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>H.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===r)break}let c=me.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<et||e>st}static nextInitTick(e,t,n,r,i){if(me.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(r)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<qe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=qe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<qe;){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 r=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new O(1).div(i),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new O(1).div(t),i=Bn.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new O(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new O(1).div(i),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new O(1).div(t),i=Bn.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new O(1).div(a)}}};var $u=_([ge(8),W("bump"),qt("index"),C(""),Ye("protocolFeeRate"),Ye("tradeFeeRate"),qt("tickSpacing"),X(h(),8,"")]),vp=_([Ye("blockTimestamp"),Dn("tickCumulative"),X(h(),4)]),Ju=_([ge(8),je("initialized"),h("recentEpoch"),qt("observationIndex"),C("poolId"),X(vp,100,"observations"),X(h(),4)]),Vp=_([W("rewardState"),h("openTime"),h("endTime"),h("lastUpdateTime"),J("emissionsPerSecondX64"),h("rewardTotalEmissioned"),h("rewardClaimed"),C("tokenMint"),C("tokenVault"),C("creator"),J("rewardGrowthGlobalX64")]),In=_([ge(8),W("bump"),C("ammConfig"),C("creator"),C("mintA"),C("mintB"),C("vaultA"),C("vaultB"),C("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),qt("tickSpacing"),J("liquidity"),J("sqrtPriceX64"),Qe("tickCurrent"),Ye(),J("feeGrowthGlobalX64A"),J("feeGrowthGlobalX64B"),h("protocolFeesTokenA"),h("protocolFeesTokenB"),J("swapInAmountTokenA"),J("swapOutAmountTokenB"),J("swapInAmountTokenB"),J("swapOutAmountTokenA"),W("status"),X(W(),7,""),X(Vp,3,"rewardInfos"),X(h(),16,"tickArrayBitmap"),h("totalFeesTokenA"),h("totalFeesClaimedTokenA"),h("totalFeesTokenB"),h("totalFeesClaimedTokenB"),h("fundFeesTokenA"),h("fundFeesTokenB"),h("startTime"),X(h(),15*4-3,"padding")]),Fp=_([J("growthInsideLastX64"),h("rewardAmountOwed")]),Vr=_([ge(8),W("bump"),C("nftMint"),C("poolId"),Qe("tickLower"),Qe("tickUpper"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),h("tokenFeesOwedA"),h("tokenFeesOwedB"),X(Fp,3,"rewardInfos"),X(h(),8,"")]),UT=_([ge(8),W("bump"),C("poolId"),Qe("tickLowerIndex"),Qe("tickUpperIndex"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),h("tokenFeesOwedA"),h("tokenFeesOwedB"),X(J(),3,"rewardGrowthInside"),X(h(),8,"")]),Ep=_([Qe("tick"),$a("liquidityNet"),J("liquidityGross"),J("feeGrowthOutsideX64A"),J("feeGrowthOutsideX64B"),X(J(),3,"rewardGrowthsOutsideX64"),X(Ye(),13,"")]),Oo=_([ge(8),C("poolId"),Qe("startTickIndex"),X(Ep,qe,"ticks"),W("initializedTickCount"),X(W(),115,"")]),ec=_([ge(329),X(C(),100,"whitelistMints")]),Zu=_([ge(8),C("poolId"),X(X(h(),8),Is,"positiveTickArrayBitmap"),X(X(h(),8),Is,"negativeTickArrayBitmap")]);Ju.span;var oc=ce("Raydium_Clmm"),Lt={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,r,i,s,a,c,u,l,m,d,p,y){let f=_([J("sqrtPriceX64"),h("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Mo.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let w=Buffer.from([...Lt.createPool,...g]);return new Ot({keys:b,programId:e,data:w})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:r,mintB:i,ammConfigId:s,initialPriceX64:a,startTime:c}=e,[u,l]=[new U(r.address),new U(i.address)],{publicKey:m}=Du(t,s,u,l),{publicKey:d}=qu(t,m),{publicKey:p}=ks(t,m,u),{publicKey:y}=ks(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,u,p,new U(r.programId||He),l,y,new U(i.programId||He),mt(t,m).publicKey,a,c)];return{signers:[],instructions:f,instructionTypes:[F.CreateAccount,F.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B){let M=_([Qe("tickLowerIndex"),Qe("tickUpperIndex"),Qe("tickArrayLowerStartIndex"),Qe("tickArrayUpperStartIndex"),J("liquidity"),h("amountMaxA"),h("amountMaxB"),je("withMetadata"),W("optionBaseFlag"),je("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:Mo.programId,isSigner:!1,isWritable:!1},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:tc,isSigner:!1,isWritable:!1},{pubkey:_n,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],Z=Buffer.alloc(M.span);M.encode({tickLowerIndex:w,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},Z);let G=Buffer.from([...Lt.openPosition,...Z]);return new Ot({keys:V,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Ss.generate();m.push(x),y=x.publicKey}let f=H.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=H.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=he(d,p,f),{publicKey:w}=he(d,p,b),{publicKey:A}=we(n.wallet,y,He),{publicKey:k}=Lr(y),{publicKey:I}=At(d,y),{publicKey:T}=hn(d,p,r,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Ss.generate();m.push(x),y=x.publicKey}let f=H.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=H.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=he(d,p,f),{publicKey:w}=he(d,p,b),{publicKey:A}=we(n.wallet,y,He),{publicKey:k}=Lr(y),{publicKey:I}=At(d,y),{publicKey:T}=hn(d,p,r,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,u,s,a,c,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?mt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B){let M=_([Qe("tickLowerIndex"),Qe("tickUpperIndex"),Qe("tickArrayLowerStartIndex"),Qe("tickArrayUpperStartIndex"),J("liquidity"),h("amountMaxA"),h("amountMaxB"),je("withMetadata"),W("optionBaseFlag"),je("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:Mo.programId,isSigner:!1,isWritable:!1},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:tc,isSigner:!1,isWritable:!1},{pubkey:_n,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],Z=Buffer.alloc(M.span);M.encode({tickLowerIndex:w,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:new nc(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},Z);let G=Buffer.from([...Lt.openPosition,...Z]);return new Ot({keys:V,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=Ss.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=H.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=H.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=he(p,y,f),{publicKey:w}=he(p,y,b),{publicKey:A}=we(n.wallet,m,He),{publicKey:k}=Lr(m),{publicKey:I}=At(p,m),{publicKey:T}=hn(p,y,r,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),r,i,f,b,s,a,c,u,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?mt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,i){let s=_([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Mo.programId,isSigner:!1,isWritable:!1},{pubkey:He,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...Lt.closePosition,...c]);return new Ot({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new U(e.programId),{publicKey:s}=we(n.wallet,r.nftMint,He),{publicKey:a}=At(i,r.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[F.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w){let A=_([J("liquidity"),h("amountMaxA"),h("amountMaxB"),W("optionBaseFlag"),je("baseFlag")]),k=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...Lt.increaseLiquidity,...T]);return new Ot({keys:I,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=H.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=H.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=he(c,u,l),{publicKey:p}=he(c,u,m),{publicKey:y}=we(r.wallet,n.nftMint,He),{publicKey:f}=At(c,n.nftMint),{publicKey:b}=hn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?mt(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=H.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=H.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=he(c,u,l),{publicKey:p}=he(c,u,m),{publicKey:y}=we(r.wallet,n.nftMint,He),{publicKey:f}=At(c,n.nftMint),{publicKey:b}=hn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?mt(c,u).publicKey:void 0)],signers:[],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w){let A=_([J("liquidity"),h("amountMaxA"),h("amountMaxB"),W("optionBaseFlag"),je("baseFlag")]),k=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:new nc(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...Lt.increaseLiquidity,...T]);return new Ot({keys:I,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A){let k=_([J("liquidity"),h("amountMinA"),h("amountMinB")]),I=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:or,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...I],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:w},S);let x=Buffer.from([...Lt.decreaseLiquidity,...S]);return new Ot({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=H.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=H.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:y}=he(u,l,d),{publicKey:f}=we(r.wallet,n.nftMint,c),{publicKey:b}=At(u,n.nftMint),{publicKey:g}=hn(u,l,n.tickLower,n.tickUpper),w=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)w.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:r.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(u,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),w,i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?mt(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[F.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g){let w=_([h("amount"),h("otherAmountThreshold"),J("sqrtPriceLimitX64"),je("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:or,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],I=Buffer.alloc(w.span);w.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},I);let T=Buffer.from([...Lt.swap,...I]);return new Ot({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,mt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,outputMint:i,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toBase58(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountB:r.tokenAccountA,b?r.tokenAccountA:r.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,u,n,s,a,c,!1,mt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=_([h("openTime"),h("endTime"),J("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Mo.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Y(l),endTime:Y(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Lt.initReward,...f]);return new Ot({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a=Wu(i,s,r.mint).publicKey,c=Co(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[F.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=_([W("rewardIndex"),J("emissionsPerSecondX64"),h("openTime"),h("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:Y(l),endTime:Y(m)},f);let b=Buffer.from([...Lt.setRewardEmissions,...f]);return new Ot({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===r.mint.toString()&&(a=d,c=new U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&oc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Co(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[F.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let c=_([W("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:or,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Lt.collectReward,...l]);return new Ot({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&oc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,r,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[F.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}};import{PublicKey as Up}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gp}from"@solana/spl-token";import{PublicKey as Wp}from"@solana/web3.js";import rc from"bn.js";var Ks=new rc(25),Fr=new rc(1e4),Dp={4:3,5:3};var qp=ce("Raydium_liquidity_serum");function ic({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,r;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));r=Wp.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw qp.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}import _o from"bn.js";function Er({programId:o}){let{publicKey:e}=ue([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function xn({name:o,programId:e,marketId:t}){let{publicKey:n}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function Xp({programId:o,marketId:e}){let{publicKey:t}=ue([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function Os({programId:o}){return ue([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function sc({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:c}){let u=xn({name:"amm_associated_seed",programId:a,marketId:t}),l=xn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Os({programId:a}),p=xn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=xn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=xn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Xp({programId:a,marketId:t}),g=xn({name:"target_associated_seed",programId:a,marketId:t}),w=xn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=ic({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:w,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:A,lookupTableAccount:Up.default,configId:Er({programId:a})}}var Cs;async function PI({connection:o,poolKeysList:e,config:t}){Cs||(Cs=new Gn({connection:o}),await Cs.initStableModelLayout());let n=e.map(s=>_u({poolKeys:s}));return(await Ka(o,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=Ca(s,"GetPoolData"),c=new _o(Wt(a,"status")),u=Number(Wt(a,"coin_decimals")),l=Number(Wt(a,"pc_decimals")),m=Number(Wt(a,"lp_decimals")),d=new _o(Wt(a,"pool_coin_amount")),p=new _o(Wt(a,"pool_pc_amount")),y=new _o(Wt(a,"pool_lp_supply")),f="0";try{f=Wt(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new _o(f)}})}var Rs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Dr=o=>{let e={},t=Gp.toBase58();return Object.keys(o).map(n=>{let r=o[n],[i,s]=[r.baseMint.toBase58(),r.quoteMint.toBase58()];e[n]={id:n,version:4,status:r.status.toNumber(),programId:r.programId.toBase58(),mintA:it({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:it({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new O(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new O(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new O(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:Rs,week:Rs,month:Rs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:Er({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:it({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import Ze from"bn.js";var vo=class extends Ke{constructor(t){super(t);this.stableLayout=new Gn({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:r,baseIn:i}){let s=new Ze(new O(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Cr(t[i?"mintB":"mintA"]),[c,u]=[new Ze(new O(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Ze(new O(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Ze(new O(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${r.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=De;s.isZero()||(d=m==="base"?cr(s.mul(u),c):cr(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=cr(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Me(new Ze(1)).add(r).mul(d).quotient,b=new fe(a,d),g=new fe(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:r,amountInA:i,amountInB:s,fixedSide:a,config:c,txVersion:u,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=K({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let w=await m.getCreatedTokenAccount({mint:new tt(n.lpMint.address)}),A=[y,f],k=[b,g],I=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(A.reverse(),k.reverse(),I.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=A,[B,M]=k,[D,V]=I,Z=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Ft=await m.handleTokenAccount({side:"in",amount:D,mint:x.mint,tokenAccount:B,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=Ft,ot=Oe(Ft,["tokenAccount"]);G.addInstruction(ot);let Ln=await m.handleTokenAccount({side:"in",amount:V,mint:R.mint,tokenAccount:M,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Rn}=Ln,mn=Oe(Ln,["tokenAccount"]);G.addInstruction(mn);let Yo=await m.handleTokenAccount({side:"out",amount:0,mint:new tt(n.lpMint.address),tokenAccount:w,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Ht}=Yo,On=Oe(Yo,["tokenAccount"]);return G.addInstruction(On),G.addInstruction({instructions:[Nu({poolInfo:n,poolKeys:Z,userKeys:{baseTokenAccount:q,quoteTokenAccount:Rn,lpTokenAccount:Ht,owner:this.scope.ownerPubKey},baseAmountIn:D,quoteAmountIn:V,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5AddLiquidity:F.AmmV4AddLiquidity],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),u===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:r,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new tt(n.mintA.address),new tt(n.mintB.address),new tt(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:w,checkCreateATAOwner:A}=K({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:w,checkCreateATAOwner:A}),{tokenAccount:k}=x,I=Oe(x,["tokenAccount"]);g.addInstruction(I);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:w,checkCreateATAOwner:A}),{tokenAccount:T}=R,S=Oe(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[ws({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(c),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Qn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||we(this.scope.ownerPubKey,q.accountInfo.mint,Qn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let w=g[t.lpMint.address];if(w===void 0)throw Error("find lp account error in trade accounts");let A=r.add(a!=null?a:new Ze(0)),k=t.mintA.address===ye.WSOL.mint.toString(),I=t.mintB.address===ye.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let q=gt[s.programId],ot=Je({programId:new tt(s.programId),poolId:new tt(s.id),owner:this.scope.ownerPubKey,version:q}),Rn,mn=await this.scope.connection.getAccountInfo(ot);if(mn&&(Rn=Un(q).decode(mn.data)),q!==6&&!Rn){let{instruction:Zt,instructionType:ni}=ho({id:new tt(s.id),programId:new tt(s.programId),version:q,ledger:ot,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Zt],instructionTypes:[ni]})}let Ht=[];for(let Zt of s.rewardInfos){let ni=Zt.mint.address===ye.WSOL.mint.toString();if(g[Zt.mint.address])Ht.push(g[Zt.mint.address]);else{let{account:Qs,instructionParams:Ys}=await this.scope.account.getOrCreateTokenAccount({mint:new tt(Zt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!ni,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Qs||this.logAndCreateError("farm reward account not found:",Zt.mint.address),Ys&&b.addInstruction(Ys),Ht.push(Qs)}}let On=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ft={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:On,lpAccount:w,rewardAccounts:Ht},Ln=gt[s.programId],Yo=Ln===6?ko(Ft):Ln===5?To(Ft):Io(Ft),Mc={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};b.addInstruction({instructions:[Yo],instructionTypes:[Mc[Ln]]})}let B=await this.getAmmPoolKeys(t.id),M=ws({poolInfo:t,poolKeys:B,userKeys:{lpTokenAccount:w,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[M],instructionTypes:[t.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity],lookupTableAddress:B.lookupTableAccount?[B.lookupTableAccount]:[]});let[D,V]=t.mintA.address===n.mintA.address?[T,x]:[x,T],Z=await this.scope.clmm.getClmmPoolKeys(n.id),G=await Se.openPositionFromBaseInstructions(E(K({poolInfo:n,poolKeys:Z,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:D,tokenAccountB:V},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:r,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var D;let b=u.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),g=u.useSOLBalance&&r.mint.equals(ac),w=u.useSOLBalance&&i.mint.equals(ac),A=this.createTxBuilder(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:b,amount:a}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=sc({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:B,instructionType:M}=Mu(E(K({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:we(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:c,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[B],instructionTypes:[M]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=Er({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return Bu.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:i,slippage:s}){let[a,c]=[r.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,w=t.version===4,A;if(w)A=new O(f.toString()).div(10**g).div(new O(y.toString()).div(10**b));else{let V=Ru(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?A=new O(1e6).div(V*1e6):A=new O(V*1e6).div(1e6)}let k=n,I=new Ze(0),T=new Ze(0);if(!k.isZero())if(w){T=St(k.mul(Ks),Fr);let V=k.sub(T),Z=y.add(V);I=f.mul(V).div(Z)}else{T=k.mul(new Ze(2)).div(new Ze(1e4));let V=k.sub(T);p==="quote"?I=new Ze(Ku(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),V.toNumber())):I=new Ze(Cu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),V.toNumber()))}let S=new Ze(new O(I.toString()).mul(1-s).toFixed(0)),x=I,R=S,B=new O(I.toString()).div(new O(k.sub(T).toString()).toFixed(0));!k.isZero()&&!I.isZero()&&(B=new O(I.toString()).div(10**g).div(new O(k.sub(T).toString()).div(10**b)));let M=A.sub(B).div(A).mul(100);return{amountOut:x,minAmountOut:R,currentPrice:A,executionPrice:B,priceImpact:M,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:r,mintOut:i,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=r.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new O(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new O(f.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new O(y.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Ze(0),w=n;if(!w.isZero()){w.gt(f)&&(w=f.sub(new Ze(1)));let R=f.sub(w);g=y.mul(w).div(R).mul(Fr).div(Fr.sub(Ks))}let A=new Ze(new O(g.toString()).mul(1+s).toFixed(0)),k=g,I=A;this.logDebug("amountIn:",new O(k.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new O(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!w.isZero()&&(T=new O(w.toString()).div(10**m.decimals).div(new O(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(k.toString()),x=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:k,maxAmountIn:I,currentPrice:b,executionPrice:T,priceImpact:x}}async swap({poolInfo:t,poolKeys:n,amountIn:r,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===j.toBase58(),w=y&&b.address===j.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:d});m.addInstruction(T||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:I,outputTokenUseSolBalance:w,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[Rr({version:x,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:r,amountOut:i,fixedSide:a})],instructionTypes:[x===4?F.AmmV4SwapBaseIn:F.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await We(this.scope.connection,t.map(l=>({pubkey:new tt(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=So.decode(m.accountInfo.data);i[String(t[l])]=E(K({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await We(this.scope.connection,s.map(l=>({pubkey:new tt(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new Ze(zp.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=E(K({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new O(p.toString()).div(new O(10).pow(m.quoteDecimal.toString())).div(new O(d.toString()).div(new O(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),r=Dr({[t]:n}),i=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as ie}from"@solana/web3.js";import dt from"bn.js";import{AccountLayout as uc,TOKEN_PROGRAM_ID as cc}from"@solana/spl-token";var Vo=class extends Ke{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var A;let{programId:t,owner:n=((A=this.scope.owner)==null?void 0:A.publicKey)||ie.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new dt(new ie(r.address).toBuffer()).gt(new dt(new ie(i.address).toBuffer()))?[i,r,new O(1).div(a)]:[r,i,a],g=ee.priceToSqrtPriceX64(b,y.decimals,f.decimals),w=await Se.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(w),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:E(K({},w.address),{programId:t.toString(),id:w.address.poolId.toString(),mintA:y,mintB:f,openTime:c.toString(),vault:{A:w.address.mintAVault.toString(),B:w.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:K({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}},Yu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,w=n.useSOLBalance&&e.mintA.address===j.toString(),A=n.useSOLBalance&&e.mintB.address===j.toString(),[k,I]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let B=t||await this.getClmmPoolKeys(e.id),M=await Se.openPositionFromBaseInstructions({poolInfo:e,poolKeys:B,ownerInfo:E(K({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(M),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:K({},M.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:r,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,w=n.useSOLBalance&&e.mintA.address===j.toBase58(),A=n.useSOLBalance&&e.mintB.address===j.toBase58(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});k&&(b=k),f.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});T&&(g=T),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=t||await this.getClmmPoolKeys(e.id),R=await Se.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:x,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:r,amountMaxB:i,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(R),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:R.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===j.toString(),g=c.useSOLBalance&&t.mintB.address===j.toString(),{account:w,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});w&&(y=w),p.addInstruction(A||{});let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(I||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=Se.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:r,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===j.toString(),b=a.useSOLBalance&&t.mintB.address===j.toString(),{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(r==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(w||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(r==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A&&(y=A),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),T=Se.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===j.toString(),f=i.useSOLBalance&&t.mintB.address===j.toString(),b,g,{account:w,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=w,A&&p.addInstruction(A);let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=k,I&&p.addInstruction(I);let T=[];for(let B of t.rewardDefaultInfos){let M=i.useSOLBalance&&B.mint.address===j.toString(),D;if(B.mint.address===t.mintA.address)D=b;else if(B.mint.address===t.mintB.address)D=g;else{let{account:V,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(B.mint.programId),mint:new ie(B.mint.address),notUseTokenAccount:M,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!M,associatedOnly:M?!1:u,checkCreateATAOwner:l});D=V,Z&&p.addInstruction(Z)}T.push(D)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await Se.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[F.ClmmDecreasePosition]});let R=K({},x.address);if(i.closePosition){let B=await Se.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});p.addInstruction({endInstructions:B.instructions,endInstructionTypes:B.instructionTypes}),R=K(K({},R),B.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:r}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Se.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===j.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(n.mint.address),mint:new ie(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new O(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:r,checkCreateATAOwner:i});d&&c.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 ie(n.mint.programId),mint:new ie(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===j.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new O(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Se.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ie(m.mint.programId),mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=K(K({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(j),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new O(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:r,checkCreateATAOwner:i});m&&c.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:ne.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===j.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new O(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Se.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});u.addInstruction(b),l=K(K({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(j),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:r,checkCreateATAOwner:i});l&&a.addInstruction(l),u||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:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(j),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:r,checkCreateATAOwner:i});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:c});s.addInstruction(y),a=K(K({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:r,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=c.useSOLBalance&&e.mintA.address===j.toBase58(),g=c.useSOLBalance&&e.mintB.address===j.toBase58(),w;!s||s.equals(new O(0))?w=f?Pt.add(new dt(1)):ht.sub(new dt(1)):w=ee.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let k;if(!k){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:r}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=T,S&&y.addInstruction(S)}(!A||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Se.makeSwapBaseInInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k},inputMint:new ie(n),amountIn:r,amountOutMin:i,sqrtPriceLimitX64:w,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:r,amountInMax:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=c.useSOLBalance&&e.mintA.address===j.toBase58(),g=c.useSOLBalance&&e.mintB.address===j.toBase58(),w;!s||s.equals(new O(0))?w=n.toString()===e.mintB.address?Pt.add(new dt(1)):ht.sub(new dt(1)):w=ee.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?i:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let k;if(!k){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=T,S&&y.addInstruction(S)}(!A||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Se.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k},outputMint:new ie(n),amountOut:r,amountInMax:i,sqrtPriceLimitX64:w,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)r?we(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(u[m.accountInfo.mint.toString()]=m.pubkey):u[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(A=>!A.liquidity.isZero()||A.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===j.toString(),y=n.useSOLBalance&&d.mintB.address===j.toString(),f=u[d.mintA.address];if(!f){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ie(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:i});f=A,k&&l.addInstruction(k)}let b=u[d.mintB.address];if(!b){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ie(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:i});b=A,k&&l.addInstruction(k)}u[d.mintA.address]=f,u[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let k=n.useSOLBalance&&A.mint.address===j.toString(),I=u[A.mint.address];if(!I){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(A.mint.programId),mint:new ie(A.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});I=T,S&&l.addInstruction(S)}u[A.mint.address]=I,g.push(I)}let w=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let k=Se.decreaseLiquidityInstructions({poolInfo:d,poolKeys:w,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(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:c}):l.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Co(e).publicKey);return t?ec.decode(t.data).whitelistMints.filter(r=>!r.equals(ie.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=>At(new ie(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=Vr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await We(this.scope.connection,e.map(i=>({pubkey:new ie(i)})),t),r={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=In.decode(s.accountInfo.data),c=ee.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[i])]=E(K({},a),{currentPrice:c,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),r=await We(this.scope.connection,Array.from(n).map(c=>({pubkey:new ie(c)}))),i={};r.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=$u.decode(c.accountInfo.data))});let s=await Ce.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:it({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||cc.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?cn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:it({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||cc.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?cn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:E(K({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ce.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),r=await Vn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ie(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await We(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=Hu(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(uc.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(uc.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=E(K({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:c.config});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as jr,TOKEN_PROGRAM_ID as Yt,AccountLayout as af}from"@solana/spl-token";import Ns from"bn.js";import mc from"bn.js";var Ls=new mc(1e6);function Qp(o,e,t){return o.mul(e).add(t).sub(new mc(1)).div(t)}function lc(o,e,t){return o.mul(e).div(t)}var Wr=class{static tradingFee(e,t){return Qp(e,t,Ls)}static protocolFee(e,t){return lc(e,t,Ls)}static fundFee(e,t){return lc(e,t,Ls)}};import Fo from"bn.js";function qr(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function Yp(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=qr(o,e);return n.gt(Yn)&&(t=t.add(new Fo(1)),e=o.div(t),n=qr(o,t),n.gt(Yn)&&(e=e.add(new Fo(1)))),[t,e]}var Yn=new Fo(0),Ur=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=Yp(r,i),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,r,i){let s=e.mul(n).div(t),a=e.mul(r).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return qr(e.mul(n),t).gt(Yn)&&s.gt(Yn)&&(s=s.add(new Fo(1))),qr(e.mul(r),t).gt(Yn)&&a.gt(Yn)&&(a=a.add(new Fo(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Gr from"decimal.js-light";var dc=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(dc||{}),Xr=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,r){let i=Wr.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Ur.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:r,quoteReserve:i,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[r,i,e.decimals,t.decimals,e.address]:[i,r,t.decimals,e.decimals,t.address],p=new Gr(u.toString()).div(10**m).div(new Gr(c.toString()).div(10**l)),y=a.gte(u)?u.sub(new Ns(1)):a,f=u.sub(y),b=St(c.mul(y),f),g=St(b.mul(new Ns(1e6)),new Ns(1e6).sub(n)),w=g.sub(b),A=new Gr(y.toString()).div(10**m).div(new Gr(g.toString()).div(10**l)),k=p.isZero()?0:A.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:w,priceImpact:k}}};var jp=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Hp=Buffer.from("amm_config","utf8"),Zp=Buffer.from("pool","utf8"),$p=Buffer.from("pool_lp_mint","utf8"),Jp=Buffer.from("pool_vault","utf8"),ef=Buffer.from("observation","utf8");function jn(o){return ue([jp],o)}function HB(o,e){return ue([Hp,of(e)],o)}function tf(o,e,t,n){return ue([Zp,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function nf(o,e){return ue([$p,e.toBuffer()],o)}function pc(o,e,t){return ue([Jp,e.toBuffer(),t.toBuffer()],o)}function zr(o,e){return ue([ef,e.toBuffer()],o)}function of(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function fc({programId:o,configId:e,mintA:t,mintB:n}){let r=jn(o).publicKey,i=tf(o,e,t,n).publicKey,s=nf(o,i).publicKey,a=pc(o,i,t).publicKey,c=pc(o,i,n).publicKey,u=zr(o,i).publicKey;return{poolId:i,configId:e,authority:r,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as Eo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ms,TOKEN_2022_PROGRAM_ID as yc,ASSOCIATED_TOKEN_PROGRAM_ID as rf}from"@solana/spl-token";var sf=ce("Raydium_cpmm"),Do={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 bc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A){let k=_([h("amountMaxA"),h("amountMaxB"),h("openTime")]),I=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Ms,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:rf,isSigner:!1,isWritable:!1},{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:w,openTime:A},T),new Eo({keys:I,programId:o,data:Buffer.from([...Do.initialize,...T])})}function gc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([h("lpAmount"),h("amountMaxA"),h("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Ms,isSigner:!1,isWritable:!1},{pubkey:yc,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return sf.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Eo({keys:b,programId:o,data:Buffer.from([...Do.deposit,...g])})}function Ac(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([h("lpAmount"),h("amountMinA"),h("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Ms,isSigner:!1,isWritable:!1},{pubkey:yc,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:rr,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Eo({keys:b,programId:o,data:Buffer.from([...Do.withdraw,...g])})}function Qr(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=_([h("amountIn"),h("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],w=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},w),new Eo({keys:g,programId:o,data:Buffer.from([...Do.swapBaseInput,...w])})}function wc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=_([h("amountInMax"),h("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],w=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},w),new Eo({keys:g,programId:o,data:Buffer.from([...Do.swapBaseOutput,...w])})}import ve from"bn.js";var Pc=_([ge(8),W("bump"),je("disableCreatePool"),qt("index"),h("tradeFeeRate"),h("protocolFeeRate"),h("fundFeeRate"),h("createPoolFee"),C("protocolOwner"),C("fundOwner"),X(h(),16)]),Yr=_([ge(8),C("configId"),C("poolCreator"),C("vaultA"),C("vaultB"),C("mintLp"),C("mintA"),C("mintB"),C("mintProgramA"),C("mintProgramB"),C("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),h("lpAmount"),h("protocolFeesMintA"),h("protocolFeesMintB"),h("fundFeesMintA"),h("fundFeesMintB"),h("openTime"),X(h(),32)]);var Wo=class extends Ke{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 We(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),r={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Yr.decode(d.accountInfo.data);r[String(e[m])]=E(K({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await We(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Pc.decode(y.data)}}let c={},u=await We(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new ve(af.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=E(K({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new O(y.toString()).div(new O(10).pow(d.mintDecimalB)).div(new O(p.toString()).div(new O(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var c,u,l,m;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return E(K({},n),{[r]:E(K({},i),{id:new z(r),configInfo:i.configInfo,version:7,authority:jn(i.programId).publicKey,mintA:it({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?cn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:it({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?cn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Vn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),r=it({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?cn(n[t.mintA.toBase58()].feeConfig):void 0}}),i=it({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?cn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=it({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Yt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:r,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new O(t.vaultAAmount.toString()).div(10**r.decimals).toNumber(),mintAmountB:new O(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:r,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:jn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(m){var d=m,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,feeConfig:c,computeBudgetConfig:u}=d,l=Oe(d,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var V,Z,G;let p=r.feePayer||((V=this.scope.owner)==null?void 0:V.publicKey),y=new ve(new z(l.mintA.address).toBuffer()).lte(new ve(new z(l.mintB.address).toBuffer())),[f,b]=y?[l.mintA,l.mintB]:[l.mintB,l.mintA],[g,w]=y?[l.mintAAmount,l.mintBAmount]:[l.mintBAmount,l.mintAAmount],A=r.useSOLBalance&&f.address===jr.toBase58(),k=r.useSOLBalance&&b.address===jr.toBase58(),[I,T]=[new z(f.address),new z(b.address)],S=this.createTxBuilder(),{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:I,tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:p,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:i,checkCreateATAOwner:s});S.addInstruction(R||{});let{account:B,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({mint:new z(b.address),tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:p,amount:w}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:i,checkCreateATAOwner:s});if(S.addInstruction(M||{}),x===void 0||B===void 0)throw Error("you don't has some token account");let D=fc({programId:e,configId:new z(c.id),mintA:I,mintB:T});return S.addInstruction({instructions:[bc(e,this.scope.ownerPubKey,new z(c.id),D.authority,D.poolId,I,T,D.lpMint,x,B,we(this.scope.ownerPubKey,D.lpMint).publicKey,D.vaultA,D.vaultB,t,new z((Z=f.programId)!=null?Z:Yt),new z((G=b.programId)!=null?G:Yt),D.observationId,g,w,n)],instructionTypes:[F.CpmmCreatePool]}),S.addCustomComputeBudget(u),S.versionBuild({txVersion:a,extInfo:{address:E(K({},D),{mintA:f,mintB:b,programId:e,poolFeeAccount:t,feeConfig:c})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:r,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=K({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:E(K({},t),{lpAmount:new O(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Me(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new O(r.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),w=g.amount,A=t.mintA.address===jr.toString(),k=t.mintB.address===jr.toString(),I=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(i?r:w).isZero()?{payer:this.scope.ownerPubKey,amount:i?r:w}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(R||{});let{account:B,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?w:r).isZero()?{payer:this.scope.ownerPubKey,amount:i?w:r}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(M||{}),!x&&!B&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let D=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),ot=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:D,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:V}=ot,Z=Oe(ot,["tokenAccount"]);I.addInstruction(Z);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Me(new ve(1)).sub(s);return I.addInstruction({instructions:[gc(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),V,x,B,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,i?b.amount:w,i?w:b.amount)],instructionTypes:[F.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),I.addCustomComputeBudget(c),I.versionBuild({txVersion:l})}async withdrawLiquidity(e){var V,Z;let{poolInfo:t,poolKeys:n,lpAmount:r,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Me(new ve(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(r.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(r.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[be(l,t.mintA.extensions.feeConfig,d,!1),be(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,w]=[new z(t.mintA.address),new z(t.mintB.address)],A=g.equals(j),k=w.equals(j),I,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});I=S,x&&b.addInstruction(x);let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,B&&b.addInstruction(B),(!I||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let M=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});M||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let D=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Ac(new z(t.programId),this.scope.ownerPubKey,new z(D.authority),new z(t.id),M,I,T,new z(D.vault.A),new z(D.vault.B),g,w,new z(t.lpMint.address),r,l.sub((V=p.fee)!=null?V:new ve(0)),m.sub((Z=y.fee)!=null?Z:new ve(0)))],instructionTypes:[F.CpmmWithdrawLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var R,B,M,D,V,Z;let{poolInfo:t,poolKeys:n,baseIn:r,fixedOut:i,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=K({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)];i?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new ve((1+c)*1e4)).div(new ve(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new ve((1-c)*1e4)).div(new ve(1e4));let w=t.mintA.address===j.toBase58(),A=t.mintB.address===j.toBase58(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new z((R=t.mintA.programId)!=null?R:Yt),owner:this.scope.ownerPubKey,createInfo:w||!r?{payer:this.scope.ownerPubKey,amount:r?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:y,checkCreateATAOwner:p});I&&f.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((B=t.mintB.programId)!=null?B:Yt),owner:this.scope.ownerPubKey,createInfo:A||r?{payer:this.scope.ownerPubKey,amount:r?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!k||!T)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:k,mintBTokenAcc:T,mintAUseSOLBalance:w,mintBUseSOLBalance:A,associatedOnly:y});let x=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[i?wc(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),r?k:T,r?T:k,new z(x.vault[r?"A":"B"]),new z(x.vault[r?"B":"A"]),new z((V=t[r?"mintA":"mintB"].programId)!=null?V:Yt),new z((Z=t[r?"mintB":"mintA"].programId)!=null?Z:Yt),r?b:g,r?g:b,zr(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Qr(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),r?k:T,r?T:k,new z(x.vault[r?"A":"B"]),new z(x.vault[r?"B":"A"]),new z((M=t[r?"mintA":"mintB"].programId)!=null?M:Yt),new z((D=t[r?"mintB":"mintA"].programId)!=null?D:Yt),r?b:g,r?g:b,zr(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[i?F.CpmmSwapBaseOut:F.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=Xr.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new O(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new ve((1-r)*1e4)).div(new ve(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:r,slippage:i,epochInfo:s,baseIn:a}){var w,A,k,I,T,S,x,R;let c=1-Number(i.toSignificant())/100,u=new ve(new O(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=be(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((w=l.fee)!=null?w:new ve(0)),d=new ve(new O(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(A=l.fee)==null?void 0:A.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:De,fee:void 0,expirationTime:void 0};if(!m.isZero()){let B=uf(y,t,n,d);this.logDebug("lpAmountData:",{amountA:B.amountA.toString(),amountB:B.amountB.toString()}),f=be(B[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Me(new ve(1)).add(i),g=be(b.mul(f.amount.sub((I=f.fee)!=null?I:new ve(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function uf(o,e,t,n){let r=o.mul(e).div(n);!r.isZero()&&!o.mul(e).mod(n).isZero()&&(r=r.add(new ve(1)));let i=o.mul(t).div(n);return!i.isZero()&&!o.mul(t).mod(n).isZero()&&(i=i.add(new ve(1))),{amountA:r,amountB:i}}import{PublicKey as Kn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Re,TOKEN_2022_PROGRAM_ID as $r,createTransferInstruction as xc}from"@solana/spl-token";import Jr from"bn.js";import{TOKEN_PROGRAM_ID as _s,TOKEN_2022_PROGRAM_ID as cf,ASSOCIATED_TOKEN_PROGRAM_ID as lf}from"@solana/spl-token";import{PublicKey as Q,TransactionInstruction as vs,SystemProgram as Vs}from"@solana/web3.js";import Sn from"bn.js";function Jx(o,e,t,n,r,i,s,a,c,u,l,m){let d=_([W("instruction"),h("amountIn"),h("amountOut")]),p=[{pubkey:Vs.programId,isSigner:!1,isWritable:!1},{pubkey:_s,isSigner:!1,isWritable:!1},{pubkey:new Q(t.programId),isSigner:!1,isWritable:!1},{pubkey:new Q(t.id),isSigner:!1,isWritable:!0},{pubkey:new Q(n.id),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=Ie(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new Q("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new vs({keys:p,programId:o,data:y})}function eS(o,e,t,n,r,i,s,a,c,u){let l=_([W("instruction")]),m=[{pubkey:Vs.programId,isSigner:!1,isWritable:!1},{pubkey:_s,isSigner:!1,isWritable:!1},{pubkey:new Q(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new Q(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new Q(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=Ie(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=Ie(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new Q("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=Ie(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 vs({keys:m,programId:o,data:d})}function mf(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[P({pubkey:_s,isWritable:!1}),P({pubkey:cf,isWritable:!1}),P({pubkey:lf,isWritable:!1}),P({pubkey:Vs.programId,isWritable:!1}),P({pubkey:e,isSigner:!0})];b.push(P({pubkey:t})),b.push(P({pubkey:r}));let g=[c,u],w=[l,m],A=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=A[S]===x.mintA.address;if(b.push(P({pubkey:new Q(x.programId),isWritable:!1})),S===g.length-1?b.push(P({pubkey:r})):b.push(P({pubkey:n})),b.push(P({pubkey:new Q(A[S])})),b.push(P({pubkey:new Q(A[S+1])})),x.version===6){let B=w[S];b.push(P({pubkey:new Q(B.config.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(R?B.vault.A:B.vault.B)})),b.push(P({pubkey:new Q(R?B.vault.B:B.vault.A)})),b.push(P({pubkey:new Q(x.observationId)})),b.push(P({pubkey:rr})),b.push(P({pubkey:mt(new Q(x.programId),new Q(x.id)).publicKey})),f.push(df(x.sqrtPriceX64.toString(),R));for(let M of(T=y[S])!=null?T:[])b.push(P({pubkey:new Q(M)}))}else if(x.version===5){let B=w[S];b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.authority),isWritable:!1})),b.push(P({pubkey:new Q(B.marketProgramId)})),b.push(P({pubkey:new Q(B.marketAuthority)})),b.push(P({pubkey:Va,isWritable:!1})),b.push(P({pubkey:new Q(B.openOrders)})),b.push(P({pubkey:new Q(B.vault.A)})),b.push(P({pubkey:new Q(B.vault.B)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.marketId)})),b.push(P({pubkey:new Q(B.marketBids)})),b.push(P({pubkey:new Q(B.marketAsks)})),b.push(P({pubkey:new Q(B.marketEventQueue)})),b.push(P({pubkey:new Q(B.marketBaseVault)})),b.push(P({pubkey:new Q(B.marketQuoteVault)}))}else if(x.version===4){let B=w[S],M=x.status!==1;b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.authority),isWritable:!1})),b.push(P({pubkey:new Q(M?B.id:B.marketProgramId)})),b.push(P({pubkey:new Q(M?B.id:B.marketAuthority)})),b.push(P({pubkey:new Q(M?B.id:B.openOrders)})),b.push(P({pubkey:new Q(B.vault.A)})),b.push(P({pubkey:new Q(B.vault.B)})),b.push(P({pubkey:new Q(M?B.id:B.marketId)})),b.push(P({pubkey:new Q(M?B.id:B.marketBids)})),b.push(P({pubkey:new Q(M?B.id:B.marketAsks)})),b.push(P({pubkey:new Q(M?B.id:B.marketEventQueue)})),b.push(P({pubkey:new Q(M?B.id:B.marketBaseVault)})),b.push(P({pubkey:new Q(M?B.id:B.marketQuoteVault)}))}else if(x.version===7){let B=w[S];b.push(P({pubkey:new Q(B.authority)})),b.push(P({pubkey:new Q(B.config.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(R?B.vault.A:B.vault.B)})),b.push(P({pubkey:new Q(R?B.vault.B:B.vault.A)})),b.push(P({pubkey:new Q(x.observationId)}))}else throw Error("pool type error")}let k=_([W("insId"),h("amountIn"),h("amountOut"),X(J(),f.length,"clmmPriceLimit")]),I=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},I),new vs({keys:b,programId:o,data:I})}function df(o,e){if(o)if(e){let t=new Sn(o).div(new Sn(25));return t.gt(Mr)?t:Mr}else{let t=new Sn(o).mul(new Sn(25));return t.lt(_r)?t:_r}else return e?Mr:_r}function hc({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var r,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ie(m),p=t.equals(d.mintA.address)?Pt.add(yt):ht.sub(yt);return Se.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?i:new Sn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Qr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new Q(m[d?"mintA":"mintB"].address),new Q(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?F.CpmmSwapBaseIn:F.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[Rr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new Sn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?F.AmmV5SwapBaseIn:F.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[mf(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new Sn(0)),n.remainingAccounts)],instructionTypes:[F.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var kc={[Ar.toBase58()]:3},Tc={3:Ar};var Fs=_([ge(5),ge(8),C("ownAddress"),h("vaultSignerNonce"),C("baseMint"),C("quoteMint"),C("baseVault"),h("baseDepositsTotal"),h("baseFeesAccrued"),C("quoteVault"),h("quoteDepositsTotal"),h("quoteFeesAccrued"),h("quoteDustThreshold"),C("requestQueue"),C("eventQueue"),C("bids"),C("asks"),h("baseLotSize"),h("quoteLotSize"),h("feeRateBps"),h("referrerRebatesAccrued"),ge(7)]),Ic={3:Fs};import{PublicKey as Bc}from"@solana/web3.js";var Hr=ce("Serum"),Zr=class{static getProgramId(e){let t=Tc[e];return t||Hr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=kc[t];return n||Hr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Ic[e];return t||Hr.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()],r=0,i;for(;r<100;){try{let s=n.concat(Buffer.from([r]),Buffer.alloc(7));i=Bc.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return Hr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Bc.default,nonce:r}}};var jt=new Jr(0),qo=class extends Ke{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(j));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:r=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Y(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[vt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[vt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),po({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:r})}async wrapWSol(e,t,n){let r=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),r.length&&i.addInstruction({instructions:[po({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[vt({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:r,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(j),m=u.amount.token.mint.equals(j),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?$r:Re,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?$r:Re);else{let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?$r:Re,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=k,I&&a.addInstruction(I)}m&&a.addInstruction({endInstructions:[vt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Re})],endInstructionTypes:[F.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?$r:Re)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=hc({routeProgram:i,inputMint:d,swapInfo:E(K({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[xc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]}),k.addInstruction(A);let{transactions:I}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();I.length<2&&a.addInstruction({instructions:[xc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]})}return a.addInstruction(A),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=Oi,clmm:n=Li,cpmm:r=Ni}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:So.offsetOf("baseMint"),length:64}}),s=_([C("baseMint"),C("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=_([C("mintA"),C("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:In.span}],dataSlice:{offset:In.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(r,{dataSlice:{offset:Yr.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:r,cpmmPools:i}){e=e.toString()===Kn.default.toString()?j:e,t=t.toString()===Kn.default.toString()?j:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let r=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Dr(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new Kn(f.mintA.address),programId:Re,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},r.delete(f.mintB.address),a[f.mintB.address]={address:new Kn(f.mintB.address),programId:Re,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Re)?(r.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(b),f.mintProgramB.equals(Re)?(r.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(g)}),console.log("fetching mints info, total: ",r.size);let u=await Vn({connection:this.scope.connection,mints:Array.from(r).map(f=>new Kn(f))});a=K(K({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>E(K({},f),{[b]:E(K({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:r,simulateCache:i,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,w,A,k,I,T,S,x,R;let m=l===void 0?new Jr(0):e.raw.mul(new Jr(l.feeBps.toNumber())).div(new Jr(1e4)),d=e.raw.sub(m),p=new fe(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=E(K({},t),{address:pt(t.address).toString()}),b=[];for(let B of n)try{b.push(E(K({},this.computeAmountOut({itemPool:B,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(M){this.logDebug("direct error",B.version,B.id.toString(),M.message)}this.logDebug("direct done");for(let[B,M]of Object.entries(r)){let D={chainId:101,address:B,programId:M.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:M.mDecimals,tags:[],extensions:{}},V=M.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:D,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var mn,Ht,On,Ft;let ot=G===void 0?jt:G.data.amountOut.amount.raw.sub((Ht=(mn=G.data.amountOut.fee)==null?void 0:mn.raw)!=null?Ht:jt),Rn=q===void 0?jt:q.data.amountOut.amount.raw.sub((Ft=(On=q.data.amountOut.fee)==null?void 0:On.raw)!=null?Ft:jt);return ot.lt(Rn)?1:-1})[0];if(V===void 0)continue;let Z=new fe(Cr(D),V.data.amountOut.amount.raw.sub((w=(g=V.data.amountOut.fee)==null?void 0:g.raw)!=null?w:jt));for(let G of M.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:Z});b.push(E(K({},q),{allTrade:!!(V.data.allTrade&&q.allTrade),amountIn:V.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new O(new Ue({baseToken:V.data.amountIn.amount.token,denominator:V.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((k=(A=q.amountOut.fee)==null?void 0:A.raw)!=null?k:jt)}).toFixed()),priceImpact:new O(V.data.priceImpact.add(q.priceImpact).toFixed()),fee:[V.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[V.pool,G],remainingAccounts:[V.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(I=q.amountOut.fee)!=null&&I.raw?new fe(V.data.amountOut.amount.token,((S=(T=V.data.amountOut.fee)==null?void 0:T.raw)!=null?S:jt).add((R=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?R:jt)):void 0,middleToken:V.data.amountOut.amount.token,poolReady:V.data.poolReady&&q.poolReady,poolType:[V.data.poolType,q.poolType],feeConfig:y,expirationTime:Kt(V.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(B=>(B.allTrade||this.logDebug(`pool ${B.poolInfoList.map(M=>M.id.toString()).join(",")} filter out since not all trade`),B.allTrade)).sort((B,M)=>B.amountOut.amount.raw.sub(M.amountOut.amount.raw).gt(jt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,epochInfo:i,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:w,executionPriceX64:A}=Ce.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new O(y.toFixed()),executionPrice:new O(f.toFixed()),priceImpact:new O(b.toFixed()),fee:[g],remainingAccounts:[w],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:Kt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:xo(E(K({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xo(E(K({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new fe(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<r,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:xo(E(K({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xo(E(K({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new fe(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<r,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let r=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(r.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(r));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await We(this.scope.connection,Array.from(s).map(l=>({pubkey:new Kn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Fs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Zr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:E(K({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=K({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Os({programId:new Kn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:jn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:it({address:u.mintLp.toBase58(),programId:Re.toBase58(),decimals:u.lpDecimals}),config:E(K({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{TOKEN_PROGRAM_ID as pf}from"@solana/spl-token";import{PublicKey as ff,Transaction as Es,TransactionInstruction as yf}from"@solana/web3.js";import Sc from"bn.js";var nt=class extends Ke{static getPdaPoolId(e,t){return ue([nt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return ue([nt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Sc(r).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:r,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>nt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<nt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>nt.getPdaOwnerId(t,m,r,l).publicKey));let c=await Bt(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==nt.POOL_LAYOUT.span||b.data.length!==nt.OWNER_LAYOUT.span)continue;let g=nt.POOL_LAYOUT.decode(f.data),w=nt.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),k=g.endTime.toNumber(),I=w.tokenInfo.map(x=>x.debtAmount.gt(new Sc(0))).filter(x=>!x).length!==3,T=i>A&&i<k&&g.status===1,S=I&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:w.lpAmount,project:nt.VERSION_PROJECT[m],openTime:A,endTime:k,canClaim:S,canClaimErrorType:I?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:w.tokenInfo[R].debtAmount.add(w.tokenInfo[R].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(ye.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!c.mintAddress.equals(ye.WSOL.mint),associatedOnly:c.mintAddress.equals(ye.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(ye.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(ye.WSOL.mint),associatedOnly:m.mintAddress.equals(ye.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:r,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return fr(c,[r,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new Es().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new Es().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new Es().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=_([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:pf,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new yf({keys:i,programId:e,data:a})}},kt=nt;kt.CLAIMED_NUM=3,kt.POOL_LAYOUT=_([ge(8),W("bump"),W("status"),h("openTime"),h("endTime"),C("ammId"),X(_([W("mintDecimals"),C("mintAddress"),C("mintVault"),h("perLpLoss"),h("totalClaimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),X(h(),10,"padding")]),kt.OWNER_LAYOUT=_([ge(8),W("bump"),W("version"),C("poolId"),C("owner"),h("lpAmount"),X(_([C("mintAddress"),h("debtAmount"),h("claimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),X(h(),4,"padding")]),kt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new ff(e)),kt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},kt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Uo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Lc}from"@solana/spl-token";import Go from"bn.js";import{TransactionInstruction as gf,SYSVAR_RENT_PUBKEY as Af}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kc}from"@solana/spl-token";import{createInitializeAccountInstruction as Cc}from"@solana/spl-token";import{SystemProgram as Cn,Transaction as Rc}from"@solana/web3.js";function bf(o="accountFlags"){let e=new Tr(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Ds=_([ge(5),bf("accountFlags"),C("ownAddress"),h("vaultSignerNonce"),C("baseMint"),C("quoteMint"),C("baseVault"),h("baseDepositsTotal"),h("baseFeesAccrued"),C("quoteVault"),h("quoteDepositsTotal"),h("quoteFeesAccrued"),h("quoteDustThreshold"),C("requestQueue"),C("eventQueue"),C("bids"),C("asks"),h("baseLotSize"),h("quoteLotSize"),h("feeRateBps"),h("referrerRebatesAccrued"),ge(7)]);function wf({programId:o,marketInfo:e}){let t=_([W("version"),Ye("instruction"),h("baseLotSize"),h("quoteLotSize"),qt("feeRateBps"),h("vaultSignerNonce"),h("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:Af,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}:[]),r=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},r),new gf({keys:n,programId:o,data:r})}async function Oc({connection:o,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Rc,r=await o.getMinimumBalanceForRentExemption(165);n.add(Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:Kc}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:Kc}),Cc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Cc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new Rc;return i.add(Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(Ds.span),space:Ds.span,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),wf({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[F.CreateAccount,F.CreateAccount,F.InitAccount,F.InitAccount]},{transaction:i,signer:[],instructionTypes:[F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.InitMarket]}]}var Hn=class extends Ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:i,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,txVersion:u,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=ct({fromPublicKey:m,programId:i}),p=ct({fromPublicKey:m,programId:i}),y=ct({fromPublicKey:m,programId:i}),f=ct({fromPublicKey:m,programId:i}),b=ct({fromPublicKey:m,programId:i}),g=ct({fromPublicKey:m,programId:Lc}),w=ct({fromPublicKey:m,programId:Lc}),A=0,k=new Go(100);function I(){let D=new Go(0);for(;;)try{return{vaultOwner:Uo.createProgramAddressSync([d.publicKey.toBuffer(),D.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:D}}catch{if(D.iaddn(1),D.gt(new Go(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=I(),x=new Go(Math.round(10**e.decimals*n)),R=new Go(Math.round(n*10**t.decimals*r));if(x.eq(De))throw Error("lot size is too small");if(R.eq(De))throw Error("tick size or lot size is too small");let B=await Oc({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:d,baseMint:e.mint,quoteMint:t.mint,baseVault:g,quoteVault:w,vaultOwner:T,requestQueue:p,eventQueue:y,bids:f,asks:b,feeRateBps:A,quoteDustThreshold:k,vaultSignerNonce:S,baseLotSize:x,quoteLotSize:R,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c}}),M=this.createTxBuilder();M.addInstruction({instructions:B[0].transaction.instructions,signers:B[0].signer});for await(let D of B.slice(1,B.length))M.addInstruction({instructions:D.transaction.instructions,signers:D.signer,instructionTypes:D.instructionTypes});return u===0?M.sizeCheckBuildV0({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:w.publicKey,baseMint:new Uo(e.mint),quoteMin:new Uo(t.mint)}}):M.sizeCheckBuild({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:w.publicKey,baseMint:new Uo(e.mint),quoteMin:new Uo(t.mint)}})}};import{PublicKey as zo}from"@solana/web3.js";import{TransactionInstruction as qs,SYSVAR_CLOCK_PUBKEY as Pf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Us}from"@solana/spl-token";var Ws=_([W("instruction"),za("amount")]),Xo=_([W("instruction")]);function V0({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:Us,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:yi,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],r=Buffer.alloc(Ws.span);return Ws.encode({instruction:1,amount:Number(e)},r),new qs({keys:n,programId:o,data:r})}function ei({programId:o},e){let t=[{pubkey:Us,isSigner:!1,isWritable:!1},{pubkey:yi,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(Xo.span);return Xo.encode({instruction:2},n),new qs({keys:t,programId:o,data:n})}function Gs(o){let{poolConfig:e,userKeys:t,side:n}=o,r=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Xo.span);Xo.encode({instruction:2},s);let a=[{pubkey:Us,isWritable:!1,isSigner:!1},{pubkey:Pf,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new qs({programId:e.programId,keys:a,data:s})}import Nc from"bn.js";var hf={[co.IDO_PROGRAM_ID_V1.toString()]:1,[co.IDO_PROGRAM_ID_V2.toString()]:2,[co.IDO_PROGRAM_ID_V3.toString()]:3,[co.IDO_PROGRAM_ID_V4.toString()]:4},Zn=class extends Ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=hf[t.programId];a||this.logAndCreateError("invalid version",a);let c=Ie(t),[u,l]=[!new Nc(e.coin).isZero(),!new Nc(e.pc).isZero()],m=c.projectInfo.mint.address.equals(j),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:r});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(j),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:r});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[ei({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new zo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[ei({programId:new zo(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new zo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[ei({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new zo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new zo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[Gs(E(K({},g),{side:"base"}))]:[],...l?[Gs(E(K({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as kf}from"@solana/web3.js";import{MintLayout as Tf,TOKEN_2022_PROGRAM_ID as Xs,TOKEN_PROGRAM_ID as zs}from"@solana/spl-token";var Qo=class extends Ke{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:r="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Mt.address,Mt),this._mintGroup.official.add(Mt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,E(K({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,E(K({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Xs.toBase58():zs.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,E(K({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Xs.toBase58():zs.toBase58(),mintAuthority:u.mintAuthority})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,E(K({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Xs.toBase58():zs.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),r=this._tokenMap.get(n);if(r)return r;if(n.toLocaleUpperCase()==="SOL")return Mt;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,E(K({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new kf(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Tf.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var ti=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new xt(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ce("Raydium"),this.farm=new Bo({scope:this,moduleName:"Raydium_Farm"}),this.account=new fo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new vo({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Qo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new qo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Vo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Wo({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new kt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Hn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Zn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=If({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,c=new Pr({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),u=new ti(E(K({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(hr);return this._owner.publicKey}setOwner(e){return this._owner=e?new xt(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(qa);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(hr),new Error(hr)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(r=>E(K({},r),{mintAuthority:r.mint_authority||void 0,freezeAuthority:r.freezeAuthority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var EK=o=>o;export{Qb as ACCOUNT_TYPE_SIZE,wg as ALL_PROGRAM_ID,Ip as AMM_CONFIG_SEED,dm as AMM_STABLE,Oi as AMM_V4,qf as ANAMint,Ne as API_URLS,am as AccountType,Pr as Api,Gu as BIT_PRECISION,St as BNDivCeil,gn as BNLayout,Hy as BN_100,Zy as BN_1000,$y as BN_10000,jy as BN_FIVE,Pa as BN_ONE,pn as BN_TEN,Yy as BN_THREE,Qy as BN_TWO,De as BN_ZERO,KA as BitStructure,Xa as Blob,Li as CLMM_PROGRAM_ID,yi as CLOCK_PROGRAM_ID,Am as CREATE_CPMM_POOL_AUTH,wm as CREATE_CPMM_POOL_FEE_ACC,Ni as CREATE_CPMM_POOL_PROGRAM,Vo as Clmm,$u as ClmmConfigLayout,Se as ClmmInstrument,Ur as ConstantProductCurve,Pc as CpmmConfigInfoLayout,Wr as CpmmFee,Yr as CpmmPoolInfoLayout,no as Currency,fn as CurrencyAmount,Xr as CurveCalculator,Pg as DEVNET_PROGRAM_ID,Qg as DEV_API_URLS,hm as DEV_CREATE_CPMM_POOL_AUTH,km as DEV_CREATE_CPMM_POOL_FEE_ACC,Pm as DEV_CREATE_CPMM_POOL_PROGRAM,cp as DataElement,Uf as ETHMint,Is as EXTENSION_TICKARRAY_BITMAP_SIZE,pu as FARM_LOCK_MINT,fu as FARM_LOCK_VAULT,Ci as FARM_PROGRAM_ID_V3,Ri as FARM_PROGRAM_ID_V5,Fn as FARM_PROGRAM_ID_V6,gt as FARM_PROGRAM_TO_VERSION,bu as FARM_VERSION_TO_LEDGER_LAYOUT,yu as FARM_VERSION_TO_STATE_LAYOUT,Ag as FEE_DESTINATION_ID,vr as FEE_RATE_DENOMINATOR,Ls as FEE_RATE_DENOMINATOR_VALUE,Np as FETCH_TICKARRAY_COUNT,Lp as Fee,re as Fraction,co as IDO_ALL_PROGRAM,fm as IDO_PROGRAM_ID_V1,ym as IDO_PROGRAM_ID_V2,bm as IDO_PROGRAM_ID_V3,gm as IDO_PROGRAM_ID_V4,ir as INSTRUCTION_PROGRAM_ID,F as InstructionType,Fa as JupTokenType,Fr as LIQUIDITY_FEES_DENOMINATOR,Ks as LIQUIDITY_FEES_NUMERATOR,Va as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,Dp as LIQUIDITY_VERSION_TO_SERUM_VERSION,ik as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Xu as LOG_B_2_X32,zu as LOG_B_P_ERR_MARGIN_LOWER_X64,Qu as LOG_B_P_ERR_MARGIN_UPPER_X64,br as LOOKUP_TABLE_CACHE,lo as Layout,le as LiquidityMath,Fc as LogLevel,ri as Logger,Ds as MARKET_STATE_LAYOUT_V2,Fs as MARKET_STATE_LAYOUT_V3,Ic as MARKET_VERSION_TO_STATE_LAYOUT,Sa as MAX_BASE64_SIZE,ht as MAX_SQRT_PRICE_X64,_r as MAX_SQRT_PRICE_X64_SUB_ONE,st as MAX_TICK,or as MEMO_PROGRAM_ID,rr as MEMO_PROGRAM_ID2,_n as METADATA_PROGRAM_ID,Pt as MIN_SQRT_PRICE_X64,Mr as MIN_SQRT_PRICE_X64_ADD_ONE,et as MIN_TICK,Xn as MODEL_DATA_PUBKEY,Zr as Market,ne as MathUtil,Ts as MaxU64,Uu as MaxUint128,zt as NEGATIVE_ONE,Wf as NRVMint,Op as OBSERVATION_SEED,yt as ONE,mm as OPEN_BOOK_PROGRAM,Cp as OPERATION_SEED,Ju as ObservationInfoLayout,vp as ObservationLayout,ec as OperationLayout,Di as OptionLayout,xt as Owner,Mf as PAIMint,Sp as POOL_REWARD_VAULT_SEED,Bp as POOL_SEED,Rp as POOL_TICK_ARRAY_BITMAP_SEED,xp as POOL_VAULT_SEED,Eu as POSITION_SEED,Me as Percent,Ea as PoolFetchType,In as PoolInfoLayout,Ce as PoolUtils,Vr as PositionInfoLayout,Fp as PositionRewardInfoLayout,No as PositionUtils,Ue as Price,UT as ProtocolPositionLayout,Nr as Q128,bt as Q64,Nf as RAYMint,ut as RENT_PROGRAM_ID,ti as Raydium,Vp as RewardInfo,dc as RoundDirection,wi as Rounding,pm as Router,kc as SERUM_PROGRAMID_TO_VERSION,Ar as SERUM_PROGRAM_ID_V3,Tc as SERUM_VERSION_TO_PROGRAMID,Da as SESSION_KEY,Fe as SOLMint,Mt as SOL_INFO,Nh as SPL_MINT_LAYOUT,_f as SRMMint,Mi as STORAGE_KEY,sr as SYSTEM_PROGRAM_ID,ee as SqrtPriceMath,Gn as StableLayout,Wi as Structure,Tn as SwapMath,kn as TICK_ARRAY_BITMAP_SIZE,Kp as TICK_ARRAY_SEED,qe as TICK_ARRAY_SIZE,Lk as TICK_SPACINGS,Ee as TOKEN_WSOL,Qt as TickArrayBitmap,Zu as TickArrayBitmapExtensionLayout,Lo as TickArrayBitmapExtensionUtils,Oo as TickArrayLayout,Ep as TickLayout,Bn as TickMath,me as TickQuery,H as TickUtils,ye as Token,fe as TokenAmount,gr as TxBuilder,yn as TxVersion,Ro as U64Resolution,Mk as U64_IGNORE_RANGE,Vi as UInt,vf as USDCMint,Df as USDHMint,Vf as USDTMint,lm as UTIL1216,qi as Union,mu as Voter,Gd as VoterDepositEntry,Ud as VoterLockup,lu as VoterRegistrar,qd as VoterVotingMintConfig,j as WSOLMint,Tr as WideBits,Ut as WrappedLayout,pe as ZERO,ba as _100_PERCENT,P as accountMeta,My as add,pr as addComputeBudget,bs as addLiquidityLayout,pw as array,Hi as associatedLedgerAccountLayout,Fi as bits,ge as blob,je as bool,cs as calFarmRewardAmount,Qp as ceilDiv,oo as checkLegacyTxSize,ro as checkV0TxSize,xi as chunkArray,Xo as claimLayout,Hu as clmmComputeInfoToApiInfo,vt as closeAccountInstruction,di as commonSystemAccountMeta,ho as createAssociatedLedgerAccountInstruction,ce as createLogger,Bu as createPoolFeeLayout,Mu as createPoolV4InstructionV2,rk as createPoolV4Layout,Gt as createWSolAccountInstructions,nw as cstr,Ay as currencyEquals,Ql as decimalToFraction,Ad as decodeBool,Ry as div,cr as divCeil,rt as dwLayout,wd as encodeBool,fA as endlessRetry,Gl as eq,ZA as f32,$A as f32be,JA as f64,ew as f64be,es as farmAddRewardLayout,AP as farmLedgerLayoutV3_1,bo as farmLedgerLayoutV3_2,wP as farmLedgerLayoutV5_1,uu as farmLedgerLayoutV5_2,cu as farmLedgerLayoutV6_1,Au as farmRewardInfoToConfig,$i as farmRewardLayout,Ji as farmRewardRestartLayout,Wd as farmRewardTimeInfoLayout,su as farmStateV3Layout,au as farmStateV5Layout,yo as farmStateV6Layout,GP as fetchMultipleFarmInfoAndUpdate,PI as fetchMultipleInfo,Vn as fetchMultipleMintInfos,ue as findProgramAddress,ps as fixedSwapInLayout,fs as fixedSwapOutLayout,lc as floorDiv,fr as forecastTransactionSize,wp as formatLayout,ct as generatePubKey,we as getATAAddress,gu as getAssociatedAuthority,Er as getAssociatedConfigId,Je as getAssociatedLedgerAccount,Ao as getAssociatedLedgerPoolAccount,Xp as getAssociatedOpenOrders,sc as getAssociatedPoolKeys,HB as getCpmmPdaAmmConfigId,tf as getCpmmPdaPoolId,fc as getCreatePoolKeys,Ma as getDate,ls as getDepositEntryIndex,Cu as getDxByDyBaseIn,Ku as getDyByDxBaseIn,Vb as getEpochInfo,Un as getFarmLedgerLayout,Xd as getFarmStateLayout,Os as getLiquidityAssociatedAuthority,xn as getLiquidityAssociatedId,wT as getLiquidityFromAmounts,Ny as getMax,Bt as getMultipleAccountsInfo,We as getMultipleAccountsInfoWithCustomFlags,Si as getMultipleLookupTableInfo,Ck as getPdaAmmConfigId,mt as getPdaExBitmapAccount,nf as getPdaLpMint,Lr as getPdaMetadataKey,qu as getPdaObservationAccount,zr as getPdaObservationId,Co as getPdaOperationAccount,At as getPdaPersonalPositionAddress,jn as getPdaPoolAuthority,Du as getPdaPoolId,Wu as getPdaPoolRewardVaulId,ks as getPdaPoolVaultId,hn as getPdaProtocolPositionAddress,he as getPdaTickArrayAddress,pc as getPdaVault,vn as getRecentBlockHash,os as getRegistrarAddress,Bm as getSessionKey,Ru as getStablePrice,cm as getTime,Bb as getTimestamp,us as getTokenOwnerRecordAddress,Sg as getTransferAmountFee,be as getTransferAmountFeeV2,ss as getVoterAddress,as as getVoterWeightRecordAddress,is as getVotingMintAuthority,rs as getVotingTokenMint,ep as governanceCreateTokenOwnerRecord,CA as greedy,Ul as gt,Cy as gte,$a as i128,Ik as i16ToBytes,Or as i32ToBytes,Dn as i64,Za as i8,ys as initPoolLayout,Yi as initTokenAccountInstruction,wf as initializeMarket,mg as intersection,va as isDateAfter,_a as isDateBefore,Yl as isDecimal,Ly as isMeaningfulNumber,Na as isNumber,ts as isValidFarmVersion,Ko as isZero,Ie as jsonInfo2PoolKeys,XP as judgeFarmType,Ps as leadingZeros,Fu as leastSignificantBit,So as liquidityStateV4Layout,ap as liquidityStateV5Layout,Sy as lt,Ky as lte,Ff as mSOLMint,Rr as makeAMMSwapInstruction,Nu as makeAddLiquidityInstruction,ds as makeAddNewRewardInstruction,ei as makeClaimInstruction,Gs as makeClaimInstructionV4,bc as makeCreateCpmmPoolInInstruction,wu as makeCreateFarmInstruction,Oc as makeCreateMarketInstruction,Pu as makeCreatorWithdrawFarmRewardInstruction,gc as makeDepositCpmmInInstruction,hu as makeDepositInstructionV3,ku as makeDepositInstructionV5,Tu as makeDepositInstructionV6,uh as makeDepositTokenInstruction,lh as makeDepositWithdrawInstruction,kk as makeInitPoolInstructionV4,V0 as makePurchaseInstruction,ms as makeRestartRewardInstruction,_u as makeSimulatePoolInfoInstruction,Qr as makeSwapCpmmBaseInInInstruction,wc as makeSwapCpmmBaseOutInInstruction,kp as makeSwapFixedInInstruction,Tp as makeSwapFixedOutInstruction,hc as makeSwapInstruction,po as makeTransferInstruction,Ac as makeWithdrawCpmmInInstruction,Io as makeWithdrawInstructionV3,To as makeWithdrawInstructionV5,ko as makeWithdrawInstructionV6,ch as makeWithdrawTokenInstruction,Kt as minExpirationTime,Nk as mockCreatePoolInfo,Yu as mockV3CreatePoolInfo,lp as modelDataInfoLayout,Vu as mostSignificantBit,ki as mul,Ti as notInnerObject,GA as ns64,HA as ns64be,za as nu64,FA as nu64be,Ei as offset,yg as offsetDateTime,uw as option,Y as parseBigNumberish,dn as parseNumberInfo,Ca as parseSimulateLogToJson,Wt as parseSimulateValue,iu as parseTokenAccountResp,Uh as parseTokenInfo,un as poolTypeV6,bn as printSimulate,C as publicKey,Ws as purchaseLayout,Fd as realFarmStateV3Layout,Ed as realFarmStateV5Layout,Dd as realFarmV6Layout,wa as recursivelyDecimalToFraction,ws as removeLiquidityInstruction,gs as removeLiquidityLayout,Jx as route1Instruction,eS as route2Instruction,mf as routeInstruction,dw as rustEnum,DA as s16,XA as s16be,WA as s24,zA as s24be,Qe as s32,QA as s32be,qA as s40,YA as s40be,UA as s48,jA as s48be,EA as s8,X as seq,Sf as setLoggerLevel,Xl as shakeFractionDecimal,Ka as simulateMultipleInstruction,hk as simulatePoolInfoInstruction,tm as simulateTransaction,Ta as sleep,pt as solToWSol,Xh as solToWSolToken,on as splAccountLayout,ka as splitNumber,Ef as stSOLMint,mw as str,_ as struct,Oy as sub,lw as tagged,Pi as tenExponential,Dr as toAmmComputePoolInfo,it as toApiV3Token,zl as toBN,Ra as toBuffer,cn as toFeeConfig,ha as toFraction,xy as toFractionWithDecimals,Jy as toPercent,Cr as toToken,xo as toTokenAmount,Gh as toTokenInfo,eb as toTokenPrice,tb as toTotalPrice,Aa as toUsdCurrency,hs as trailingZeros,Fb as transformTxToBase64,fi as tryParsePublicKey,nm as txToBase64,J as u128,qt as u16,vu as u16ToBytes,NA as u16be,RA as u24,MA as u24be,Ye as u32,Bk as u32ToBytes,_A as u32be,OA as u40,vA as u40be,LA as u48,VA as u48be,h as u64,W as u8,fw as union,EK as unionArr,tw as unionLayoutDiscriminator,pg as uniq,zd as updateFarmPoolInfo,wr as updateReqHistory,ow as utf8,pi as validateAndParsePublicKey,ns as validateFarmRewards,cw as vec,Pd as vecU8,np as voterStakeRegistryCreateDepositEntry,tp as voterStakeRegistryCreateVoter,Zd as voterStakeRegistryDeposit,$d as voterStakeRegistryUpdateVoterWeightRecord,Jd as voterStakeRegistryWithdraw,zh as wSolToSolToken,Zi as withdrawRewardLayout,dg as xor,yw as zeros};
1
+ var _c=Object.defineProperty,vc=Object.defineProperties;var Vc=Object.getOwnPropertyDescriptors;var jo=Object.getOwnPropertySymbols;var Hs=Object.prototype.hasOwnProperty,Zs=Object.prototype.propertyIsEnumerable;var js=(o,e,t)=>e in o?_c(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,K=(o,e)=>{for(var t in e||(e={}))Hs.call(e,t)&&js(o,t,e[t]);if(jo)for(var t of jo(e))Zs.call(e,t)&&js(o,t,e[t]);return o},E=(o,e)=>vc(o,Vc(e));var Oe=(o,e)=>{var t={};for(var n in o)Hs.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&jo)for(var n of jo(o))e.indexOf(n)<0&&Zs.call(o,n)&&(t[n]=o[n]);return t};import Wa from"axios";import{get as oi,set as $s}from"lodash";var Fc=(r=>(r[r.Error=0]="Error",r[r.Warning=1]="Warning",r[r.Info=2]="Info",r[r.Debug=3]="Debug",r))(Fc||{}),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 Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},ii={},Js={};function ce(o){let e=oi(ii,o);if(!e){let t=oi(Js,o);e=new ri({name:o,logLevel:t}),$s(ii,o,e)}return e}function Sf(o,e){$s(Js,o,e);let t=oi(ii,o);t&&(t.level=e)}import{PublicKey as Zl}from"@solana/web3.js";import $l from"bn.js";import jl from"big.js";import nn from"bn.js";import Te from"bn.js";var Nn=9e15,tn=1e9,si="0123456789abcdef",Zo="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",$o="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",ai={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Nn,maxE:Nn,crypto:!1},oa,Et,oe=!0,er="[DecimalError] ",en=er+"Invalid argument: ",ra=er+"Precision limit exceeded",ia=er+"crypto unavailable",sa="[object Decimal]",$e=Math.floor,Ve=Math.pow,Ec=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Dc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Wc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,aa=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,It=1e7,te=7,qc=9007199254740991,Uc=Zo.length-1,ui=$o.length-1,v={toStringTag:sa};v.absoluteValue=v.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),$(o)};v.ceil=function(){return $(new this.constructor(this),this.e+1,2)};v.clampedTo=v.clamp=function(o,e){var t,n=this,r=n.constructor;if(o=new r(o),e=new r(e),!o.s||!e.s)return new r(NaN);if(o.gt(e))throw Error(en+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new r(n)};v.comparedTo=v.cmp=function(o){var e,t,n,r,i=this,s=i.d,a=(o=new i.constructor(o)).d,c=i.s,u=o.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(i.e!==o.e)return i.e>o.e^c<0?1:-1;for(n=s.length,r=a.length,e=0,t=n<r?n:r;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===r?0:n>r^c<0?1:-1};v.cosine=v.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+te,n.rounding=1,t=Gc(n,da(n,t)),n.precision=o,n.rounding=e,$(Et==2||Et==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};v.cubeRoot=v.cbrt=function(){var o,e,t,n,r,i,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,i=l.s*Ve(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=ze(l.d),o=l.e,(i=(o-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Ve(t,1/3),o=$e((o+1)/3)-(o%3==(o<0?-1:2)),i==1/0?t="5e"+o:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(o=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=ke(u.plus(l).times(a),u.plus(c),s+2,1),ze(a.d).slice(0,s)===(t=ze(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&($(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,r=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&($(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,$(n,o,m.rounding,e)};v.decimalPlaces=v.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-$e(this.e/te))*te,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};v.dividedBy=v.div=function(o){return ke(this,new this.constructor(o))};v.dividedToIntegerBy=v.divToInt=function(o){var e=this,t=e.constructor;return $(ke(e,new t(o),0,1,1),t.precision,t.rounding)};v.equals=v.eq=function(o){return this.cmp(o)===0};v.floor=function(){return $(new this.constructor(this),this.e+1,3)};v.greaterThan=v.gt=function(o){return this.cmp(o)>0};v.greaterThanOrEqualTo=v.gte=function(o){var e=this.cmp(o);return e==1||e===0};v.hyperbolicCosine=v.cosh=function(){var o,e,t,n,r,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,r=i.d.length,r<32?(o=Math.ceil(r/3),e=(1/nr(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=Mn(s,1,i.times(e),new s(1),!0);for(var c,u=o,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return $(i,s.precision=t,s.rounding=n,!0)};v.hyperbolicSine=v.sinh=function(){var o,e,t,n,r=this,i=r.constructor;if(!r.isFinite()||r.isZero())return new i(r);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(r.e,r.sd())+4,i.rounding=1,n=r.d.length,n<3)r=Mn(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/nr(5,o)),r=Mn(i,2,r,r,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);o--;)s=r.times(r),r=r.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,$(r,e,t,!0)};v.hyperbolicTangent=v.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,ke(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};v.inverseCosine=v.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),r=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?Tt(t,r,i):new t(0):new t(NaN):e.isZero()?Tt(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=Tt(t,r+4,i).times(.5),t.precision=r,t.rounding=i,o.minus(e))};v.inverseHyperbolicCosine=v.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};v.inverseHyperbolicSine=v.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln())};v.inverseHyperbolicTangent=v.atanh=function(){var o,e,t,n,r=this,i=r.constructor;return r.isFinite()?r.e>=0?new i(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(o=i.precision,e=i.rounding,n=r.sd(),Math.max(n,o)<2*-r.e-1?$(new i(r),o,e,!0):(i.precision=t=n-r.e,r=ke(r.plus(1),new i(1).minus(r),t+o,1),i.precision=o+4,i.rounding=1,r=r.ln(),i.precision=o,i.rounding=e,r.times(.5))):new i(NaN)};v.inverseSine=v.asin=function(){var o,e,t,n,r=this,i=r.constructor;return r.isZero()?new i(r):(e=r.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(o=Tt(i,t+4,n).times(.5),o.s=r.s,o):new i(NaN):(i.precision=t+6,i.rounding=1,r=r.div(new i(1).minus(r.times(r)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,r.times(2)))};v.inverseTangent=v.atan=function(){var o,e,t,n,r,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=ui)return s=Tt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=ui)return s=Tt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/te+2|0),o=t;o;--o)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/te),n=1,c=u.times(u),s=new l(u),r=u;o!==-1;)if(r=r.times(c),i=s.minus(r.div(n+=2)),r=r.times(c),s=i.plus(r.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===i.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),oe=!0,$(s,l.precision=m,l.rounding=d,!0)};v.isFinite=function(){return!!this.d};v.isInteger=v.isInt=function(){return!!this.d&&$e(this.e/te)>this.d.length-2};v.isNaN=function(){return!this.s};v.isNegative=v.isNeg=function(){return this.s<0};v.isPositive=v.isPos=function(){return this.s>0};v.isZero=function(){return!!this.d&&this.d[0]===0};v.lessThan=v.lt=function(o){return this.cmp(o)<0};v.lessThanOrEqualTo=v.lte=function(o){return this.cmp(o)<1};v.logarithm=v.log=function(o){var e,t,n,r,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)i=!0;else{for(r=t[0];r%10===0;)r/=10;i=r!==1}if(oe=!1,a=m+p,s=Jt(u,a),n=e?Jo(l,a+10):Jt(o,a),c=ke(s,n,a,1),$n(c.d,r=m,d))do if(a+=10,s=Jt(u,a),n=e?Jo(l,a+10):Jt(o,a),c=ke(s,n,a,1),!i){+ze(c.d).slice(r+1,r+15)+1==1e14&&(c=$(c,m+1,0));break}while($n(c.d,r+=10,d));return oe=!0,$(c,m,d)};v.minus=v.sub=function(o){var e,t,n,r,i,s,a,c,u,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(u=p.d,d=o.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])o.s=-o.s;else if(u[0])o=new y(p);else return new y(c===3?-0:0);return oe?$(o,a,c):o}if(t=$e(o.e/te),l=$e(p.e/te),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/te),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}i=0}for(m&&(e=u,u=d,d=e,o.s=-o.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>i;){if(u[--n]<d[n]){for(r=n;r&&u[--r]===0;)u[r]=It-1;--u[r],u[n]+=It}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(o.d=u,o.e=tr(u,t),oe?$(o,a,c):o):new y(c===3?-0:0)};v.modulo=v.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?$(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=ke(t,o.abs(),0,3,1),e.s*=o.s):e=ke(t,o,0,n.modulo,1),e=e.times(o),oe=!0,t.minus(e))};v.naturalExponential=v.exp=function(){return ci(this)};v.naturalLogarithm=v.ln=function(){return Jt(this)};v.negated=v.neg=function(){var o=new this.constructor(this);return o.s=-o.s,$(o)};v.plus=v.add=function(o){var e,t,n,r,i,s,a,c,u,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(u=m.d,l=o.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(o=new d(m)),oe?$(o,a,c):o;if(i=$e(m.e/te),n=$e(o.e/te),u=u.slice(),r=i-n,r){for(r<0?(t=u,r=-r,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/te),s=i>s?i+1:s+1,r>s&&(r=s,t.length=1),t.reverse();r--;)t.push(0);t.reverse()}for(s=u.length,r=l.length,s-r<0&&(r=s,t=l,l=u,u=t),e=0;r;)e=(u[--r]=u[r]+l[r]+e)/It|0,u[r]%=It;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return o.d=u,o.e=tr(u,n),oe?$(o,a,c):o};v.precision=v.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(en+o);return t.d?(e=ua(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};v.round=function(){var o=this,e=o.constructor;return $(new e(o),o.e+1,e.rounding)};v.sine=v.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+te,n.rounding=1,t=zc(n,da(n,t)),n.precision=o,n.rounding=e,$(Et>2?t.neg():t,o,e,!0)):new n(NaN)};v.squareRoot=v.sqrt=function(){var o,e,t,n,r,i,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(oe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=ze(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=$e((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(i=n,n=i.plus(ke(s,i,t+2,1)).times(.5),ze(i.d).slice(0,t)===(e=ze(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&($(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,r=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&($(n,c+1,1),o=!n.times(n).eq(s));break}return oe=!0,$(n,c,l.rounding,o)};v.tangent=v.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=ke(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,$(Et==2||Et==4?t.neg():t,o,e,!0)):new n(NaN)};v.times=v.mul=function(o){var e,t,n,r,i,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=$e(l.e/te)+$e(o.e/te),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,s=c,c=u,u=s),i=[],s=c+u,n=s;n--;)i.push(0);for(n=u;--n>=0;){for(e=0,r=c+n;r>n;)a=i[r]+p[n]*d[r-n-1]+e,i[r--]=a%It|0,e=a/It|0;i[r]=(i[r]+e)%It|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),o.d=i,o.e=tr(i,t),oe?$(o,m.precision,m.rounding):o};v.toBinary=function(o,e){return mi(this,2,o,e)};v.toDecimalPlaces=v.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(at(o,0,tn),e===void 0?e=n.rounding:at(e,0,8),$(t,o+t.e+1,e))};v.toExponential=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Nt(n,!0):(at(o,0,tn),e===void 0?e=r.rounding:at(e,0,8),n=$(new r(n),o+1,e),t=Nt(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toFixed=function(o,e){var t,n,r=this,i=r.constructor;return o===void 0?t=Nt(r):(at(o,0,tn),e===void 0?e=i.rounding:at(e,0,8),n=$(new i(r),o+r.e+1,e),t=Nt(n,!1,o+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};v.toFraction=function(o){var e,t,n,r,i,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),i=e.e=ua(y)-p.e-1,s=i%te,e.d[0]=Ve(10,s<0?te+s:s),o==null)o=i>0?e:u;else{if(a=new f(o),!a.isInt()||a.lt(u))throw Error(en+a);o=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(ze(y)),l=f.precision,f.precision=i=y.length*te*2;m=ke(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(o)!=1;)t=n,n=r,r=u,u=c.plus(m.times(r)),c=r,r=e,e=a.minus(m.times(r)),a=r;return r=ke(o.minus(t),n,0,1,1),c=c.plus(r.times(u)),t=t.plus(r.times(n)),c.s=u.s=p.s,d=ke(u,n,i,1).minus(p).abs().cmp(ke(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};v.toHexadecimal=v.toHex=function(o,e){return mi(this,16,o,e)};v.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:at(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(oe=!1,t=ke(t,o,0,e,1).times(o),oe=!0,$(t)):(o.s=t.s,t=o),t};v.toNumber=function(){return+this};v.toOctal=function(o,e){return mi(this,8,o,e)};v.toPower=v.pow=function(o){var e,t,n,r,i,s,a=this,c=a.constructor,u=+(o=new c(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new c(Ve(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,o.eq(1))return $(a,n,i);if(e=$e(o.e/te),e>=o.d.length-1&&(t=u<0?-u:u)<=qc)return r=ca(c,a,t,n),o.s<0?new c(1).div(r):$(r,n,i);if(s=a.s,s<0){if(e<o.d.length-1)return new c(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Ve(+a,u),e=t==0||!isFinite(t)?$e(u*(Math.log("0."+ze(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(oe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),r=ci(o.times(Jt(a,n+t)),n),r.d&&(r=$(r,n+5,1),$n(r.d,n,i)&&(e=n+10,r=$(ci(o.times(Jt(a,e+t)),e),e+5,1),+ze(r.d).slice(n+1,n+15)+1==1e14&&(r=$(r,n+1,0)))),r.s=s,oe=!0,c.rounding=i,$(r,n,i))};v.toPrecision=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Nt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(at(o,1,tn),e===void 0?e=r.rounding:at(e,0,8),n=$(new r(n),o,e),t=Nt(n,o<=n.e||n.e<=r.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toSignificantDigits=v.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(at(o,1,tn),e===void 0?e=n.rounding:at(e,0,8)),$(new n(t),o,e)};v.toString=function(){var o=this,e=o.constructor,t=Nt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};v.truncated=v.trunc=function(){return $(new this.constructor(this),this.e+1,1)};v.valueOf=v.toJSON=function(){var o=this,e=o.constructor,t=Nt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function ze(o){var e,t,n,r=o.length-1,i="",s=o[0];if(r>0){for(i+=s,e=1;e<r;e++)n=o[e]+"",t=te-n.length,t&&(i+=$t(t)),i+=n;s=o[e],n=s+"",t=te-n.length,t&&(i+=$t(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function at(o,e,t){if(o!==~~o||o<e||o>t)throw Error(en+o)}function $n(o,e,t,n){var r,i,s,a;for(i=o[0];i>=10;i/=10)--e;return--e<0?(e+=te,r=0):(r=Math.ceil((e+1)/te),e%=te),i=Ve(10,te-e),a=o[r]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==i||t>3&&a+1==i/2)&&(o[r+1]/i/100|0)==Ve(10,e-2)-1||(a==i/2||a==0)&&(o[r+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(o[r+1]/i/1e3|0)==Ve(10,e-3)-1,s}function Ho(o,e,t){for(var n,r=[0],i,s=0,a=o.length;s<a;){for(i=r.length;i--;)r[i]*=e;for(r[0]+=si.indexOf(o.charAt(s++)),n=0;n<r.length;n++)r[n]>t-1&&(r[n+1]===void 0&&(r[n+1]=0),r[n+1]+=r[n]/t|0,r[n]%=t)}return r.reverse()}function Gc(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/nr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=Mn(o,1,e.times(r),new o(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var ke=function(){function o(n,r,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*r+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,r,i,s){var a,c;if(i!=s)c=i>s?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=r[a]){c=n[a]>r[a]?1:-1;break}return c}function t(n,r,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<r[i]?1:0,n[i]=a*s+n[i]-r[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,r,i,s,a,c){var u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B,M,D,V=n.constructor,Z=n.s==r.s?1:-1,G=n.d,q=r.d;if(!G||!G[0]||!q||!q[0])return new V(!n.s||!r.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?Z*0:Z/0);for(c?(p=1,l=n.e-r.e):(c=It,p=te,l=$e(n.e/p)-$e(r.e/p)),M=q.length,R=G.length,g=new V(Z),w=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,i==null?(T=i=V.precision,s=V.rounding):a?T=i+(n.e-r.e)+1:T=i,T<0)w.push(1),y=!0;else{if(T=T/p+2|0,m=0,M==1){for(d=0,q=q[0],T++;(m<R||d)&&T--;m++)S=d*c+(G[m]||0),w[m]=S/q|0,d=S%q|0;y=d||m<R}else{for(d=c/(q[0]+1)|0,d>1&&(q=o(q,d,c),G=o(G,d,c),M=q.length,R=G.length),x=M,A=G.slice(0,M),k=A.length;k<M;)A[k++]=0;D=q.slice(),D.unshift(0),B=q[0],q[1]>=c/2&&++B;do d=0,u=e(q,A,M,k),u<0?(I=A[0],M!=k&&(I=I*c+(A[1]||0)),d=I/B|0,d>1?(d>=c&&(d=c-1),f=o(q,d,c),b=f.length,k=A.length,u=e(f,A,b,k),u==1&&(d--,t(f,M<b?D:q,b,c))):(d==0&&(u=d=1),f=q.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,c),u==-1&&(k=A.length,u=e(q,A,M,k),u<1&&(d++,t(A,M<k?D:q,k,c))),k=A.length):u===0&&(d++,A=[0]),w[m++]=d,u&&A[0]?A[k++]=G[x]||0:(A=[G[x]],k=1);while((x++<R||A[0]!==void 0)&&T--);y=A[0]!==void 0}w[0]||w.shift()}if(p==1)g.e=l,oa=y;else{for(m=1,d=w[0];d>=10;d/=10)m++;g.e=m+l*p-1,$(g,a?i+g.e+1:i,s,y)}return g}}();function $(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(r=1,a=m[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=te,s=e,l=m[d=0],c=l/Ve(10,r-s-1)%10|0;else if(d=Math.ceil((i+1)/te),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,r=1,i%=te,s=i-te+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;i%=te,s=i-te+r,c=s<0?0:l/Ve(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Ve(10,r-s-1)),u=t<4?(c||n)&&(t==0||t==(o.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/Ve(10,r-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=o.e+1,m[0]=Ve(10,(te-e%te)%te),o.e=-e||0):m[0]=o.e=0,o;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Ve(10,te-i),m[d]=s>0?(l/Ve(10,r-s)%Ve(10,s)|0)*a:0),u)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(o.e++,m[0]==It&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=It)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Nt(o,e,t){if(!o.isFinite())return ma(o);var n,r=o.e,i=ze(o.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+$t(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+$t(-r-1)+i,t&&(n=t-s)>0&&(i+=$t(n))):r>=s?(i+=$t(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+$t(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=$t(n))),i}function tr(o,e){var t=o[0];for(e*=te;t>=10;t/=10)e++;return e}function Jo(o,e,t){if(e>Uc)throw oe=!0,t&&(o.precision=t),Error(ra);return $(new o(Zo),e,1,!0)}function Tt(o,e,t){if(e>ui)throw Error(ra);return $(new o($o),e,t,!0)}function ua(o){var e=o.length-1,t=e*te+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function $t(o){for(var e="";o--;)e+="0";return e}function ca(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/te+4);for(oe=!1;;){if(t%2&&(i=i.times(e),ta(i.d,s)&&(r=!0)),t=$e(t/2),t===0){t=i.d.length-1,r&&i.d[t]===0&&++i.d[t];break}e=e.times(e),ta(e.d,s)}return oe=!0,i}function ea(o){return o.d[o.d.length-1]&1}function la(o,e,t){for(var n,r=new o(e[0]),i=0;++i<e.length;)if(n=new o(e[i]),n.s)r[t](n)&&(r=n);else{r=n;break}return r}function ci(o,e){var t,n,r,i,s,a,c,u=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(oe=!1,c=y):c=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Ve(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=$(i.times(o),c,1),t=t.times(++l),a=s.plus(ke(i,t,c,1)),ze(a.d).slice(0,c)===ze(s.d).slice(0,c)){for(r=m;r--;)s=$(s.times(s),c,1);if(e==null)if(u<3&&$n(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return $(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function Jt(o,e){var t,n,r,i,s,a,c,u,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,w=g.rounding,A=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(oe=!1,l=A):l=e,g.precision=l+=y,t=ze(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=ze(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return u=Jo(g,l+2,A).times(i+""),f=Jt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=A,e==null?$(f,A,w,oe=!0):f;for(m=f,c=s=f=ke(f.minus(1),f.plus(1),l,1),d=$(f.times(f),l,1),r=3;;){if(s=$(s.times(d),l,1),u=c.plus(ke(s,new g(r),l,1)),ze(u.d).slice(0,l)===ze(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(Jo(g,l+2,A).times(i+""))),c=ke(c,new g(p),l,1),e==null)if($n(c.d,l-y,w,a))g.precision=l+=y,u=s=f=ke(m.minus(1),m.plus(1),l,1),d=$(f.times(f),l,1),r=a=1;else return $(c,g.precision=A,w,oe=!0);else return g.precision=A,c;c=u,r+=2}}function ma(o){return String(o.s*o.s/0)}function li(o,e){var t,n,r;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(r=e.length;e.charCodeAt(r-1)===48;--r);if(e=e.slice(n,r),e){if(r-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%te,t<0&&(n+=te),n<r){for(n&&o.d.push(+e.slice(0,n)),r-=te;n<r;)o.d.push(+e.slice(n,n+=te));e=e.slice(n),n=te-e.length}else n-=r;for(;n--;)e+="0";o.d.push(+e),oe&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function Xc(o,e){var t,n,r,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),aa.test(e))return li(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(Dc.test(e))t=16,e=e.toLowerCase();else if(Ec.test(e))t=2;else if(Wc.test(e))t=8;else throw Error(en+e);for(i=e.search(/p/i),i>0?(c=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=o.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,r=ca(n,new n(t),i,i*2)),u=Ho(e,t,It),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(o.s*0):(o.e=tr(u,l),o.d=u,oe=!1,s&&(o=ke(o,r,a*4)),c&&(o=o.times(Math.abs(c)<54?Ve(2,c):Jn.pow(2,c))),oe=!0,o)}function zc(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Mn(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/nr(5,t)),e=Mn(o,2,e,e);for(var r,i=new o(5),s=new o(16),a=new o(20);t--;)r=e.times(e),e=e.times(i.plus(r.times(s.times(r).minus(a))));return e}function Mn(o,e,t,n,r){var i,s,a,c,u=1,l=o.precision,m=Math.ceil(l/te);for(oe=!1,c=t.times(t),a=new o(n);;){if(s=ke(a.times(c),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=ke(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function nr(o,e){for(var t=o;--e;)t*=o;return t}function da(o,e){var t,n=e.s<0,r=Tt(o,o.precision,1),i=r.times(.5);if(e=e.abs(),e.lte(i))return Et=n?4:1,e;if(t=e.divToInt(r),t.isZero())Et=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(i))return Et=ea(t)?n?2:3:n?4:1,e;Et=ea(t)?n?1:4:n?3:2}return e.minus(r).abs()}function mi(o,e,t,n){var r,i,s,a,c,u,l,m,d,p=o.constructor,y=t!==void 0;if(y?(at(t,1,tn),n===void 0?n=p.rounding:at(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=ma(o);else{for(l=Nt(o),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Ho(Nt(d),10,r),d.e=d.d.length),m=Ho(l,10,r),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=m,o.e=i,o=ke(o,d,t,n,0,r),m=o.d,i=o.e,u=oa),s=m[t],a=r/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,u)for(;++m[--t]>r-1;)m[t]=0,t||(++i,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=si.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=Ho(l,r,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=si.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>c)for(i-=c;i--;)l+="0";else i<c&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function ta(o,e){if(o.length>e)return o.length=e,!0}function Qc(o){return new this(o).abs()}function Yc(o){return new this(o).acos()}function jc(o){return new this(o).acosh()}function Hc(o,e){return new this(o).plus(e)}function Zc(o){return new this(o).asin()}function $c(o){return new this(o).asinh()}function Jc(o){return new this(o).atan()}function el(o){return new this(o).atanh()}function tl(o,e){o=new this(o),e=new this(e);var t,n=this.precision,r=this.rounding,i=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=Tt(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?Tt(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=Tt(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(ke(o,e,i,1)),e=Tt(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(ke(o,e,i,1)),t}function nl(o){return new this(o).cbrt()}function ol(o){return $(o=new this(o),o.e+1,2)}function rl(o,e,t){return new this(o).clamp(e,t)}function il(o){if(!o||typeof o!="object")throw Error(er+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,tn,"rounding",0,8,"toExpNeg",-Nn,0,"toExpPos",0,Nn,"maxE",0,Nn,"minE",-Nn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=ai[t]),(n=o[t])!==void 0)if($e(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(en+t+": "+n);if(t="crypto",r&&(this[t]=ai[t]),(n=o[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(ia);else this[t]=!1;else throw Error(en+t+": "+n);return this}function sl(o){return new this(o).cos()}function al(o){return new this(o).cosh()}function pa(o){var e,t,n;function r(i){var s,a,c,u=this;if(!(u instanceof r))return new r(i);if(u.constructor=r,na(i)){u.s=i.s,oe?!i.d||i.e>r.maxE?(u.e=NaN,u.d=null):i.e<r.minE?(u.e=0,u.d=[0]):(u.e=i.e,u.d=i.d.slice()):(u.e=i.e,u.d=i.d?i.d.slice():i.d);return}if(c=typeof i,c==="number"){if(i===0){u.s=1/i<0?-1:1,u.e=0,u.d=[0];return}if(i<0?(i=-i,u.s=-1):u.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;oe?s>r.maxE?(u.e=NaN,u.d=null):s<r.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[i]):(u.e=s,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return li(u,i.toString())}else if(c!=="string")throw Error(en+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),aa.test(i)?li(u,i):Xc(u,i)}if(r.prototype=v,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=il,r.clone=pa,r.isDecimal=na,r.abs=Qc,r.acos=Yc,r.acosh=jc,r.add=Hc,r.asin=Zc,r.asinh=$c,r.atan=Jc,r.atanh=el,r.atan2=tl,r.cbrt=nl,r.ceil=ol,r.clamp=rl,r.cos=sl,r.cosh=al,r.div=ul,r.exp=cl,r.floor=ll,r.hypot=ml,r.ln=dl,r.log=pl,r.log10=yl,r.log2=fl,r.max=bl,r.min=gl,r.mod=Al,r.mul=wl,r.pow=Pl,r.random=hl,r.round=kl,r.sign=Tl,r.sin=Il,r.sinh=Bl,r.sqrt=xl,r.sub=Sl,r.sum=Kl,r.tan=Cl,r.tanh=Rl,r.trunc=Ol,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return r.config(o),r}function ul(o,e){return new this(o).div(e)}function cl(o){return new this(o).exp()}function ll(o){return $(o=new this(o),o.e+1,3)}function ml(){var o,e,t=new this(0);for(oe=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function na(o){return o instanceof Jn||o&&o.toStringTag===sa||!1}function dl(o){return new this(o).ln()}function pl(o,e){return new this(o).log(e)}function fl(o){return new this(o).log(2)}function yl(o){return new this(o).log(10)}function bl(){return la(this,arguments,"lt")}function gl(){return la(this,arguments,"gt")}function Al(o,e){return new this(o).mod(e)}function wl(o,e){return new this(o).mul(e)}function Pl(o,e){return new this(o).pow(e)}function hl(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:at(o,1,tn),n=Math.ceil(o/te),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)r=e[i],r>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=r%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)r=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(r%1e7),i+=4);i=n/4}else throw Error(ia);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],o%=te,n&&o&&(r=Ve(10,te-o),a[i]=(n/r|0)*r);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=te)a.shift();for(n=1,r=a[0];r>=10;r/=10)n++;n<te&&(t-=te-n)}return s.e=t,s.d=a,s}function kl(o){return $(o=new this(o),o.e+1,this.rounding)}function Tl(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function Il(o){return new this(o).sin()}function Bl(o){return new this(o).sinh()}function xl(o){return new this(o).sqrt()}function Sl(o,e){return new this(o).sub(e)}function Kl(){var o=0,e=arguments,t=new this(e[o]);for(oe=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return oe=!0,$(t,this.precision,this.rounding)}function Cl(o){return new this(o).tan()}function Rl(o){return new this(o).tanh()}function Ol(o){return $(o=new this(o),o.e+1,1)}v[Symbol.for("nodejs.util.inspect.custom")]=v.toString;v[Symbol.toStringTag]="Decimal";var Jn=v.constructor=pa(ai);Zo=new Jn(Zo);$o=new Jn($o);var O=Jn;import{PublicKey as bi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ll}from"@solana/spl-token";import{PublicKey as xe,SystemProgram as fa,SYSVAR_RENT_PUBKEY as Nl}from"@solana/web3.js";function P({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var di=[P({pubkey:Ll,isWritable:!1}),P({pubkey:fa.programId,isWritable:!1}),P({pubkey:Nl,isWritable:!1})];function pi({publicKey:o,transformSol:e}){let t=fi(o.toString());if(t instanceof xe)return e&&t.equals(Fe)?j:t;if(e&&t.toString()===Fe.toBase58())return j;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 fi(o){try{return new xe(o)}catch{return o}}var or=new xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),rr=new xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ut=new xe("SysvarRent111111111111111111111111111111111"),yi=new xe("SysvarC1ock11111111111111111111111111111111"),_n=new xe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),ir=new xe("Sysvar1nstructions1111111111111111111111111"),sr=fa.programId,Nf=new xe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Mf=new xe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),_f=new xe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),vf=new xe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Vf=new xe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Ff=new xe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Ef=new xe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Df=new xe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Wf=new xe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),qf=new xe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Uf=new xe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),j=new xe("So11111111111111111111111111111111111111112"),Fe=xe.default;function pt(o){return pi({publicKey:o,transformSol:!0})}import{PublicKey as Ml}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ya}from"@solana/spl-token";var Mt={chainId:101,address:Ml.default.toBase58(),programId:ya.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ee={chainId:101,address:"So11111111111111111111111111111111111111112",programId:ya.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 gi=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===Fe.toBase58()||e instanceof bi&&Fe.equals(e)){this.decimals=Ee.decimals,this.symbol=Ee.symbol,this.name=Ee.name,this.mint=new bi(Ee.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=r||e.toString().substring(0,6),this.mint=i?bi.default:pi({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},ye=gi;ye.WSOL=new gi(E(K({},Ee),{mint:Ee.address}));import ur from"big.js";import Vl from"bn.js";import Fl from"decimal.js-light";import _l from"toformat";var vl=_l,eo=vl;var ar=ce("module/fraction"),Ai=eo(ur),to=eo(Fl),El={[0]:to.ROUND_DOWN,[1]:to.ROUND_HALF_UP,[2]:to.ROUND_UP},Dl={[0]:ur.roundDown,[1]:ur.roundHalfUp,[2]:ur.roundUp},re=class{constructor(e,t=new Vl(1)){this.numerator=Y(e),this.denominator=Y(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new re(this.denominator,this.numerator)}add(e){let t=e instanceof re?e:new re(Y(e));return this.denominator.eq(t.denominator)?new re(this.numerator.add(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof re?e:new re(Y(e));return this.denominator.eq(t.denominator)?new re(this.numerator.sub(t.numerator),this.denominator):new re(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof re?e:new re(Y(e));return new re(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof re?e:new re(Y(e));return new re(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||ar.logWithError(`${e} is not an integer.`),e<=0&&ar.logWithError(`${e} is not positive.`),to.set({precision:e+1,rounding:El[n]});let r=new to(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return r.toFormat(r.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||ar.logWithError(`${e} is not an integer.`),e<0&&ar.logWithError(`${e} is negative.`),Ai.DP=e,Ai.RM=Dl[n]||1,new Ai(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Wl=ce("Raydium_price"),Ue=class extends re{constructor(t){let{baseToken:n,quoteToken:r,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=r,this.scalar=new re(Pi(n.decimals),Pi(r.decimals))}get raw(){return new re(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Ue({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Wl.logWithError("mul token not equals");let n=super.mul(t);return new Ue({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,r){return this.adjusted.toSignificant(t,n,r)}toFixed(t=this.quoteToken.decimals,n,r){return this.adjusted.toFixed(t,n,r)}};var hi=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},no=hi;no.SOL=new hi(Mt);function Ay(o,e){return o instanceof ye&&e instanceof ye?o.equals(e):o instanceof ye||e instanceof ye?!1:o===e}import ql from"bn.js";var ba=new re(new ql(100)),Me=class extends re{toSignificant(e=5,t,n){return this.mul(ba).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(ba).toFixed(e,t,n)}};function Le(o){if(o instanceof Me)return new re(o.numerator,o.denominator);if(o instanceof Ue)return o.adjusted;if(o instanceof fe)try{return Le(o.toExact())}catch{return new re(De)}if(o instanceof re)return o;let e=String(o),t=dn(e);return new re(t.numerator,t.denominator)}function xy(o){var n;if(o instanceof Me)return{fr:new re(o.numerator,o.denominator)};if(o instanceof Ue)return{fr:o.adjusted};if(o instanceof fe)return{fr:Le(o.toExact()),decimals:o.token.decimals};if(o instanceof re)return{fr:o};let e=String(o),t=dn(e);return{fr:new re(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function Sy(o,e){if(o==null||e==null)return!1;let t=Le(o),n=Le(e);return t.sub(n).numerator,t.sub(n).numerator.lt(De)}function Ul(o,e){if(o==null||e==null)return!1;let t=Le(o),n=Le(e);return t.sub(n).numerator.gt(De)}function Ky(o,e){if(o==null||e==null)return!1;let t=Le(o),n=Le(e);return t.sub(n).numerator.lte(De)}function Cy(o,e){if(o==null||e==null)return!1;let t=Le(o),n=Le(e);return t.sub(n).numerator.gte(De)}function Gl(o,e){if(o==null||e==null)return!1;let t=Le(o),n=Le(e);return t.sub(n).numerator.eq(De)}function Ry(o,e){if(o==null||e==null)return;let t=Le(o),n=Le(e);try{return t.div(n)}catch{return t}}function Oy(o,e){if(o==null||e==null)return;let t=Le(o),n=Le(e);return t.sub(n)}function Ly(o){return o==null?!1:!Gl(o,0)}function Ny(o,e){return Ul(e,o)?e:o}function ki(o,e){if(o==null||e==null)return;let t=Le(o),n=Le(e);return t.mul(n)}function My(o,e){if(o==null||e==null)return;let t=Le(o),n=Le(e);return t.add(n)}var wi=(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))(wi||{}),De=new Te(0),Pa=new Te(1),Qy=new Te(2),Yy=new Te(3),jy=new Te(5),pn=new Te(10),Hy=new Te(100),Zy=new Te(1e3),$y=new Te(1e4),ga=9007199254740991;function Y(o){let e=ce("Raydium_parseBigNumberish");if(o instanceof Te)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new Te(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=ga||o<=-ga)&&e.logWithError(`BigNumberish number overflow: ${o}`),new Te(String(o))):typeof o=="bigint"?new Te(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new Te(0))}function Pi(o){return pn.pow(Y(o))}function dn(o){var a;if(o===void 0)return{denominator:"1",numerator:"0"};if(o instanceof Te)return{numerator:o.toString(),denominator:"1"};if(o instanceof re)return{denominator:o.denominator.toString(),numerator:o.numerator.toString()};let e=String(o),[,t="",n="",r=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],i="1"+"0".repeat(r.length),s=t+(n==="0"?"":n)+r||"0";return{denominator:i,numerator:s,sign:t,int:n,dec:r}}function cr(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Xl(o){var n;let[,e="",t=""]=(n=o.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function zl(o,e=0){return o instanceof Te?o:new Te(Xl(ha(o).mul(pn.pow(new Te(String(e))))))}function ha(o){if(o instanceof Me)return new re(o.numerator,o.denominator);if(o instanceof Ue)return o.adjusted;if(o instanceof fe)try{return ha(o.toExact())}catch{return new re(De)}if(o instanceof re)return o;let e=String(o),t=dn(e);return new re(t.numerator,t.denominator)}function Jy(o,e){let{numerator:t,denominator:n}=dn(o);return new Me(new Te(t),new Te(n).mul(e!=null&&e.alreadyDecimaled?new Te(100):new Te(1)))}function eb(o){let{token:e,numberPrice:t,decimalDone:n}=o,r=new ye({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:i,denominator:s}=dn(t),a=n?new Te(i).mul(pn.pow(new Te(e.decimals))):i,c=new Te(s).mul(pn.pow(new Te(r.decimals)));return new Ue({baseToken:r,denominator:c.toString(),quoteToken:new ye(E(K({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function Aa(o){let e=new no({decimals:6,symbol:"usd",name:"usd"}),t=zl(ki(o,10**e.decimals));return new fn(e,t)}function tb(o,e){return Aa(!e||!o?0:ki(o,e))}function Ql(o){if(o==null)return;let{numerator:e,denominator:t}=dn(o.toString());return new re(e,t)}function Yl(o){return o instanceof O}function wa(o){return Yl(o)?Ql(o):Array.isArray(o)?o.map(e=>wa(e)):Ti(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,wa(t)])):o}var Hl=ce("Raydium_amount"),lr=eo(jl);function ka(o,e){let t="0",n="0";if(o.includes(".")){let r=o.split(".");r.length===2?([t,n]=r,n=n.padEnd(e,"0")):Hl.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var fe=class extends re{constructor(t,n,r=!0,i){let s=new nn(0),a=pn.pow(new nn(t.decimals));if(r)s=Y(n);else{let c=new nn(0),u=new nn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=ka(n.toString(),t.decimals);c=Y(l),u=Y(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ce(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new fe(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new fe(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.token.decimals,n,r=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return lr.DP=this.token.decimals,new lr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},fn=class extends re{constructor(t,n,r=!0,i){let s=new nn(0),a=pn.pow(new nn(t.decimals));if(r)s=Y(n);else{let c=new nn(0),u=new nn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=ka(n.toString(),t.decimals);c=Y(l),u=Y(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ce(i||"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 fn(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new fn(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.currency.decimals,n,r=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return lr.DP=this.currency.decimals,new lr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};async function Ta(o){new Promise(e=>setTimeout(e,o))}function Bb(){return new Date().getTime()}function Ti(o){return typeof o=="object"&&o!==null&&![ye,fe,Zl,re,$l,Ue,Me].some(e=>typeof e=="object"&&o instanceof e)}function Ie(o){return typeof o=="string"?fi(o):Array.isArray(o)?o.map(e=>Ie(e)):Ti(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ie(t)])):o}import{PublicKey as io,sendAndConfirmTransaction as Ki,Transaction as so,TransactionMessage as ao,VersionedTransaction as uo}from"@solana/web3.js";import um from"axios";var yn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(yn||{}),F={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut"};import{PublicKey as Ba,ComputeBudgetProgram as Ia,Transaction as dr,TransactionMessage as Jl,Keypair as xa,VersionedTransaction as Ii}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as em}from"@solana/spl-token";var Dt=ce("Raydium_txUtil"),Sa=1644;function pr(o){let e=[],t=[];return o.microLamports&&(e.push(Ia.setComputeUnitPrice({microLamports:o.microLamports})),t.push(F.SetComputeUnitPrice)),o.units&&(e.push(Ia.setComputeUnitLimit({units:o.units})),t.push(F.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function vn(o,e){var n,r;let t=e!=null?e:"confirmed";try{return((r=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:r.blockhash)||(await o.getRecentBlockhash(t)).blockhash}catch{return(await o.getRecentBlockhash(t)).blockhash}}function fr(o,e){o.length<1&&Dt.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Dt.logWithError(`no signers provided:, ${e.toString()}`);let t=new dr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Sa}catch{return!1}}async function Ka(o,e,t,n=!0){let r=new Ba("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new dr;s.feePayer=r;for(let u of e)fr([...s.instructions,u],[r])||(i.push(s),s=new dr,s.feePayer=r),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await tm(o,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Dt.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Dt.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Dt.debug("filteredLog:",c),l.length||Dt.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function Ca(o,e){let t=o.match(/{["\w:,]+}/g);return!t||t.length!==1?Dt.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Wt(o,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(o);return!n||n.length!==2?Dt.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ue(o,e){let[t,n]=Ba.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}async function tm(o,e,t){let n=[];if(t){let r=await o.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=r.blockhash,u.lastValidBlockHeight=r.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.map(u=>{let l=o._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await o._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async r=>await(await o.simulateTransaction(r)).value))}catch(r){r instanceof Error&&Dt.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:r.message})}return n}function oo({instructions:o,payer:e,signers:t}){return fr(o,[e,...t])}function ro({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=xa.generate().publicKey.toString()}){let i=new Jl({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Ii(i).serialize()).toString("base64").length<Sa}catch{return!1}}var mr={time:0,data:void 0};async function Vb(o){if(!mr.data||(Date.now()-mr.time)/1e3>30){let e=await o.getEpochInfo();return mr={time:Date.now(),data:e},e}else return mr.data}var Ra=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o),nm=o=>{let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});o instanceof Ii&&(e=Ra(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function bn(o){let e=[];return o.forEach(t=>{t instanceof dr&&(t.recentBlockhash||(t.recentBlockhash=em.toBase58()),t.feePayer||(t.feePayer=xa.generate().publicKey)),e.push(nm(t))}),console.log("simulate tx string:",e),e}function Fb(o){let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});return o instanceof Ii&&(e=Ra(e)),e.toString("base64")}import{PublicKey as La,AddressLookupTableAccount as yr}from"@solana/web3.js";import{PublicKey as Oa}from"@solana/web3.js";import{MINT_SIZE as om,TOKEN_PROGRAM_ID as rm,getTransferFeeConfig as im,unpackMint as sm}from"@solana/spl-token";var Bi=ce("Raydium_accountInfo_util");async function Bt(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=K({batchRequest:!1},t),s=xi(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=xi(c,10);a=(await(await Promise.all(u.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Bi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Bi.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Oa(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,r)))}catch(c){c instanceof Error&&Bi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function We(o,e,t){let n=await Bt(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>E(K({},r),{accountInfo:n[i]}))}var am=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(am||{}),Qb=1;async function Vn({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await We(o,e.map(c=>({pubkey:pt(c)})),t),r={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<om){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=sm(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);r[c.pubkey.toString()]=E(K({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||rm,feeConfig:(a=im(u))!=null?a:void 0})}return r[Oa.default.toBase58()]=r[j.toBase58()],r}async function Si({connection:o,address:e}){let t=await Bt(o,[...new Set(e.map(r=>r.toString()))].map(r=>new La(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new yr({key:s,state:yr.deserialize(i.data)});n[s.toString()]=a,br[s.toString()]=a}return n}var br={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new yr({key:new La("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:yr.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 gr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await um.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=pr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}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:r=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...r),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==io.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(K({},t||{})):this.build(t)}build(e){var n;let t=new so;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async r=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=r||{},c=i!=null?i:await vn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),bn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await Ki(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await vn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let w of s){let A=await Ki(this.connection,w,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((A,k)=>(A.recentBlockhash=f,a[k].length&&A.sign(...a[k]),A));bn(g);let w=await this.signAllTransactions(g);if(m){let A=0,k=[],I=async()=>{if(!w[A])return;let T=await this.connection.sendRawTransaction(w[A].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:w[A]}),d==null||d([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:k.map(T=>T.txId),signedTxs:w}}else{let A=[];for(let k=0;k<w.length;k+=1){let I=await this.connection.sendRawTransaction(w[k].serialize(),{skipPreflight:y});A.push(I)}return{txIds:A,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r,recentBlockhash:i}=y,s=Oe(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=K(K({},this.cluster==="devnet"?{}:br),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new io(b));let l=await Si({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=r?io.default.toBase58():i!=null?i:await vn(this.connection,this.blockhashCommitment),d=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new uo(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var A;let{skipPreflight:g=!0,sendAndConfirm:w}=b||{};if(bn([p]),(A=this.owner)!=null&&A.isKeyPair){let k=await this.connection.sendTransaction(p,{skipPreflight:g});if(w){let{lastValidBlockHeight:I,blockhash:T}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:T,lastValidBlockHeight:I,signature:k},"confirmed")}return{txId:k,signedTx:p}}if(this.signAllTransactions){let k=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(k[0],{skipPreflight:g}),signedTx:k[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),bn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let w=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:A,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:A,signature:w},"confirmed"),b.push(w)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,w=[],A=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});w.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...w]),g++,this.connection.onSignature(k,I=>{let T=w.findIndex(S=>S.txId===k);T>-1&&(w[T].status=I.err?"error":"success"),d==null||d([...w]),I.err||A()},"processed"),this.connection.getSignatureStatus(k)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let w=0;w<b.length;w+=1){let A=await this.connection.sendTransaction(b[w],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=Oe(u,["computeBudgetConfig"]),r=t?pr(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>E(K({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...r.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new io(b));if(c.length<12&&oo({instructions:p,payer:this.feePayer,signers:f})||oo({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");oo({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new so().add(...r.instructions,...c)):s.push(new so().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);oo({instructions:t?[...r.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new so().add(...r.instructions,...c)):s.push(new so().add(...c)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await vn(this.connection,this.blockhashCommitment);if(s.forEach(async(w,A)=>{w.recentBlockhash=b,a[A].length&&w.sign(...a[A])}),bn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let w=[];for(let A of s){let k=await Ki(this.connection,A,this.signers.find(I=>I.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});w.push(k)}return{txIds:w,signedTxs:s}}return{txIds:await Promise.all(s.map(async w=>await this.connection.sendRawTransaction(w.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let w=await this.signAllTransactions(s);if(d){let A=0,k=[],I=async()=>{if(!w[A])return;let T=await this.connection.sendRawTransaction(w[A].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:w[A]}),p==null||p([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:k.map(T=>T.txId),signedTxs:w}}else{let A=[];for(let k=0;k<w.length;k+=1){let I=await this.connection.sendRawTransaction(w[k].serialize(),{skipPreflight:f});A.push(I)}return{txIds:A,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:r=[]}=b,i=Oe(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=K(K({},this.cluster==="devnet"?{}:br),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),c=[];for(let w of a)s[w]===void 0&&c.push(new io(w));let u=await Si({connection:this.connection,address:c});for(let[w,A]of Object.entries(u))s[w]=A;let l=t?pr(t):{instructions:[],instructionTypes:[]},m=await vn(this.connection,this.blockhashCommitment),d=this.signers.reduce((w,A)=>E(K({},w),{[A.publicKey.toBase58()]:A}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(w=>{let A=[...f,w],k=t?[...l.instructions,...A]:A;if(f.length<12&&ro({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||ro({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(w);else{if(f.length===0)throw Error("item ins too big");let I={};for(let T of[...new Set(a)])s[T]!==void 0&&(I[T]=s[T]);if(t&&ro({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new uo(T))}else{let T=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new uo(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[w]}}),f.length>0){let A=[...new Set(f.map(k=>k.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&ro({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new uo(k))}else{let k=new ao({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new uo(k))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(w=>{w.some(A=>A.publicKey.equals(this.owner.publicKey))||w.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async w=>{var S;let{sequentially:A,onTxUpdate:k,recentBlockHash:I,skipPreflight:T=!0}=w||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),I&&(x.message.recentBlockhash=I)}),bn(p),(S=this.owner)!=null&&S.isKeyPair){if(A){let x=[];for(let R of p){let B=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:M,blockhash:D}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:D,lastValidBlockHeight:M,signature:B},"confirmed"),x.push(B)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(A){let R=0,B=[],M=async()=>{if(!x[R])return;let D=await this.connection.sendTransaction(x[R],{skipPreflight:T});B.push({txId:D,status:"sent",signedTx:x[R]}),k==null||k([...B]),R++,this.connection.onSignature(D,V=>{let Z=B.findIndex(G=>G.txId===D);Z>-1&&(B[Z].status=V.err?"error":"success"),k==null||k([...B]),V.err||M()},"processed"),this.connection.getSignatureStatus(D)};return M(),{txIds:[],signedTxs:x}}else{let R=[];for(let B=0;B<x.length;B+=1){let M=await this.connection.sendTransaction(x[B],{skipPreflight:T});R.push(M)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var xt=class{constructor(e){this._owner=e}get publicKey(){return xt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return xt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return xt.isKeyPair(this._owner)}get isPublicKey(){return xt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!xt.isKeyPair(e)}};function xi(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function mg(o,...e){return o.filter(t=>e.every(n=>n.includes(t)))}function dg(o,...e){return o.filter(t=>e.every(n=>!n.includes(t)))}function pg(o){return[...new Set(o)]}var Na=o=>typeof o=="number",Ma=o=>o?new Date(o):new Date,cm=o=>Ma(o).getTime();function _a(o,e,t){let n=Na(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()<=n}function va(o,e,t){let n=Na(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(o).getTime()>n}function yg(o,e){let n=cm(o)+(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 Ma(n)}import{PublicKey as de}from"@solana/web3.js";var Ci=new de("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Ri=new de("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Fn=new de("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),lm=new de("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),mm=new de("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ar=new de("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Oi=new de("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),dm=new de("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Va=new de("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Li=new de("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),pm=new de("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Ag=new de("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),fm=new de("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),ym=new de("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),bm=new de("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),gm=new de("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Ni=new de("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Am=new de("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),wm=new de("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Pm=new de("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),hm=new de("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),km=new de("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),co={IDO_PROGRAM_ID_V1:fm,IDO_PROGRAM_ID_V2:ym,IDO_PROGRAM_ID_V3:bm,IDO_PROGRAM_ID_V4:gm},wg={AMM_V4:Oi,AMM_STABLE:dm,CLMM_PROGRAM_ID:Li,FARM_PROGRAM_ID_V3:Ci,FARM_PROGRAM_ID_V5:Ri,FARM_PROGRAM_ID_V6:Fn,OPEN_BOOK_PROGRAM:mm,SERUM_PROGRAM_ID_V3:Ar,UTIL1216:lm,Router:pm,CREATE_CPMM_POOL_PROGRAM:Ni,CREATE_CPMM_POOL_AUTH:Am,CREATE_CPMM_POOL_FEE_ACC:wm},Pg={SERUM_MARKET:de.default,OPENBOOK_MARKET:new de("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:de.default,FarmV3:new de("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new de("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new de("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new de("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new de("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new de("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new de("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Pm,CREATE_CPMM_POOL_AUTH:hm,CREATE_CPMM_POOL_FEE_ACC:km,FEE_DESTINATION_ID:new de("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Tm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Im}from"@solana/spl-token";function we(o,e,t){return ue([o.toBuffer(),(t!=null?t:Im).toBuffer(),e.toBuffer()],new Tm("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import _e from"bn.js";var _t=1e4;function Sg(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new _e(r.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===_t){let a=new _e(r.maximumFee.toString());return{amount:o.add(a),fee:a,expirationTime:s}}else{let a=St(o.mul(new _e(_t)),new _e(_t-r.transferFeeBasisPoints)),c=new _e(r.maximumFee.toString()),u=a.sub(o).gt(c)?o.add(c):a,l=St(u.mul(new _e(r.transferFeeBasisPoints)),new _e(_t)),m=l.gt(i)?i:l;return{amount:u,fee:m,expirationTime:s}}else{let a=St(o.mul(new _e(r.transferFeeBasisPoints)),new _e(_t)),c=a.gt(i)?i:a;return{amount:o,fee:c,expirationTime:s}}}function be(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=E(K({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new _e(i.maximumFee.toString()),a=t.epoch<r.newerTransferFee.epoch?(Number(r.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===_t){let c=new _e(i.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=St(o.mul(new _e(_t)),new _e(_t-i.transferFeeBasisPoints)),u=new _e(i.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,m=St(l.mul(new _e(i.transferFeeBasisPoints)),new _e(_t)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=St(o.mul(new _e(i.transferFeeBasisPoints)),new _e(_t)),u=c.gt(s)?s:c;return{amount:o,fee:u,expirationTime:a}}}function Kt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function St(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new _e(0))?t.add(new _e(1)):t}var Fa=(t=>(t.ALL="all",t.Strict="strict",t))(Fa||{}),Ea=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(Ea||{});var Ne={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},Qg=K({},Ne);var Da="ray_tab_hash",Mi="ray_req_hash",Bm=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(Da);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(Da,o)),o},wr=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=Oe(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(Mi)||"[]").slice(0,o-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(E(K({},t),{time:Date.now(),session:Bm()}));try{localStorage.setItem(Mi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(Mi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return wr(E(K({},t),{logCount:o,removeLastLog:!0}))}};var En=ce("Raydium_Api"),_i=new Map;async function fA(o,e,t=1e3){let n;for(;n==null;)try{En.debug(`Request ${o} through endlessRetry`),n=await e()}catch(r){En.error(`Request ${o} failed, retry after ${t} ms`,r),await Ta(t)}return n}var Pr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=Wa.create({baseURL:this.urlConfigs.BASE_HOST||Ne.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return En.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(En.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&wr({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),En.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&wr({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),En.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ne.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Ne.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ne.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Wa.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(r=>r.numSlots);return n.reduce((r,i)=>r+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Ne.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ne.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ne.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Ne.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ne.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:r="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Ne.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${r}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Ne.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>_i.has(s)?(n.push(_i.get(s)),!1):!0),i=[];return r.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ne.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),i.forEach(a=>{_i.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:r="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&pt(t).toBase58(),n&&n!=="undefined"?pt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ne.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Ne.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ne.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ne.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ne.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ne.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ne.JITO})).data}};import{merge as If}from"lodash";var hr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",qa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as ji,TOKEN_PROGRAM_ID as an,AccountLayout as qn,TOKEN_2022_PROGRAM_ID as _d}from"@solana/spl-token";import{PublicKey as Sr,SystemProgram as vd}from"@solana/web3.js";var vi=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Ke=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ce(t)}createTxBuilder(e){return this.scope.checkOwner(),new gr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(vi(e))}logInfo(...e){this.logger.info(vi(e))}logAndCreateError(...e){let t=vi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Cd,createCloseAccountInstruction as Rd,createTransferInstruction as Od,TOKEN_PROGRAM_ID as Wn}from"@solana/spl-token";import{PublicKey as Ld,SystemProgram as Nd}from"@solana/web3.js";import Md from"bn.js";import{PublicKey as ru,Keypair as Bd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as xd}from"@solana/spl-token";import Sd from"bn.js";import{PublicKey as gd}from"@solana/web3.js";import ja,{isBN as Ha}from"bn.js";import{bits as xm,BitStructure as Sm,blob as Km,Blob as Cm,cstr as Rm,f32 as Om,f32be as Lm,f64 as Nm,f64be as Mm,greedy as _m,Layout as vm,ns64 as Vm,ns64be as Fm,nu64 as Em,nu64be as Dm,offset as Wm,s16 as qm,s16be as Um,s24 as Gm,s24be as Xm,s32 as zm,s32be as Qm,s40 as Ym,s40be as jm,s48 as Hm,s48be as Zm,s8 as $m,seq as Jm,struct as SA,Structure as ed,u16 as td,u16be as nd,u24 as od,u24be as rd,u32 as id,u32be as sd,u40 as ad,u40be as ud,u48 as cd,u48be as ld,u8 as md,UInt as dd,union as pd,Union as fd,unionLayoutDiscriminator as yd,utf8 as bd}from"@solana/buffer-layout";var lo=vm,Ua=ed,Ga=fd,KA=Sm,Vi=dd,Xa=Cm,CA=_m,kr=md,qt=td,RA=od,mo=id,OA=ad,LA=cd,za=Em,NA=nd,MA=rd,_A=sd,vA=ud,VA=ld,FA=Dm,EA=$m,DA=qm,WA=Gm,Qe=zm,qA=Ym,UA=Hm,GA=Vm,XA=Um,zA=Xm,QA=Qm,YA=jm,jA=Zm,HA=Fm,ZA=Om,$A=Lm,JA=Nm,ew=Mm;var Qa=Jm,Ya=pd,tw=yd,ge=Km,nw=Rm,ow=bd,Fi=xm,Ei=Wm;var gn=class extends lo{constructor(t,n,r){super(t,r);this.blob=ge(t),this.signed=n}decode(t,n=0){let r=new ja(this.blob.decode(t,n),10,"le");return this.signed?r.fromTwos(this.span*8).clone():r}encode(t,n,r=0){return typeof t=="number"&&(t=new ja(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},Tr=class extends lo{constructor(t){super(8,t);this._lower=Fi(mo(),!1),this._upper=Fi(mo(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return K(K({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function W(o){return new Vi(1,o)}function Ye(o){return new Vi(4,o)}function h(o){return new gn(8,!1,o)}function J(o){return new gn(16,!1,o)}function Za(o){return new gn(1,!0,o)}function Dn(o){return new gn(8,!0,o)}function $a(o){return new gn(16,!0,o)}var Ut=class extends lo{constructor(t,n,r,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=r}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,r){return this.layout.encode(this.encoder(t),n,r)}getSpan(t,n){return this.layout.getSpan(t,n)}};function C(o){return new Ut(ge(32),e=>new gd(e),e=>e.toBuffer(),o)}var Di=class extends lo{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=kr()}encode(t,n,r=0){return t==null?this.discriminator.encode(0,n,r):(this.discriminator.encode(1,n,r),this.layout.encode(t,n,r+1)+1)}decode(t,n=0){let r=this.discriminator.decode(t,n);if(r===0)return null;if(r===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let r=this.discriminator.decode(t,n);if(r===0)return 1;if(r===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function uw(o,e){return new Di(o,e)}function je(o){return new Ut(kr(),Ad,wd,o)}function Ad(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function wd(o){return o?1:0}function cw(o,e){let t=mo("length"),n=_([t,X(o,Ei(t,-t.span),"values")]);return new Ut(n,({values:r})=>r,r=>({values:r}),e)}function lw(o,e,t){let n=_([h("tag"),e.replicate("data")]);function r({tag:i,data:s}){if(!i.eq(o))throw new Error("Invalid tag, expected: "+o.toString("hex")+", got: "+i.toString("hex"));return s}return new Ut(n,r,i=>({tag:o,data:i}),t)}function Pd(o){let e=mo("length"),t=_([e,ge(Ei(e,-e.span),"data")]);return new Ut(t,({data:n})=>n,n=>({data:n}),o)}function mw(o){return new Ut(Pd(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),o)}function dw(o,e){let t=Ya(kr(),e);return o.forEach((n,r)=>t.addVariant(r,n,n.property)),t}function pw(o,e,t){let n=_([X(o,e,"values")]);return new Ut(n,({values:r})=>r,r=>({values:r}),t)}var Wi=class extends Ua{decode(e,t){return super.decode(e,t)}};function _(o,e,t){return new Wi(o,e,t)}var qi=class extends Ga{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(r=>r.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function fw(o,e,t){return new qi(o,e,t)}var Ui=class extends Xa{decode(e,t){let n=super.decode(e,t);if(!n.every(r=>r===0))throw new Error("nonzero padding bytes");return n}};function yw(o){return new Ui(o)}function X(o,e,t){let n,r=typeof e=="number"?e:Ha(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Ha(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,s)},set(i,s,a){return s==="count"&&(n=a),Reflect.set(i,s,a)}});return Qa(o,r,t)}var on=_([C("mint"),C("owner"),h("amount"),Ye("delegateOption"),C("delegate"),W("state"),Ye("isNativeOption"),h("isNative"),h("delegatedAmount"),Ye("closeAuthorityOption"),C("closeAuthority")]);function hd(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function Gi(o,...e){if(!hd(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function Xi(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function Ja(o,e){Gi(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Br=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),Ct=(o,e)=>o<<32-e|o>>>e;var kw=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function kd(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function zi(o){return typeof o=="string"&&(o=kd(o)),Gi(o),o}var Ir=class{clone(){return this._cloneInto()}},Tw={}.toString;function eu(o){let e=n=>o().update(zi(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Td(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let r=BigInt(32),i=BigInt(4294967295),s=Number(t>>r&i),a=Number(t&i),c=n?4:0,u=n?0:4;o.setUint32(e+c,s,n),o.setUint32(e+u,a,n)}var tu=(o,e,t)=>o&e^~o&t,nu=(o,e,t)=>o&e^o&t^e&t,xr=class extends Ir{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Br(this.buffer)}update(e){Xi(this);let{view:t,buffer:n,blockLen:r}=this;e=zi(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(r-this.pos,i-s);if(a===r){let c=Br(e);for(;r<=i-s;s+=r)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Xi(this),Ja(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;Td(n,r-8,BigInt(this.length*8),i),this.process(n,0);let a=Br(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:i,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=i,e.destroyed=s,r%t&&e.buffer.set(n),e}};var Id=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]),rn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),sn=new Uint32Array(64),Qi=class extends xr{constructor(){super(64,32,8,!1),this.A=rn[0]|0,this.B=rn[1]|0,this.C=rn[2]|0,this.D=rn[3]|0,this.E=rn[4]|0,this.F=rn[5]|0,this.G=rn[6]|0,this.H=rn[7]|0}get(){let{A:e,B:t,C:n,D:r,E:i,F:s,G:a,H:c}=this;return[e,t,n,r,i,s,a,c]}set(e,t,n,r,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)sn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=sn[m-15],p=sn[m-2],y=Ct(d,7)^Ct(d,18)^d>>>3,f=Ct(p,17)^Ct(p,19)^p>>>10;sn[m]=f+sn[m-7]+y+sn[m-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=Ct(a,6)^Ct(a,11)^Ct(a,25),p=l+d+tu(a,c,u)+Id[m]+sn[m]|0,f=(Ct(n,2)^Ct(n,13)^Ct(n,22))+nu(n,r,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=r,r=n,n=p+f|0}n=n+this.A|0,r=r+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,r,i,s,a,c,u,l)}roundClean(){sn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ou=eu(()=>new Qi);var Dw=ce("Raydium_Util");function iu({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=on.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:we(o,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),r.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:ru.default,amount:new Sd(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function ct({fromPublicKey:o,programId:e=xd}){let t=Bd.generate().publicKey.toBase58().slice(0,32);return{publicKey:Kd(o,t,e),seed:t}}function Kd(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=ou(n);return new ru(r)}function Yi(o){let{mint:e,tokenAccount:t,owner:n,programId:r=Wn}=o;return Cd(t,e,n,r)}function vt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=Wn}=o;return Rd(e,t,r,n,i)}async function Gt(o){let{connection:e,amount:t,commitment:n,payer:r,owner:i,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(on.span,n),c=Y(t).add(new Md(a)),u=ct({fromPublicKey:r,programId:Wn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[Nd.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:on.span,programId:Wn}),Yi({mint:new Ld(Ee.address),tokenAccount:u.publicKey,owner:i,programId:Wn})],instructionTypes:[F.CreateAccount,F.InitAccount],endInstructionTypes:s?[]:[F.CloseAccount],endInstructions:s?[]:[vt({tokenAccount:u.publicKey,payer:r,owner:i})]}}function po({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=Wn}){return Od(o,e,t,BigInt(String(n)),r,i)}var fo=class extends Ke{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=r||[],this._clientOwnedToken=!!(n||r)}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 we(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=K(K({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:an},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:_d},r.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=iu({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=an,associatedOnly:r=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!r||r&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Sr(t.tokenProgram||an),m=this.getAssociatedTokenAccount(n,new Sr(l)),d=(a?[]:this.tokenAccountRawInfos).filter(w=>w.accountInfo.mint.equals(n)&&(!i||w.pubkey.equals(m))).sort((w,A)=>w.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let w=ji(s,m,s,n,l);if(u){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(w),p.instructionTypes.push(F.CreateATA);else if(!(A.owner.equals(l)&&qn.decode(A.data).mint.equals(n)&&qn.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(w),p.instructionTypes.push(F.CreateATA);if(n.equals(j)&&r.amount){let A=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),r.amount&&(p.instructions.push(po({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:an})),p.instructionTypes.push(F.TransferAmount))}return c||(p.endInstructions.push(vt({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(F.CloseAccount)),{account:m,instructionParams:p}}else{let w=ct({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(qn.span),k=vd.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:w.seed,newAccountPubkey:w.publicKey,lamports:A+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:qn.span,programId:l});return p.instructions.push(k,Yi({mint:n,tokenAccount:w.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(F.CreateAccount),p.instructionTypes.push(F.InitAccount),c||(p.endInstructions.push(vt({owner:s,payer:r.payer||s,tokenAccount:w.publicKey,programId:l})),p.endInstructionTypes.push(F.CloseAccount)),{account:w.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=an,autoUnwrapWSOLToSOL:r}){var c;await this.fetchWalletTokenAccounts();let i=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await ji(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[F.CreateATA],i=u}return r&&j.toBase58()===t.toBase58()&&(a.endInstructions=[vt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[F.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=an,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new Sr(j).equals(i)){let p=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:r,skipCloseAccount:l});return K({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=ji(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(an)&&qn.decode(f.data).mint.equals(i)&&qn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[F.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=an,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Sr(j))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Oe(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Oe(m,["tokenAccount"]);c=d,u.addInstruction(p)}return K({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as op}from"@solana/spl-token";import{PublicKey as Ae,SystemProgram as rp}from"@solana/web3.js";import{PublicKey as du}from"@solana/web3.js";var Hi=_([W("instruction")]),Zi=_([W("instruction")]),Vd=_([h("rewardState"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardLastUpdateTime"),h("totalReward"),h("totalRewardEmissioned"),h("rewardClaimed"),h("rewardPerSecond"),J("accRewardPerShare"),C("rewardVault"),C("rewardMint"),C("rewardSender"),h("rewardType"),X(h(),15,"padding")]),Fd=_([h("state"),h("nonce"),C("lpVault"),C("rewardVault"),C(),C(),h(),h(),h("totalReward"),J("perShareReward"),h("lastSlot"),h("perSlotReward")]),Ed=_([h("state"),h("nonce"),C("lpVault"),C("rewardVaultA"),h("totalRewardA"),J("perShareRewardA"),h("perSlotRewardA"),W("option"),C("rewardVaultB"),ge(7),h("totalRewardB"),J("perShareRewardB"),h("perSlotRewardB"),h("lastSlot"),C()]),Dd=_([h(),h("state"),h("nonce"),h("validRewardTokenNum"),J("rewardMultiplier"),h("rewardPeriodMax"),h("rewardPeriodMin"),h("rewardPeriodExtend"),C("lpMint"),C("lpVault"),X(Vd,5,"rewardInfos"),C("creator"),C(),X(h(),32,"padding")]),su=new Proxy(Fd,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(K({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),au=new Proxy(Ed,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(K({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(o,e,t)}}),yo=new Proxy(Dd,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(K({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return E(K({},i),{rewardType:((s=Object.entries(un).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),Wd=_([h("isSet"),h("rewardPerSecond"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardType")]),$i=_([W("instruction"),h("nonce"),X(Wd,5,"rewardTimeInfo")]),Ji=_([W("instruction"),h("rewardReopenTime"),h("rewardEndTime"),h("rewardPerSecond")]),es=_([W("instruction"),h("isSet"),h("rewardPerSecond"),h("rewardOpenTime"),h("rewardEndTime"),h("rewardType")]),AP=_([h("state"),C("id"),C("owner"),h("deposited"),X(h(),1,"rewardDebts")]),bo=_([h("state"),C("id"),C("owner"),h("deposited"),X(J(),1,"rewardDebts"),h(""),h("voteLockedBalance"),X(h(),15)]),wP=_([h("state"),C("id"),C("owner"),h("deposited"),X(h(),2,"rewardDebts")]),uu=_([h("state"),C("id"),C("owner"),h("deposited"),X(J(),2,"rewardDebts"),X(h(),17)]),cu=_([h(),h("state"),C("id"),C("owner"),h("deposited"),X(J(),5,"rewardDebts"),X(h(),16)]),rt=_([W("instruction"),h("amount")]),qd=_([C("mint"),C("grantAuthority"),h("baselineVoteWeightScaledFactor"),h("maxExtraLockupVoteWeightScaledFactor"),h("lockupSaturationSecs"),Za("digitShift"),X(W(),7,"reserved1"),X(h(),7,"reserved2")]),lu=_([ge(8),C("governanceProgramId"),C("realm"),C("realmGoverningTokenMint"),C("realmAuthority"),X(W(),32,"reserved1"),X(qd,4,"votingMints"),Dn("timeOffset"),W("bump"),X(W(),7,"reserved2"),X(h(),11,"reserved3")]),Ud=_([Dn("startTime"),Dn("endTime"),W("kind"),X(W(),15,"reserved")]),Gd=_([X(Ud,1,"lockup"),h("amountDeposited_native"),h("amountInitiallyLockedNative"),je("isUsed"),je("allowClawback"),W("votingMintConfigIdx"),X(W(),29,"reserved")]),mu=_([ge(8),C("voterAuthority"),C("registrar"),X(Gd,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),X(W(),94,"reserved")]);var SP=ce("Raydium_farm_config"),pu=new du("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),fu=new du("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),yu={3:su,5:au,6:yo},bu={3:bo,5:uu,6:cu},ts=o=>[3,5,6].indexOf(o)!==-1,ns=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,r=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${r}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${r}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${r}`}};return(s=i[e])==null?void 0:s.call(i)},un={"Standard SPL":0,"Option tokens":1},gt={[Ci.toString()]:3,[Ri.toString()]:5,[Fn.toString()]:6};import{PublicKey as ae,SystemProgram as An,SYSVAR_RENT_PUBKEY as Qd,SYSVAR_CLOCK_PUBKEY as wo,TransactionInstruction as Ge}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Yd,TOKEN_PROGRAM_ID as ft,ASSOCIATED_TOKEN_PROGRAM_ID as jd}from"@solana/spl-token";import Kr from"bn.js";function os(o,e,t){return ue([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],o)}function rs(o,e){return ue([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],o)}function is(o,e){return ue([e.toBuffer()],o)}function ss(o,e,t){return ue([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],o)}function as(o,e,t){return ue([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],o)}function us(o,e,t,n){return ue([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}import lt from"bn.js";var go=ce("Raydium.farm.util");function Ao({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return r}function Je({programId:o,poolId:e,owner:t,version:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var gu=({programId:o,poolId:e})=>ue([e.toBuffer()],o);function Au(o){return{isSet:new lt(1),rewardPerSecond:Y(o.perSecond),rewardOpenTime:Y(o.openTime),rewardEndTime:Y(o.endTime),rewardType:Y(un[o.rewardType])}}function cs(o){return Y(o.endTime).sub(Y(o.openTime)).mul(Y(o.perSecond))}function Un(o){let e=bu[o];return e||go.logWithError("invalid version",o),e}function Xd(o){let e=yu[o];return e||go.logWithError("invalid version",o),e}function zd(o,e,t,n){if(o.version===3||o.version===5){if(o.lastSlot.gte(new lt(t)))return o;let r=new lt(t).sub(o.lastSlot);o.lastSlot=new lt(t);for(let i of o.rewardInfos){if(e.amount.eq(new lt(0)))continue;let s=i.perSlotReward.mul(r);i.perShareReward=i.perShareReward.add(s.mul(new lt(10).pow(new lt(o.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(o.version===6)for(let r of o.rewardInfos){if(r.rewardState.eq(new lt(0)))continue;let i=lt.min(new lt(n),r.rewardEndTime);if(r.rewardOpenTime.gte(i))continue;let a=i.sub(r.rewardLastUpdateTime).mul(r.rewardPerSecond),c=r.totalReward.sub(r.totalRewardEmissioned);c.lt(a)?(a=c,r.rewardLastUpdateTime=r.rewardLastUpdateTime.add(c.div(r.rewardPerSecond))):r.rewardLastUpdateTime=i,!e.amount.eq(new lt(0))&&(r.accRewardPerShare=r.accRewardPerShare.add(a.mul(o.rewardMultiplier).div(e.amount)),r.totalRewardEmissioned=r.totalRewardEmissioned.add(a))}return o}async function GP({connection:o,farmPools:e,owner:t,config:n,chainTime:r}){let i=!1,s=!1,a=new lt(10),c=[];for(let d of e){let p=Ie(d);p.version===6?s=!0:i=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:Je({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await We(o,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=K({},u[g]),y==="state"){let w=Xd(p);(!b||!b.data||b.data.length!==w.span)&&go.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=w.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==on.span)&&go.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=on.decode(b.data);else if(y==="ledger"){let w=Un(p);b&&b.data&&(b.data.length!==w.span&&go.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=w.decode(b.data))}}let m=s||i?await o.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=zd(u[d].state,u[d].lpVault,m,r));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new lt(9)):a.pow(new lt(15)),b=p.rewardInfos.map((g,w)=>{let A=y.rewardDebts[w];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(A)});u[d].wrapped=E(K({},u[d].wrapped),{pendingRewards:b})}return u}function XP(o,e=Date.now()){if(o.version===6){let t=o.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>_a(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>va(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=o.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 ls(o,e,t,n){let r=await o.getAccountInfo(e);if(r===null)throw Error("registrar info check error");let s=lu.decode(r.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await o.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=mu.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Hd=ce("Raydium_farm_instruction"),Po={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 ho(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||Hd.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Hi.span);Hi.encode({instruction:s},a);let c=[P({pubkey:t}),P({pubkey:n}),P({pubkey:i,isWritable:!1}),P({pubkey:An.programId,isWritable:!1}),P({pubkey:Qd,isWritable:!1})];return{instruction:new Ge({programId:r,keys:c,data:a}),instructionType:F.FarmV3CreateLedger}}function wu(o){var n;let e=Buffer.alloc($i.span);$i.encode({instruction:0,nonce:new Kr(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...di,P({pubkey:o.farmId}),P({pubkey:o.farmAuthority,isWritable:!1}),P({pubkey:o.lpVault}),P({pubkey:o.lpMint,isWritable:!1}),P({pubkey:o.lockVault}),P({pubkey:o.lockMint,isWritable:!1}),P({pubkey:(n=o.lockUserAccount)!=null?n:Fe}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let r of o.rewardInfo)t.push(P({pubkey:r.rewardMint,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}));return{instruction:new Ge({programId:o.programId,keys:t,data:e}),instructionType:F.FarmV6Create}}function Pu(o){let e=Buffer.alloc(Zi.span);Zi.encode({instruction:5},e);let t=[P({pubkey:ft,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.lpVault,isWritable:!1}),P({pubkey:o.rewardVault}),P({pubkey:o.userRewardToken}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ge({programId:o.programId,keys:t,data:e}),instructionType:F.FarmV6CreatorWithdraw}}function Zd(o,e,t,n,r,i,s,a,c,u,l,m,d){let p=_([W("depositEntryIndex"),h("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...Po.voterStakeRegistryDeposit,...f]);return new Ge({keys:y,programId:o,data:b})}function $d(o,e,t,n){let r=_([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:An.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([...Po.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ge({keys:i,programId:o,data:a})}function Jd(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([W("depositEntryIndex"),h("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:ft,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let w=Buffer.from([...Po.voterStakeRegistryWithdraw,...g]);return new Ge({keys:b,programId:o,data:w})}function ep(o,e,t,n,r,i){let s=_([W("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:An.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Ge({keys:a,programId:o,data:c})}function tp(o,e,t,n,r,i,s,a){let c=_([W("voterBump"),W("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:An.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...Po.voterStakeRegistryCreateVoter,...l]);return new Ge({keys:u,programId:o,data:m})}function np(o,e,t,n,r,i,s,a,c,u,l,m){let d=_([W("depositEntryIndex"),W("kind"),W("option"),h("startTs"),Ye("periods"),je("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:An.programId,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1},{pubkey:jd,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...Po.voterStakeRegistryCreateDepositEntry,...y]);return new Ge({keys:p,programId:o,data:f})}async function uh({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=os(n,r,i).publicKey,l=Je({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=bo.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new Kr(0)))throw Error("user do not has new stake amount");let y=rs(e,a).publicKey,f=is(e,a).publicKey,{publicKey:b,nonce:g}=ss(n,u,s),w=we(b,y,c).publicKey,{publicKey:A,nonce:k}=as(n,u,s),I=us(t,r,i,s).publicKey,T=[],S=we(s,y,c).publicKey;if(await o.getAccountInfo(S)===null&&T.push(Yd(s,S,s,y)),await o.getAccountInfo(b)===null){let D=ep(t,r,s,i,s,I);T.push(D,tp(n,u,b,A,s,s,g,k))}let{index:B,isInit:M}=await ls(o,u,b,y);return M||T.push(np(n,u,b,w,s,s,y,B,0,void 0,0,!1)),T.push(Zd(n,u,b,w,S,s,l,a,y,f,e,B,p),$d(n,u,b,A)),T}async function ch({connection:o,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:r,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=os(n,r,i).publicKey,l=Je({programId:e,poolId:a,owner:s,version:3}),m=await o.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=bo.decode(m.data);if(d.voteLockedBalance.eq(new Kr(0)))throw Error("user has vote locked balance = 0");let p=rs(e,a).publicKey,y=is(e,a).publicKey,{publicKey:f}=ss(n,u,s),b=we(f,p,c).publicKey,{publicKey:g}=as(n,u,s),w=us(t,r,i,s).publicKey,A=[],{index:k,isInit:I}=await ls(o,u,f,p);if(!I)throw Error("deposit entry index check error");return A.push(Jd(n,u,f,s,w,g,b,we(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),A}function ms({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(Ji.span);Ji.encode({instruction:3,rewardReopenTime:Y(r.openTime),rewardEndTime:Y(r.endTime),rewardPerSecond:Y(r.perSecond)},i);let s=[P({pubkey:ft,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Ge({programId:n.programId,keys:s,data:i})}function ds({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(es.span);es.encode({instruction:4,isSet:new Kr(1),rewardPerSecond:Y(r.perSecond),rewardOpenTime:Y(r.openTime),rewardEndTime:Y(r.endTime),rewardType:Y(un[r.rewardType])},i);let s=[...di,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:r.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Ge({programId:t.programId,keys:s,data:i})}function lh(o){let{farmInfo:e,farmKeys:t,version:n,lpAccount:r,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=o,[l,m]=[new ae(e.programId),new ae(e.id)],d=Je({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(rt.span);rt.encode({instruction:a,amount:c},p);let y=n===6?[P({pubkey:ft,isWritable:!1}),...u?[P({pubkey:An.programId,isWritable:!1})]:[],P({pubkey:m}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:new ae(t.lpVault)}),P({pubkey:d}),P({pubkey:s,isWritable:!1,isSigner:!0}),P({pubkey:r})]:[P({pubkey:m}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:d}),P({pubkey:s,isWritable:!1,isSigner:!0}),P({pubkey:r}),P({pubkey:new ae(t.lpVault)}),P({pubkey:i[0]}),P({pubkey:new ae(t.rewardInfos[0].vault)}),P({pubkey:wo,isWritable:!1}),P({pubkey:ft,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(P({pubkey:i[f]})),y.push(P({pubkey:new ae(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(P({pubkey:new ae(t.rewardInfos[f].vault)})),y.push(P({pubkey:i[f]}));return new Ge({programId:l,keys:y,data:p})}function ko(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new ae(e.programId),new ae(e.id)],u=Je({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:2,amount:Y(s)},l);let m=[P({pubkey:ft,isWritable:!1}),P({pubkey:c}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:new ae(t.lpVault)}),P({pubkey:u}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new ae(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Ge({programId:a,keys:m,data:l})}function To(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ae(e.programId),new ae(e.id)],l=Je({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:12,amount:Y(s)},m);let d=[P({pubkey:u}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ae(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ae(t.rewardInfos[0].vault)}),P({pubkey:wo,isWritable:!1}),P({pubkey:ft,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new ae(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Ge({programId:c,keys:d,data:m})}function Io(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ae(e.programId),new ae(e.id)],l=Je({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Y(s)},m);let d=[P({pubkey:u}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ae(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ae(t.rewardInfos[0].vault)}),P({pubkey:wo,isWritable:!1}),P({pubkey:ft,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Ge({programId:c,keys:d,data:m})}function hu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ae(e.programId),new ae(e.id)],l=Je({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:10,amount:Y(s)},m);let d=[P({pubkey:u}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ae(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ae(t.rewardInfos[0].vault)}),P({pubkey:wo,isWritable:!1}),P({pubkey:ft,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Ge({programId:c,keys:d,data:m})}function ku(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ae(e.programId),new ae(e.id)],l=Je({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:Y(s)},m);let d=[P({pubkey:u}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ae(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ae(t.rewardInfos[0].vault)}),P({pubkey:wo,isWritable:!1}),P({pubkey:ft,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new ae(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Ge({programId:c,keys:d,data:m})}function Tu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,c]=[new ae(e.programId),new ae(e.id)],u=Je({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:1,amount:Y(s)},l);let m=[P({pubkey:ft,isWritable:!1}),P({pubkey:An.programId,isWritable:!1}),P({pubkey:c}),P({pubkey:new ae(t.authority),isWritable:!1}),P({pubkey:new ae(t.lpVault)}),P({pubkey:u}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new ae(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Ge({programId:a,keys:m,data:l})}var Bo=class extends Ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Fe)){let n=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:cs(E(K({},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:r=Fn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new Ae(e.lpMint.address),lockInfo:{lockMint:pu,lockVault:fu},version:6,rewardInfos:t,programId:r},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=ct({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(yo.span);c.addInstruction({instructions:[rp.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:yo.span,programId:a.programId})]});let{publicKey:d,nonce:p}=gu({programId:new Ae(a.programId),poolId:l.publicKey}),y=Ao({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let I of a.rewardInfos){I.openTime>=I.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",I.openTime.toString()),isNaN(un[I.rewardType])&&this.logAndCreateError("rewardType error",I.rewardType),Number(I.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",I.perSecond),f.push(Au(I));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:I,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=I.mint.equals(Fe)?new Ae(Ee.address):I.mint;b.push({rewardMint:x,rewardVault:Ao({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({mint:new Ae(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});w&&c.addInstruction(w),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:k}=wu({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[A],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:r}){var b;let i=gt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(Fe)?new Ae(Ee.address):n.mint,l=a.rewardInfos.findIndex(g=>new Ae(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:Fe,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[ms({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[F.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=gt[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Fe)?new Ae(Ee.address):m.mint,p=a.rewardInfos.findIndex(A=>new Ae(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:Fe,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let w=ms({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[w],instructionTypes:[F.FarmV6Restart]})}return u.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=gt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=r.mint.equals(Fe)?new Ae(Ee.address):r.mint,m=Ao({programId:new Ae(n.programId),poolId:new Ae(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,u.addInstruction({instructions:[ds({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[F.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=gt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ie((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of r){let m=l.mint.equals(Fe)?new Ae(Ee.address):l.mint,d=Ao({programId:new Ae(n.programId),poolId:new Ae(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=ds({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:E(K({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[F.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:r,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=gt[d];ts(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new Ae(n.programId),new Ae(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=Je({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),w=this.createTxBuilder();w.addCustomComputeBudget(l);let A={};for(let V of this.scope.account.tokenAccounts)if(a){let Z=we(this.scope.ownerPubKey,V.mint,V.programId).publicKey;V.publicKey&&Z.equals(V.publicKey)&&(A[V.mint.toString()]=V.publicKey)}else A[V.mint.toString()]=V.publicKey;let k=b.lpMint,I=A[k.address];I||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let V of m){let Z=s&&V.mint.address===j.toString(),G=A[V.mint.address];if(!G){let{account:q,instructionParams:ot}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:V.mint.programId,mint:new Ae(V.mint.address),notUseTokenAccount:Z,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!Z,associatedOnly:Z?!1:a,checkCreateATAOwner:c});G=q,ot&&w.addInstruction(ot)}A[V.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Un(p).decode(x.data)),n.programId!==Fn.toString()&&!S){let{instruction:V,instructionType:Z}=ho({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[V],instructionTypes:[Z]})}let R=ns({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let B={amount:Y(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(V=>new Ae(V))},M=p===6?Tu(B):p===5?ku(B):hu(B),D={3:F.FarmV3Deposit,5:F.FarmV5Deposit,6:F.FarmV6Deposit};return w.addInstruction({instructions:[M],instructionTypes:[D[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:r,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=gt[n.programId];ts(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(c){let B=we(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&B.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=Je({programId:new Ae(n.programId),poolId:new Ae(n.id),owner:this.scope.ownerPubKey,version:p}),B=await this.scope.connection.getAccountInfo(R);if(B)Un(p).decode(B.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:M,instructionType:D}=ho({id:new Ae(y.id),programId:new Ae(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[M],instructionTypes:[D]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:B})}let g=y.lpMint.address,w=s&&g===j.toString(),A=b[g.toString()];if(!A){let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Ae(g),notUseTokenAccount:w,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:w?!1:c,checkCreateATAOwner:u});A=R,B&&f.addInstruction(B)}b[g.toString()]=A;let k=[];for(let R of d){let B=s&&R.mint.address===j.toString(),M=b[R.mint.address];if(!M){let{account:D,instructionParams:V}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new Ae(R.mint.address),notUseTokenAccount:B,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!B,associatedOnly:B?!1:c,checkCreateATAOwner:u});M=D,V&&f.addInstruction(V)}b[R.mint.address]=M,k.push(M)}let I=ns({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});I&&this.logAndCreateError(I);let T={amount:Y(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new Ae(R))},S=p===6?ko(T):p===5?To(T):Io(T),x={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=Ie((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=gt[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Fe.toString()?new Ae(Ee.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Fe,u=this.createTxBuilder(),l;if(t.equals(Fe)){let y=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:cs(E(K({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new O(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[op(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[F.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Pu({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=we(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>E(K({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:w}=y,A=gt[f],k=b.address,I=n&&k===j.toString(),T=m[k];if(!T){let{account:D,instructionParams:V}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Ae(k),notUseTokenAccount:I,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:I?!1:i,checkCreateATAOwner:s});T=D,V&&l.addInstruction(V)}m[k.toString()]=T;let S=[];for(let D of g){let V=n&&D.mint.address===j.toString(),Z=m[D.mint.address];if(!Z){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new Ae(D.mint.address),notUseTokenAccount:V,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!V,associatedOnly:V?!1:i,checkCreateATAOwner:s});Z=G,q&&l.addInstruction(q)}m[D.mint.address]=Z,S.push(Z)}let x=p[w],R={amount:De,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(D=>new Ae(D))},B=A===6?ko(R):A===5?To(R):Io(R),M={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};l.addInstruction({instructions:[B],instructionTypes:[M[A]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as tt}from"@solana/web3.js";import{AccountLayout as zp,NATIVE_MINT as ac,TOKEN_PROGRAM_ID as Qn}from"@solana/spl-token";var Nh=_([Ye("mintAuthorityOption"),C("mintAuthority"),h("supply"),W("decimals"),W("isInitialized"),Ye("freezeAuthorityOption"),C("freezeAuthority")]);import{PublicKey as ip}from"@solana/web3.js";import{MintLayout as Iu,TOKEN_PROGRAM_ID as sp}from"@solana/spl-token";var Uh=async({connection:o,mint:e})=>{let t=await o.getAccountInfo(new ip(e));return!t||t.data.length!==Iu.span?void 0:Iu.decode(t.data)},Gh=({mint:o,decimals:e,programId:t=sp,logoURI:n="",priority:r=3})=>{let i=o.toBase58().substring(0,6);return{address:o.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:r}},Cr=o=>new ye({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),xo=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=Oe(i,["amount","isRaw","name"]);return new fe(new ye({mint:pt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};function Xh(o){return o.address===Mt.address?Ee:o}function zh(o){return o.address===Ee.address?Mt:o}var it=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=Oe(i,["address","programId","decimals"]);return K({chainId:101,address:pt(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},cn=o=>o?E(K({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:E(K({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:E(K({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as zn,ASSOCIATED_TOKEN_PROGRAM_ID as Pp}from"@solana/spl-token";import{PublicKey as Pe,TransactionInstruction as Xt,SystemProgram as Lu,SYSVAR_RENT_PUBKEY as hp}from"@solana/web3.js";var ps=_([W("instruction"),h("amountIn"),h("minAmountOut")]),fs=_([W("instruction"),h("maxAmountIn"),h("amountOut")]),rk=_([W("instruction"),W("nonce")]),ys=_([W("instruction"),W("nonce"),h("startTime")]),So=_([h("status"),h("nonce"),h("maxOrder"),h("depth"),h("baseDecimal"),h("quoteDecimal"),h("state"),h("resetFlag"),h("minSize"),h("volMaxCutRatio"),h("amountWaveRatio"),h("baseLotSize"),h("quoteLotSize"),h("minPriceMultiplier"),h("maxPriceMultiplier"),h("systemDecimalValue"),h("minSeparateNumerator"),h("minSeparateDenominator"),h("tradeFeeNumerator"),h("tradeFeeDenominator"),h("pnlNumerator"),h("pnlDenominator"),h("swapFeeNumerator"),h("swapFeeDenominator"),h("baseNeedTakePnl"),h("quoteNeedTakePnl"),h("quoteTotalPnl"),h("baseTotalPnl"),h("poolOpenTime"),h("punishPcAmount"),h("punishCoinAmount"),h("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),h("swapBase2QuoteFee"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),h("swapQuote2BaseFee"),C("baseVault"),C("quoteVault"),C("baseMint"),C("quoteMint"),C("lpMint"),C("openOrders"),C("marketId"),C("marketProgramId"),C("targetOrders"),C("withdrawQueue"),C("lpVault"),C("owner"),h("lpReserve"),X(h(),3,"padding")]),ap=_([h("accountType"),h("status"),h("nonce"),h("maxOrder"),h("depth"),h("baseDecimal"),h("quoteDecimal"),h("state"),h("resetFlag"),h("minSize"),h("volMaxCutRatio"),h("amountWaveRatio"),h("baseLotSize"),h("quoteLotSize"),h("minPriceMultiplier"),h("maxPriceMultiplier"),h("systemDecimalsValue"),h("abortTradeFactor"),h("priceTickMultiplier"),h("priceTick"),h("minSeparateNumerator"),h("minSeparateDenominator"),h("tradeFeeNumerator"),h("tradeFeeDenominator"),h("pnlNumerator"),h("pnlDenominator"),h("swapFeeNumerator"),h("swapFeeDenominator"),h("baseNeedTakePnl"),h("quoteNeedTakePnl"),h("quoteTotalPnl"),h("baseTotalPnl"),h("poolOpenTime"),h("punishPcAmount"),h("punishCoinAmount"),h("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),h("swapQuote2BaseFee"),h("swapBase2QuoteFee"),C("baseVault"),C("quoteVault"),C("baseMint"),C("quoteMint"),C("lpMint"),C("modelDataAccount"),C("openOrders"),C("marketId"),C("marketProgramId"),C("targetOrders"),C("owner"),X(h(),64,"padding")]),bs=_([W("instruction"),h("baseAmountIn"),h("quoteAmountIn"),h("fixedSide")]),gs=_([W("instruction"),h("amountIn")]),ik={4:So,5:ap},Bu=_([h("fee")]);import{PublicKey as up}from"@solana/web3.js";var Xn=new up("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Pn=5e4,cp=_([h("x"),h("y"),h("price")]),lp=_([h("accountType"),h("status"),h("multiplier"),h("validDataCount"),X(cp,Pn,"DataElement")]);function mp(o,e){return[0,Pn-2]}function dp(o){return[0,Pn-2]}function pp(o){return[0,Pn-2]}function fp(o,e,t){let[n,r]=mp(e,t),i=n,s=r,a=0,c=e*o.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=Pn-2)return[a,a,!1];let u=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function As(o,e,t){let[n,r,i]=fp(o,e,t);if(!i)return 0;if(n===r){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,c=o.DataElement[r].x,u=o.DataElement[r].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*o.multiplier*l/p}}function wn(o,e,t){return e*o.multiplier/t}function xu(o,e,t){return e*t/o.multiplier}function yp(o,e){let[t,n]=dp(e),r=t,i=n,s=0,a=e;for(;r<i;){if(s=Math.floor((i+r)/2),s<=0||s>Pn-2)return[s,s,!1];let c=o.DataElement[s].x,u=o.DataElement[s-1].x,l=o.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)i=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];r=s+1}}return[s,s,!1]}function bp(o,e){let[t,n]=pp(e),r=t,i=n,s=0,a=e;for(;r<=i;){if(s=Math.floor((i+r)/2),s<=0||s>=Pn-2)return[s,s,!1];let c=o.DataElement[s].y,u=o.DataElement[s-1].y,l=o.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)r=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function Su(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=yp(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(r-c)*o.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-r)*o.multiplier/l),[y,f,!1,a]}}}function gp(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=bp(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let c=o.DataElement[i].x,u=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-r)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function Ap(o,e){let t=Su(o,e,0,!1);return t[3]?t[0]:0}function Ku(o,e,t,n){let r=As(o,e,t),i=wn(o,e,r),s=wn(o,t,r),a=wn(o,n,r),c=!0,[u,l,m,d]=Su(o,i,a,c);if(!d)return 0;if(m)return n*o.multiplier/u;{let p=s-l;return xu(o,p,r)}}function Cu(o,e,t,n){let r=As(o,e,t),i=wn(o,e,r),s=wn(o,t,r),a=wn(o,n,r),c=!1,[u,l,m,d]=gp(o,s,a,c);if(!d)return 0;if(m)return n*u/o.multiplier;{let p=i-l;return xu(o,p,r)}}function wp(o){let e=lp.decode(o);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 Ru(o,e,t,n){let r=Ap(o,wn(o,e,As(o,e,t)))/o.multiplier;return n?r:1/r}var Gn=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(Xn);e&&(this._layoutData=wp(e==null?void 0:e.data))}}};var Ou=ce("Raydium_liquidity_instruction");function Nu(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(bs.span);bs.encode({instruction:3,baseAmountIn:Y(r),quoteAmountIn:Y(i),fixedSide:s==="base"?De:Pa},a);let c=[P({pubkey:zn,isWritable:!1}),P({pubkey:new Pe(e.id)}),P({pubkey:new Pe(t.authority),isWritable:!1}),P({pubkey:new Pe(t.openOrders),isWritable:!1}),P({pubkey:new Pe(t.targetOrders)}),P({pubkey:new Pe(e.lpMint.address)}),P({pubkey:new Pe(t.vault.A)}),P({pubkey:new Pe(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(P({pubkey:Xn})),c.push(P({pubkey:new Pe(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new Pe(t.marketEventQueue),isWritable:!1})),new Xt({programId:new Pe(e.programId),keys:c,data:a})}function ws(o){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=o,i=Ie(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(gs.span);gs.encode({instruction:4,amountIn:Y(r)},a);let c=[P({pubkey:zn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.mintLp.address}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return s===5?c.push(P({pubkey:Xn})):(c.push(P({pubkey:i.id})),c.push(P({pubkey:i.id}))),c.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks})),new Xt({programId:i.programId,keys:c,data:a})}return new Xt({programId:i.programId,keys:[]})}function Mu({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:i,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:w,openTime:A,coinAmount:k,pcAmount:I,ammConfigId:T,feeDestinationId:S}){let x=_([W("instruction"),W("nonce"),h("openTime"),h("pcAmount"),h("coinAmount")]),R=[{pubkey:zn,isSigner:!1,isWritable:!1},{pubkey:Pp,isSigner:!1,isWritable:!1},{pubkey:Lu.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],B=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:w,openTime:A,coinAmount:k,pcAmount:I},B),{instruction:new Xt({keys:R,programId:o,data:B}),instructionType:F.AmmV4CreatePool}}function hk(o){let e=_([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[P({pubkey:new Pe(o.id),isWritable:!1}),P({pubkey:new Pe(o.authority),isWritable:!1}),P({pubkey:new Pe(o.openOrders),isWritable:!1}),P({pubkey:new Pe(o.vault.A),isWritable:!1}),P({pubkey:new Pe(o.vault.B),isWritable:!1}),P({pubkey:new Pe(o.mintLp.address),isWritable:!1}),P({pubkey:new Pe(o.marketId),isWritable:!1}),P({pubkey:new Pe(o.marketEventQueue),isWritable:!1})];return new Xt({programId:new Pe(o.programId),keys:n,data:t})}function kp({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=Ie(o),s=Buffer.alloc(ps.span);ps.encode({instruction:9,amountIn:Y(t),minAmountOut:Y(n)},s);let a=[P({pubkey:zn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders})];return r===4&&a.push(P({pubkey:i.targetOrders})),a.push(P({pubkey:i.vault.A}),P({pubkey:i.vault.B})),r===5&&a.push(P({pubkey:Xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new Xt({programId:i.programId,keys:a,data:s})}function Tp({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=Ie(o),s=Buffer.alloc(fs.span);fs.encode({instruction:11,maxAmountIn:Y(t),amountOut:Y(n)},s);let a=[P({pubkey:zn,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return r===5&&a.push(P({pubkey:Xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Xt({programId:i.programId,keys:a,data:s})}function Rr(o){let{poolKeys:e,version:t,userKeys:n,amountIn:r,amountOut:i,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return kp(E(K({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return Tp(E(K({},a),{maxAmountIn:r,amountOut:i}),t);Ou.logWithError("invalid params","params",o)}throw Ou.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function kk({poolKeys:o,userKeys:e,startTime:t}){let n=Buffer.alloc(ys.span);ys.encode({instruction:0,nonce:5,startTime:Y(t)},n);let r=Ie(o),i=[P({pubkey:zn,isWritable:!1}),P({pubkey:Lu.programId,isWritable:!1}),P({pubkey:hp,isWritable:!1}),P({pubkey:r.id}),P({pubkey:r.authority,isWritable:!1}),P({pubkey:r.openOrders}),P({pubkey:r.mintLp.address}),P({pubkey:r.mintA.address,isWritable:!1}),P({pubkey:r.mintB.address,isWritable:!1}),P({pubkey:r.vault.A,isWritable:!1}),P({pubkey:r.vault.B,isWritable:!1}),P({pubkey:r.id}),P({pubkey:r.targetOrders}),P({pubkey:e.lpTokenAccount}),P({pubkey:r.id,isWritable:!1}),P({pubkey:r.marketProgramId,isWritable:!1}),P({pubkey:r.marketId,isWritable:!1}),P({pubkey:e.payer,isSigner:!0})];return new Xt({programId:r.programId,keys:i,data:n})}function _u({poolKeys:o}){let e=_([W("instruction"),W("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[P({pubkey:new Pe(o.id),isWritable:!1}),P({pubkey:new Pe(o.authority),isWritable:!1}),P({pubkey:new Pe(o.openOrders),isWritable:!1}),P({pubkey:new Pe(o.vault.A),isWritable:!1}),P({pubkey:new Pe(o.vault.B),isWritable:!1}),P({pubkey:new Pe(o.mintLp.address),isWritable:!1}),P({pubkey:new Pe(o.marketId),isWritable:!1}),P({pubkey:new Pe(o.marketEventQueue),isWritable:!1})];return{instruction:new Xt({programId:new Pe(o.programId),keys:n,data:t})}}import{ASSOCIATED_TOKEN_PROGRAM_ID as tc,TOKEN_2022_PROGRAM_ID as ln,TOKEN_PROGRAM_ID as He}from"@solana/spl-token";import{Keypair as Ss,PublicKey as U,SystemProgram as Mo,TransactionInstruction as Ot}from"@solana/web3.js";import nc from"bn.js";import _p from"bn.js";function vu(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function Ik(o){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,o,!1),new Uint8Array(e)}function Bk(o){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,o,!1),new Uint8Array(e)}function Or(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Ps(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function hs(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function Ko(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Vu(o,e){return Ko(o,e)?null:Ps(o,e)}function Fu(o,e){return Ko(o,e)?null:hs(o,e)}var Ip=Buffer.from("amm_config","utf8"),Bp=Buffer.from("pool","utf8"),xp=Buffer.from("pool_vault","utf8"),Sp=Buffer.from("pool_reward_vault","utf8"),Eu=Buffer.from("position","utf8"),Kp=Buffer.from("tick_array","utf8"),Cp=Buffer.from("operation","utf8"),Rp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Op=Buffer.from("observation","utf8");function Ck(o,e){return ue([Ip,vu(e)],o)}function Du(o,e,t,n){return ue([Bp,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function ks(o,e,t){return ue([xp,e.toBuffer(),t.toBuffer()],o)}function Wu(o,e,t){return ue([Sp,e.toBuffer(),t.toBuffer()],o)}function he(o,e,t){return ue([Kp,e.toBuffer(),Or(t)],o)}function hn(o,e,t,n){return ue([Eu,e.toBuffer(),Or(t),Or(n)],o)}function At(o,e){return ue([Eu,e.toBuffer()],o)}function Lr(o){return ue([Buffer.from("metadata","utf8"),_n.toBuffer(),o.toBuffer()],_n)}function Co(o){return ue([Cp],o)}function mt(o,e){return ue([Rp,e.toBuffer()],o)}function qu(o,e){return ue([Op,e.toBuffer()],o)}import wt from"bn.js";var pe=new wt(0),yt=new wt(1),zt=new wt(-1),bt=new wt(1).shln(64),Nr=new wt(1).shln(128),Ts=bt.sub(yt),Ro=64,Uu=Nr.subn(1),et=-443636,st=-et,Pt=new wt("4295048016"),ht=new wt("79226673521066979257578248091"),Mr=new wt("4295048017"),_r=new wt("79226673521066979257578248090"),Gu=16,Xu="59543866431248",zu="184467440737095516",Qu="15793534762490258745",vr=new wt(10).pow(new wt(6)),Lp=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(Lp||{}),Lk={[500]:10,[3e3]:60,[1e4]:200},Nk={version:6,liquidity:pe,tickCurrent:0,feeGrowthGlobalX64A:pe,feeGrowthGlobalX64B:pe,protocolFeesTokenA:pe,protocolFeesTokenB:pe,swapInAmountTokenA:pe,swapOutAmountTokenB:pe,swapInAmountTokenB:pe,swapOutAmountTokenA:pe,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},Yu={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:[]},Mk=new wt("18446744073700000000");var Np=15,me=class{static async getTickArrays(e,t,n,r,i,s,a){let c=[],u=H.getTickArrayStartIndexByTick(r,i),l=H.getInitializedTickArrayInRange(s,a,i,u,Math.floor(Np/2));for(let p=0;p<l.length;p++){let{publicKey:y}=he(t,n,l[p]);c.push(y)}let m=(await Bt(e,c)).map(p=>p!==null?Oo.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=E(K({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,r,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,r,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=H.getNextTickArrayStartIndex(u,i,s),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,r,i){let s=Math.floor(e/me.tickCount(t)),a=n?H.searchLowBitFromStart(r,i,s-1,1,t):H.searchHightBitFromStart(r,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,r){let i;if(r){let a=qe-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a-1}}else{let a=0;for(;a<qe;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=he(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,i,s){let a=H.getTickArrayStartIndexByTick(r,i),c=Math.floor((r-a)/i),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<qe;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=he(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(H.checkIsOutOfBoundary(e)){if(e>st)return!1;let n=H.getTickArrayStartIndexByTick(et,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return qe*e}};import se from"bn.js";import{PublicKey as Rt}from"@solana/web3.js";import Be from"bn.js";var Is=14,Qt=class{static maxTickInTickarrayBitmap(e){return e*qe*kn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(r+=1);let i=n*r;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,r){if(!me.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=r?t-me.tickCount(n):t+me.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*qe,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(r){let l=e.shln(1024-u-1),m=Vu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=Fu(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-me.tickCount(n)}}}},Lo=class{static getBitmapOffset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Qt.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&r--,r}static getBitmap(e,t,n){let r=this.getBitmapOffset(e,t);return e<0?{offset:r,tickarrayBitmap:n.negativeTickArrayBitmap[r]}:{offset:r,tickarrayBitmap:n.positiveTickArrayBitmap[r]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:r}=this.extensionTickBoundary(t);if(e>=r&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Qt.maxTickInTickarrayBitmap(e),n=-t;if(st<=t)throw Error(`extensionTickBoundary check error: ${st}, ${t}`);if(n<=et)throw Error(`extensionTickBoundary check error: ${n}, ${et}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:r}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:H.mergeTickArrayBitmap(r).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let i=me.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,r);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,r){let{minValue:i,maxValue:s}=Qt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let c=H.mergeTickArrayBitmap(e).shln(kn-1-a),u=Ko(512,c)?null:Ps(512,c);if(u!==null){let l=t-u*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=H.mergeTickArrayBitmap(e).shrn(a),u=Ko(512,c)?null:hs(512,c);if(u!==null){let l=t+u*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-me.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Qt.maxTickInTickarrayBitmap(t),r=Math.floor(n/me.tickCount(t));return e<0&&n!=0&&(r=kn-r),r}};import Vt from"bn.js";var No=class{static getfeeGrowthInside(e,t,n){let r=new Vt(0),i=new Vt(0);e.tickCurrent>=t.tick?(r=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Vt(0),a=new Vt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,bt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,bt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,bt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,bt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,r){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,bt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,r){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,bt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Vt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Vt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Vt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Vt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,add:i,epochInfo:s}){var b,g,w,A;let a=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),c=ee.getSqrtPriceX64FromTick(t.tickLower),u=ee.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+r:1-r,m=le.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[be(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),be(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[be(new Vt(new O(m.amountA.toString()).mul(l).toFixed(0)),(w=e.mintA.extensions)==null?void 0:w.feeConfig,s,!0),be(new Vt(new O(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Kt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as ju}from"@solana/spl-token";var Ce=class{static getOutputAmountAndRemainAccounts(e,t,n,r,i,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=Tn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,l,i,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(zt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=he(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=Tn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(zt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Ce.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Lo.checkTickArrayIsInit(me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):H.checkTickArrayIsInitialized(H.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=he(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=he(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/me.tickCount(e.tickSpacing)),r=t?H.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):H.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return r.length>0?{isExist:!0,nextStartIndex:r[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=me.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:i}=Qt.nextInitializedTickArrayStartIndex(H.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=Lo.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<et||t>st)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,rewardInfos:i}){var a,c,u;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=E(K({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Rt(d)});if(p.tokenMint.equals(Rt.default))continue;if(n<=p.openTime.toNumber()||r.eq(pe)){s.push(p);continue}let y=new Be(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),w=ne.mulDivFloor(f,p.emissionsPerSecondX64,bt),A=p.rewardTotalEmissioned.add(w);s.push(E(K({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let i of t){let s=H.getTickArrayStartIndexByTick(i,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=Qt.maxTickInTickarrayBitmap(e),n=-t;return t>st&&(t=me.getArrayStartIndex(st,e)+me.tickCount(e)),n<et&&(n=me.getArrayStartIndex(et,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/me.tickCount(t)*kn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await We(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=Zu.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},i=[];for(let c of t){let u=H.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=H.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=he(c.programId,c.id,m);i.push({pubkey:d}),r[d.toString()]=c.id}}let s=await We(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=r[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Oo.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=E(K({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:r=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(At(p,d).publicKey);let l=await Bt(t,u,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=Vr.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=H._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),w=H._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:k}=le.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,w.tickSqrtPriceX64,p.liquidity,!1),I=1/(1-Math.sqrt(Math.sqrt(g.price.div(w.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:w.price,amountA:A,amountB:k,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>E(K({},x),{pendingReward:new Be(0)})),leverage:I,tokenFeeAmountA:new Be(0),tokenFeeAmountB:new Be(0)}];let T=await H.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await H.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await Bt(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=Oo.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let w=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[w].toString()],I=y[m[A].toString()],T=k.ticks[H.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=I.ticks[H.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await No.GetPositionFees(f,g,T,S),B=await No.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Be(0))?x:new Be(0),g.tokenFeeAmountB=R.gte(new Be(0))?R:new Be(0);for(let M=0;M<B.length;M++)g.rewardInfos[M].pendingReward=B[M].gte(new Be(0))?B[M]:new Be(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:i,slippage:s,priceLimit:a=new O(0),catchLiquidityInsufficient:c=!1}){var D;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new O(0))?u=l?Pt.add(new Be(1)):ht.sub(new Be(1)):u=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=be(i,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:w}=Ce.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((D=p.fee)!=null?D:pe),u,c),A=be(f,d,r,!1),k=ee.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),I=l?k:new O(1).div(k),T=f.mul(new Be(Math.floor((1-s)*1e10))).div(new Be(1e10)),S=be(T,d,r,!1),x=l?e.currentPrice:new O(1).div(e.currentPrice),R=new O(I).sub(x).abs(),B=x,M=new Me(new O(R).mul(10**15).toFixed(0),new O(B).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:Kt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:I,priceImpact:M,fee:w,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=r.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new ye(E(K({},u),{mint:u.address,isToken2022:u.programId===ju.toBase58()})),new ye(E(K({},l),{mint:l.address,isToken2022:l.programId===ju.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:w,executionPrice:A,priceImpact:k,fee:I,remainingAccounts:T,executionPriceX64:S}=Ce.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Rt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=E(K({},y),{amount:new fe(m,y.amount),fee:y.fee===void 0?void 0:new fe(m,y.fee)}),R=E(K({},f),{amount:new fe(d,f.amount),fee:f.fee===void 0?void 0:new fe(d,f.fee)}),B=E(K({},b),{amount:new fe(d,b.amount),fee:b.fee===void 0?void 0:new fe(d,b.fee)}),M=new Ue({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:w.mul(new O(10**(20+d.decimals))).toFixed(0)}),D=new Ue({baseToken:m,denominator:new Be(10).pow(new Be(20+m.decimals)),quoteToken:d,numerator:A.mul(new O(10**(20+d.decimals))).toFixed(0)}),V=new fe(m,I);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:B,expirationTime:g,currentPrice:M,executionPrice:D,priceImpact:k,fee:V,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountOut:i,slippage:s,priceLimit:a=new O(0)}){var B;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new O(0))?l=c?ht.sub(new Be(1)):Pt.add(new Be(1)):l=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=be(i,u[n.toString()],r,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=Ce.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((B=m.fee)!=null?B:pe),l),b=c?e.mintB.address:e.mintA.address,g=be(d,u[b],r,!1),w=ee.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),A=c?w:new O(1).div(w),k=d.mul(new Be(Math.floor((1+s)*1e10))).div(new Be(1e10)),I=be(k,u[b],r,!0),T=c?e.currentPrice:new O(1).div(e.currentPrice),S=new O(A).sub(T).abs(),x=T,R=new Me(new O(S).mul(10**15).toFixed(0),new O(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:I,realAmountOut:m,expirationTime:Kt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:R,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let i=e[t],s=H.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=H.getTickPrice({poolInfo:e,tick:r,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:r,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[pt(e.mintA.address).toString()],d=r[pt(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),b=ee.getSqrtPriceX64FromTick(s),g=ee.getSqrtPriceX64FromTick(a),{amountSlippageA:w,amountSlippageB:A}=le.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:I}=le.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new O(w.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(A.toString()).div(new O(10).pow(y)).mul(d.value)),S=new O(k.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(I.toString()).div(new O(10).pow(y)).mul(d.value)),x=new O(1).div(T.add(S)),B=new O(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),M=3600*24*365,D=e.rewardDefaultInfos.map(V=>{var q,ot;let Z=V.mint.decimals,G=r[V.mint.address];return c<((q=V.startTime)!=null?q:0)||c>((ot=V.endTime)!=null?ot:0)||!V.perSecond||!G||Z===void 0?0:new O(G.value).mul(new O(V.perSecond).mul(M)).div(new O(10).pow(Z)).mul(x).mul(100).toNumber()});return{feeApr:B,rewardsApr:D,apr:B+D.reduce((V,Z)=>V+Z,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:r,amount:i,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,w;let l=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),m=ee.getSqrtPriceX64FromTick(n),d=ee.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=be(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Be(new O(y.amount.sub((w=y.fee)!=null?w:pe).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?le.getLiquidityFromTokenAmountA(m,d,f,!a):new Be(0);else if(l.lte(d)){let A=le.getLiquidityFromTokenAmountA(l,d,f,!a),k=le.getLiquidityFromTokenAmountB(m,l,f);b=t?A:k}else b=t?new Be(0):le.getLiquidityFromTokenAmountB(m,d,f);return Ce.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:r,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:r,liquidity:i,slippage:s,add:a}){var b,g,w,A;let c=ee.getSqrtPriceX64FromTick(n),u=ee.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=le.getAmountsFromLiquidity(ee.priceToSqrtPriceX64(new O(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[be(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),be(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[be(m.amountA.muln(l),(w=t.mintA.extensions)==null?void 0:w.feeConfig,e,!0),be(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Kt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(c=>!n[c.id]).map(c=>new Rt(c.id));(await Bt(e,r)).forEach((c,u)=>{!c||(n[r[u].toBase58()]=In.decode(c.data))});let s=t.map(c=>mt(new Rt(c.programId),new Rt(c.id)).publicKey),a=await Ce.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>E(K({},c),{[u.id]:E(K({},n[u.id]),{id:new Rt(u.id),version:6,programId:new Rt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:E(K({},u.config),{id:new Rt(u.config.id),fundOwner:""}),currentPrice:new O(u.price),exBitmapInfo:a[mt(new Rt(u.programId),new Rt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber()})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function wT({poolInfo:o,tickLower:e,tickUpper:t,amountA:n,amountB:r,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var A,k,I,T;let[u,l,m,d]=e<t?[e,t,n,r]:[t,e,r,n],p=ee.priceToSqrtPriceX64(new O(o.price),o.mintA.decimals,o.mintB.decimals),y=ee.getSqrtPriceX64FromTick(u),f=ee.getSqrtPriceX64FromTick(l),[b,g]=[be(m,(A=o.mintA.extensions)==null?void 0:A.feeConfig,a,!c),be(d,(k=o.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],w=le.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((I=b.fee)!=null?I:pe),g.amount.sub((T=g.fee)!=null?T:pe));return le.getAmountsOutFromLiquidity({poolInfo:o,tickLower:e,tickUpper:t,liquidity:w,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var Bs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Hu(o){return E(K({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:Bs,week:Bs,month:Bs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:E(K({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),i=r.div(n);return r.mod(n).eq(pe)||(i=i.add(yt)),i}static mulDivFloor(e,t,n){if(n.eq(pe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(pe))throw new Error("division by 0");return e.mul(t).add(n.sub(yt)).div(n)}static x64ToDecimal(e,t){return new O(e.toString()).div(O.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new se(e.mul(O.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Nr).sub(t).mod(Nr)}};function Xe(o,e){return xs(o.mul(e),64,256)}function Mp(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function xs(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ee=class{static sqrtPriceX64ToPrice(e,t,n){return ne.x64ToDecimal(e).pow(2).mul(O.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(O.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(pe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(pe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,r){if(!e.gt(pe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(pe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,r){if(n.eq(pe))return e;let i=t.shln(Ro);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,yt,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return ne.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let i=n.shln(Ro);if(r)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,yt,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<et||e>st)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new se("18445821805675395072"):new se("18446744073709551616");return(t&2)!=0&&(n=Xe(n,new se("18444899583751176192"))),(t&4)!=0&&(n=Xe(n,new se("18443055278223355904"))),(t&8)!=0&&(n=Xe(n,new se("18439367220385607680"))),(t&16)!=0&&(n=Xe(n,new se("18431993317065453568"))),(t&32)!=0&&(n=Xe(n,new se("18417254355718170624"))),(t&64)!=0&&(n=Xe(n,new se("18387811781193609216"))),(t&128)!=0&&(n=Xe(n,new se("18329067761203558400"))),(t&256)!=0&&(n=Xe(n,new se("18212142134806163456"))),(t&512)!=0&&(n=Xe(n,new se("17980523815641700352"))),(t&1024)!=0&&(n=Xe(n,new se("17526086738831433728"))),(t&2048)!=0&&(n=Xe(n,new se("16651378430235570176"))),(t&4096)!=0&&(n=Xe(n,new se("15030750278694412288"))),(t&8192)!=0&&(n=Xe(n,new se("12247334978884435968"))),(t&16384)!=0&&(n=Xe(n,new se("8131365268886854656"))),(t&32768)!=0&&(n=Xe(n,new se("3584323654725218816"))),(t&65536)!=0&&(n=Xe(n,new se("696457651848324352"))),(t&131072)!=0&&(n=Xe(n,new se("26294789957507116"))),(t&262144)!=0&&(n=Xe(n,new se("37481735321082"))),e>0&&(n=Uu.div(n)),n}static getTickFromPrice(e,t,n){return ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(ht)||e.lt(Pt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new se(t-64),r=Mp(n,32,128),i=new se("8000000000000000","hex"),s=0,a=new se(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new se(0))&&s<Gu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let u=a.shrn(32),m=r.add(u).mul(new se(Xu)),d=xs(m.sub(new se(zu)),64,128).toNumber(),p=xs(m.add(new se(Qu)),64,128).toNumber();return d==p?d:ee.getSqrtPriceX64FromTick(p).lte(e)?p:d}},Bn=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,n,r))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,r){let i=Bn.getTickWithPriceAndTickspacing(e,t,n,r),s=ee.getSqrtPriceX64FromTick(i);return ee.sqrtPriceX64ToPrice(s,n,r)}},le=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(pe))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Ro),s=t.sub(e);return r?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),yt,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(pe))throw new Error("sqrtPriceX64A must greater than 0");return r?ne.mulDivCeil(n,t.sub(e),bt):ne.mulDivFloor(n,t.sub(e),bt)}static getLiquidityFromTokenAmountA(e,t,n,r){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return r?ne.mulDivRoundingUp(a,yt,Ts):a.shrn(Ro)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,Ts,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return le.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=le.getLiquidityFromTokenAmountA(e,n,r,!1),a=le.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return le.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:le.getTokenAmountAFromLiquidity(t,n,r,i),amountB:new se(0)};if(e.lt(n)){let s=le.getTokenAmountAFromLiquidity(e,n,r,i),a=le.getTokenAmountBFromLiquidity(t,e,r,i);return{amountA:s,amountB:a}}else return{amountA:new se(0),amountB:le.getTokenAmountBFromLiquidity(t,n,r,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,i,s,a){let{amountA:c,amountB:u}=le.getAmountsFromLiquidity(e,t,n,r,s),l=i?1+a:1-a,m=new se(new O(c.toString()).mul(l).toFixed(0)),d=new se(new O(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee:c}){var w,A,k,I;let u=ee.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),l=ee.getSqrtPriceX64FromTick(t),m=ee.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=le.getAmountsFromLiquidity(u,l,m,r,s),[y,f]=[be(p.amountA,(w=e.mintA.extensions)==null?void 0:w.feeConfig,a,c),be(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,c)],[b,g]=[be(new se(new O(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),be(new se(new O(p.amountB.toString()).mul(d).toFixed(0)),(I=e.mintB.extensions)==null?void 0:I.feeConfig,a,c)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Kt(y.expirationTime,f.expirationTime)}}},Tn=class{static swapCompute(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(pe))throw new Error("amountSpecified must not be 0");if(y||(y=s?Pt.add(yt):ht.sub(yt)),s){if(y.lt(Pt))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(ht))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(pe),g={amountSpecifiedRemaining:d,amountCalculated:pe,sqrtPriceX64:m,tick:u>p?Math.min(p+me.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new se(0)},w=p,A=n[p],k=0,I=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(pe)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=H.nextInitTick(A,g.tick,l,s,I),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let M=Ce.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:i},w,s);if(!M.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}w=M.nextStartIndex;let{publicKey:D}=he(e,t,w);R=D,A=n[w];try{x=H.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==w&&R&&(g.accounts.push(R),p=w),T.tickNext<et?T.tickNext=et:T.tickNext>st&&(T.tickNext=st),T.sqrtPriceNextX64=ee.getSqrtPriceX64FromTick(T.tickNext);let B;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?B=y:B=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=Tn.swapStepCompute(g.sqrtPriceX64,B,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let M=x.liquidityNet;s&&(M=M.mul(zt)),g.liquidity=le.addDelta(g.liquidity,M)}I=T.tickNext!=g.tick&&!s&&A.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let M=ee.getTickFromSqrtPriceX64(g.sqrtPriceX64);I=M!=g.tick&&!s&&A.startTickIndex===M,g.tick=M}++k}try{let{nextStartIndex:T,isExist:S}=me.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==T&&(g.accounts.push(he(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:pe,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,r,i){let s={sqrtPriceX64Next:new se(0),amountIn:new se(0),amountOut:new se(0),feeAmount:new se(0)},a=e.gte(t),c=r.gte(pe);if(c){let l=ne.mulDivFloor(r,vr.sub(new se(i.toString())),vr);s.amountIn=a?le.getTokenAmountAFromLiquidity(t,e,n,!0):le.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?le.getTokenAmountBFromLiquidity(t,e,n,!1):le.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(zt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromOutput(e,n,r.mul(zt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=le.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=le.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:le.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:le.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(r.mul(zt))&&(s.amountOut=r.mul(zt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new se(i),vr.sub(new se(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var qe=60,kn=512,H=class{static getTickArrayAddressByTick(e,t,n,r){let i=H.getTickArrayStartIndexByTick(n,r),{publicKey:s}=he(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=H.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=qe)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=me.tickCount(t),r=e/n;return e<0&&e%n!=0?r=Math.ceil(r)-1:r=Math.floor(r),r}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*me.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*qe,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*qe,i=Math.floor(t/r)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*r}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*qe:e+t*qe}static mergeTickArrayBitmap(e){let t=new _p(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,r,i){let s=Math.floor(r/(n*qe));return[...H.searchLowBitFromStart(e,t,s-1,i,n),...H.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return H.searchHightBitFromStart(e,t,0,kn,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=H.getAllInitializedTickArrayStartIndex(n,r,i);for(let c of a){let{publicKey:u}=he(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>H.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===r)break}let c=me.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>H.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===r)break}let c=me.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<et||e>st}static nextInitTick(e,t,n,r,i){if(me.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(r)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<qe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=qe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<qe;){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 r=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new O(1).div(i),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new O(1).div(t),i=Bn.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new O(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new O(1).div(i),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new O(1).div(t),i=Bn.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new O(1).div(a)}}};var $u=_([ge(8),W("bump"),qt("index"),C(""),Ye("protocolFeeRate"),Ye("tradeFeeRate"),qt("tickSpacing"),X(h(),8,"")]),vp=_([Ye("blockTimestamp"),Dn("tickCumulative"),X(h(),4)]),Ju=_([ge(8),je("initialized"),h("recentEpoch"),qt("observationIndex"),C("poolId"),X(vp,100,"observations"),X(h(),4)]),Vp=_([W("rewardState"),h("openTime"),h("endTime"),h("lastUpdateTime"),J("emissionsPerSecondX64"),h("rewardTotalEmissioned"),h("rewardClaimed"),C("tokenMint"),C("tokenVault"),C("creator"),J("rewardGrowthGlobalX64")]),In=_([ge(8),W("bump"),C("ammConfig"),C("creator"),C("mintA"),C("mintB"),C("vaultA"),C("vaultB"),C("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),qt("tickSpacing"),J("liquidity"),J("sqrtPriceX64"),Qe("tickCurrent"),Ye(),J("feeGrowthGlobalX64A"),J("feeGrowthGlobalX64B"),h("protocolFeesTokenA"),h("protocolFeesTokenB"),J("swapInAmountTokenA"),J("swapOutAmountTokenB"),J("swapInAmountTokenB"),J("swapOutAmountTokenA"),W("status"),X(W(),7,""),X(Vp,3,"rewardInfos"),X(h(),16,"tickArrayBitmap"),h("totalFeesTokenA"),h("totalFeesClaimedTokenA"),h("totalFeesTokenB"),h("totalFeesClaimedTokenB"),h("fundFeesTokenA"),h("fundFeesTokenB"),h("startTime"),X(h(),15*4-3,"padding")]),Fp=_([J("growthInsideLastX64"),h("rewardAmountOwed")]),Vr=_([ge(8),W("bump"),C("nftMint"),C("poolId"),Qe("tickLower"),Qe("tickUpper"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),h("tokenFeesOwedA"),h("tokenFeesOwedB"),X(Fp,3,"rewardInfos"),X(h(),8,"")]),UT=_([ge(8),W("bump"),C("poolId"),Qe("tickLowerIndex"),Qe("tickUpperIndex"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),h("tokenFeesOwedA"),h("tokenFeesOwedB"),X(J(),3,"rewardGrowthInside"),X(h(),8,"")]),Ep=_([Qe("tick"),$a("liquidityNet"),J("liquidityGross"),J("feeGrowthOutsideX64A"),J("feeGrowthOutsideX64B"),X(J(),3,"rewardGrowthsOutsideX64"),X(Ye(),13,"")]),Oo=_([ge(8),C("poolId"),Qe("startTickIndex"),X(Ep,qe,"ticks"),W("initializedTickCount"),X(W(),115,"")]),ec=_([ge(329),X(C(),100,"whitelistMints")]),Zu=_([ge(8),C("poolId"),X(X(h(),8),Is,"positiveTickArrayBitmap"),X(X(h(),8),Is,"negativeTickArrayBitmap")]);Ju.span;var oc=ce("Raydium_Clmm"),Lt={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,r,i,s,a,c,u,l,m,d,p,y){let f=_([J("sqrtPriceX64"),h("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Mo.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let w=Buffer.from([...Lt.createPool,...g]);return new Ot({keys:b,programId:e,data:w})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:r,mintB:i,ammConfigId:s,initialPriceX64:a,startTime:c}=e,[u,l]=[new U(r.address),new U(i.address)],{publicKey:m}=Du(t,s,u,l),{publicKey:d}=qu(t,m),{publicKey:p}=ks(t,m,u),{publicKey:y}=ks(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,u,p,new U(r.programId||He),l,y,new U(i.programId||He),mt(t,m).publicKey,a,c)];return{signers:[],instructions:f,instructionTypes:[F.CreateAccount,F.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B){let M=_([Qe("tickLowerIndex"),Qe("tickUpperIndex"),Qe("tickArrayLowerStartIndex"),Qe("tickArrayUpperStartIndex"),J("liquidity"),h("amountMaxA"),h("amountMaxB"),je("withMetadata"),W("optionBaseFlag"),je("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:Mo.programId,isSigner:!1,isWritable:!1},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:tc,isSigner:!1,isWritable:!1},{pubkey:_n,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],Z=Buffer.alloc(M.span);M.encode({tickLowerIndex:w,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},Z);let G=Buffer.from([...Lt.openPosition,...Z]);return new Ot({keys:V,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Ss.generate();m.push(x),y=x.publicKey}let f=H.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=H.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=he(d,p,f),{publicKey:w}=he(d,p,b),{publicKey:A}=we(n.wallet,y,He),{publicKey:k}=Lr(y),{publicKey:I}=At(d,y),{publicKey:T}=hn(d,p,r,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Ss.generate();m.push(x),y=x.publicKey}let f=H.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=H.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=he(d,p,f),{publicKey:w}=he(d,p,b),{publicKey:A}=we(n.wallet,y,He),{publicKey:k}=Lr(y),{publicKey:I}=At(d,y),{publicKey:T}=hn(d,p,r,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,i,f,b,u,s,a,c,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?mt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A,k,I,T,S,x,R,B){let M=_([Qe("tickLowerIndex"),Qe("tickUpperIndex"),Qe("tickArrayLowerStartIndex"),Qe("tickArrayUpperStartIndex"),J("liquidity"),h("amountMaxA"),h("amountMaxB"),je("withMetadata"),W("optionBaseFlag"),je("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],V=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:Mo.programId,isSigner:!1,isWritable:!1},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:tc,isSigner:!1,isWritable:!1},{pubkey:_n,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],Z=Buffer.alloc(M.span);M.encode({tickLowerIndex:w,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:new nc(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},Z);let G=Buffer.from([...Lt.openPosition,...Z]);return new Ot({keys:V,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=Ss.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=H.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=H.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=he(p,y,f),{publicKey:w}=he(p,y,b),{publicKey:A}=we(n.wallet,m,He),{publicKey:k}=Lr(m),{publicKey:I}=At(p,m),{publicKey:T}=hn(p,y,r,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,k,T,g,w,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),r,i,f,b,s,a,c,u,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?mt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:I,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,i){let s=_([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Mo.programId,isSigner:!1,isWritable:!1},{pubkey:He,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...Lt.closePosition,...c]);return new Ot({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new U(e.programId),{publicKey:s}=we(n.wallet,r.nftMint,He),{publicKey:a}=At(i,r.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[F.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w){let A=_([J("liquidity"),h("amountMaxA"),h("amountMaxB"),W("optionBaseFlag"),je("baseFlag")]),k=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...Lt.increaseLiquidity,...T]);return new Ot({keys:I,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=H.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=H.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=he(c,u,l),{publicKey:p}=he(c,u,m),{publicKey:y}=we(r.wallet,n.nftMint,He),{publicKey:f}=At(c,n.nftMint),{publicKey:b}=hn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?mt(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=H.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=H.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=he(c,u,l),{publicKey:p}=he(c,u,m),{publicKey:y}=we(r.wallet,n.nftMint,He),{publicKey:f}=At(c,n.nftMint),{publicKey:b}=hn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,r.wallet,y,f,u,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?mt(c,u).publicKey:void 0)],signers:[],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w){let A=_([J("liquidity"),h("amountMaxA"),h("amountMaxB"),W("optionBaseFlag"),je("baseFlag")]),k=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:new nc(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...Lt.increaseLiquidity,...T]);return new Ot({keys:I,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A){let k=_([J("liquidity"),h("amountMinA"),h("amountMinB")]),I=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:or,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...I],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:w},S);let x=Buffer.from([...Lt.decreaseLiquidity,...S]);return new Ot({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=H.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=H.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:y}=he(u,l,d),{publicKey:f}=we(r.wallet,n.nftMint,c),{publicKey:b}=At(u,n.nftMint),{publicKey:g}=hn(u,l,n.tickLower,n.tickUpper),w=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)w.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:r.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(u,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),w,i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?mt(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[F.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g){let w=_([h("amount"),h("otherAmountThreshold"),J("sqrtPriceLimitX64"),je("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:or,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],I=Buffer.alloc(w.span);w.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},I);let T=Buffer.from([...Lt.swap,...I]);return new Ot({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,mt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,outputMint:i,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toBase58(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountB:r.tokenAccountA,b?r.tokenAccountA:r.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,u,n,s,a,c,!1,mt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=_([h("openTime"),h("endTime"),J("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Mo.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Y(l),endTime:Y(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Lt.initReward,...f]);return new Ot({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a=Wu(i,s,r.mint).publicKey,c=Co(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[F.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,c,u,l,m,d){let p=_([W("rewardIndex"),J("emissionsPerSecondX64"),h("openTime"),h("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:Y(l),endTime:Y(m)},f);let b=Buffer.from([...Lt.setRewardEmissions,...f]);return new Ot({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===r.mint.toString()&&(a=d,c=new U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&oc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Co(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[F.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let c=_([W("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:He,isSigner:!1,isWritable:!1},{pubkey:ln,isSigner:!1,isWritable:!1},{pubkey:or,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Lt.collectReward,...l]);return new Ot({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&oc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,r,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[F.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}};import{PublicKey as Up}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gp}from"@solana/spl-token";import{PublicKey as Wp}from"@solana/web3.js";import rc from"bn.js";var Ks=new rc(25),Fr=new rc(1e4),Dp={4:3,5:3};var qp=ce("Raydium_liquidity_serum");function ic({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,r;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));r=Wp.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw qp.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}import _o from"bn.js";function Er({programId:o}){let{publicKey:e}=ue([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function xn({name:o,programId:e,marketId:t}){let{publicKey:n}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function Xp({programId:o,marketId:e}){let{publicKey:t}=ue([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function Os({programId:o}){return ue([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function sc({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:c}){let u=xn({name:"amm_associated_seed",programId:a,marketId:t}),l=xn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Os({programId:a}),p=xn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=xn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=xn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Xp({programId:a,marketId:t}),g=xn({name:"target_associated_seed",programId:a,marketId:t}),w=xn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=ic({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:w,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:A,lookupTableAccount:Up.default,configId:Er({programId:a})}}var Cs;async function PI({connection:o,poolKeysList:e,config:t}){Cs||(Cs=new Gn({connection:o}),await Cs.initStableModelLayout());let n=e.map(s=>_u({poolKeys:s}));return(await Ka(o,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=Ca(s,"GetPoolData"),c=new _o(Wt(a,"status")),u=Number(Wt(a,"coin_decimals")),l=Number(Wt(a,"pc_decimals")),m=Number(Wt(a,"lp_decimals")),d=new _o(Wt(a,"pool_coin_amount")),p=new _o(Wt(a,"pool_pc_amount")),y=new _o(Wt(a,"pool_lp_supply")),f="0";try{f=Wt(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new _o(f)}})}var Rs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Dr=o=>{let e={},t=Gp.toBase58();return Object.keys(o).map(n=>{let r=o[n],[i,s]=[r.baseMint.toBase58(),r.quoteMint.toBase58()];e[n]={id:n,version:4,status:r.status.toNumber(),programId:r.programId.toBase58(),mintA:it({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:it({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new O(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new O(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new O(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:Rs,week:Rs,month:Rs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:Er({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:it({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import Ze from"bn.js";var vo=class extends Ke{constructor(t){super(t);this.stableLayout=new Gn({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:r,baseIn:i}){let s=new Ze(new O(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Cr(t[i?"mintB":"mintA"]),[c,u]=[new Ze(new O(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Ze(new O(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Ze(new O(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${r.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=De;s.isZero()||(d=m==="base"?cr(s.mul(u),c):cr(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=cr(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Me(new Ze(1)).add(r).mul(d).quotient,b=new fe(a,d),g=new fe(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:r,amountInA:i,amountInB:s,fixedSide:a,config:c,txVersion:u,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=K({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let w=await m.getCreatedTokenAccount({mint:new tt(n.lpMint.address)}),A=[y,f],k=[b,g],I=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(A.reverse(),k.reverse(),I.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=A,[B,M]=k,[D,V]=I,Z=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Ft=await m.handleTokenAccount({side:"in",amount:D,mint:x.mint,tokenAccount:B,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=Ft,ot=Oe(Ft,["tokenAccount"]);G.addInstruction(ot);let Ln=await m.handleTokenAccount({side:"in",amount:V,mint:R.mint,tokenAccount:M,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Rn}=Ln,mn=Oe(Ln,["tokenAccount"]);G.addInstruction(mn);let Yo=await m.handleTokenAccount({side:"out",amount:0,mint:new tt(n.lpMint.address),tokenAccount:w,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Ht}=Yo,On=Oe(Yo,["tokenAccount"]);return G.addInstruction(On),G.addInstruction({instructions:[Nu({poolInfo:n,poolKeys:Z,userKeys:{baseTokenAccount:q,quoteTokenAccount:Rn,lpTokenAccount:Ht,owner:this.scope.ownerPubKey},baseAmountIn:D,quoteAmountIn:V,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5AddLiquidity:F.AmmV4AddLiquidity],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),u===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:r,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new tt(n.mintA.address),new tt(n.mintB.address),new tt(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:w,checkCreateATAOwner:A}=K({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:w,checkCreateATAOwner:A}),{tokenAccount:k}=x,I=Oe(x,["tokenAccount"]);g.addInstruction(I);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:w,checkCreateATAOwner:A}),{tokenAccount:T}=R,S=Oe(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[ws({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(c),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Qn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||we(this.scope.ownerPubKey,q.accountInfo.mint,Qn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let w=g[t.lpMint.address];if(w===void 0)throw Error("find lp account error in trade accounts");let A=r.add(a!=null?a:new Ze(0)),k=t.mintA.address===ye.WSOL.mint.toString(),I=t.mintB.address===ye.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let q=gt[s.programId],ot=Je({programId:new tt(s.programId),poolId:new tt(s.id),owner:this.scope.ownerPubKey,version:q}),Rn,mn=await this.scope.connection.getAccountInfo(ot);if(mn&&(Rn=Un(q).decode(mn.data)),q!==6&&!Rn){let{instruction:Zt,instructionType:ni}=ho({id:new tt(s.id),programId:new tt(s.programId),version:q,ledger:ot,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Zt],instructionTypes:[ni]})}let Ht=[];for(let Zt of s.rewardInfos){let ni=Zt.mint.address===ye.WSOL.mint.toString();if(g[Zt.mint.address])Ht.push(g[Zt.mint.address]);else{let{account:Qs,instructionParams:Ys}=await this.scope.account.getOrCreateTokenAccount({mint:new tt(Zt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!ni,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Qs||this.logAndCreateError("farm reward account not found:",Zt.mint.address),Ys&&b.addInstruction(Ys),Ht.push(Qs)}}let On=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ft={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:On,lpAccount:w,rewardAccounts:Ht},Ln=gt[s.programId],Yo=Ln===6?ko(Ft):Ln===5?To(Ft):Io(Ft),Mc={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};b.addInstruction({instructions:[Yo],instructionTypes:[Mc[Ln]]})}let B=await this.getAmmPoolKeys(t.id),M=ws({poolInfo:t,poolKeys:B,userKeys:{lpTokenAccount:w,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[M],instructionTypes:[t.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity],lookupTableAddress:B.lookupTableAccount?[B.lookupTableAccount]:[]});let[D,V]=t.mintA.address===n.mintA.address?[T,x]:[x,T],Z=await this.scope.clmm.getClmmPoolKeys(n.id),G=await Se.openPositionFromBaseInstructions(E(K({poolInfo:n,poolKeys:Z,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:D,tokenAccountB:V},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:r,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var D;let b=u.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),g=u.useSOLBalance&&r.mint.equals(ac),w=u.useSOLBalance&&i.mint.equals(ac),A=this.createTxBuilder(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:b,amount:a}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=sc({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:B,instructionType:M}=Mu(E(K({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:we(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:c,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[B],instructionTypes:[M]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=Er({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return Bu.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:i,slippage:s}){let[a,c]=[r.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,w=t.version===4,A;if(w)A=new O(f.toString()).div(10**g).div(new O(y.toString()).div(10**b));else{let V=Ru(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?A=new O(1e6).div(V*1e6):A=new O(V*1e6).div(1e6)}let k=n,I=new Ze(0),T=new Ze(0);if(!k.isZero())if(w){T=St(k.mul(Ks),Fr);let V=k.sub(T),Z=y.add(V);I=f.mul(V).div(Z)}else{T=k.mul(new Ze(2)).div(new Ze(1e4));let V=k.sub(T);p==="quote"?I=new Ze(Ku(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),V.toNumber())):I=new Ze(Cu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),V.toNumber()))}let S=new Ze(new O(I.toString()).mul(1-s).toFixed(0)),x=I,R=S,B=new O(I.toString()).div(new O(k.sub(T).toString()).toFixed(0));!k.isZero()&&!I.isZero()&&(B=new O(I.toString()).div(10**g).div(new O(k.sub(T).toString()).div(10**b)));let M=A.sub(B).div(A).mul(100);return{amountOut:x,minAmountOut:R,currentPrice:A,executionPrice:B,priceImpact:M,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:r,mintOut:i,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=r.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new O(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new O(f.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new O(y.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Ze(0),w=n;if(!w.isZero()){w.gt(f)&&(w=f.sub(new Ze(1)));let R=f.sub(w);g=y.mul(w).div(R).mul(Fr).div(Fr.sub(Ks))}let A=new Ze(new O(g.toString()).mul(1+s).toFixed(0)),k=g,I=A;this.logDebug("amountIn:",new O(k.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new O(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!w.isZero()&&(T=new O(w.toString()).div(10**m.decimals).div(new O(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(k.toString()),x=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:k,maxAmountIn:I,currentPrice:b,executionPrice:T,priceImpact:x}}async swap({poolInfo:t,poolKeys:n,amountIn:r,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===j.toBase58(),w=y&&b.address===j.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Qn,mint:new tt(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:d});m.addInstruction(T||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:I,outputTokenUseSolBalance:w,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[Rr({version:x,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:r,amountOut:i,fixedSide:a})],instructionTypes:[x===4?F.AmmV4SwapBaseIn:F.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await We(this.scope.connection,t.map(l=>({pubkey:new tt(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=So.decode(m.accountInfo.data);i[String(t[l])]=E(K({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await We(this.scope.connection,s.map(l=>({pubkey:new tt(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new Ze(zp.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=E(K({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new O(p.toString()).div(new O(10).pow(m.quoteDecimal.toString())).div(new O(d.toString()).div(new O(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),r=Dr({[t]:n}),i=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as ie}from"@solana/web3.js";import dt from"bn.js";import{AccountLayout as uc,TOKEN_PROGRAM_ID as cc}from"@solana/spl-token";var Vo=class extends Ke{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var A;let{programId:t,owner:n=((A=this.scope.owner)==null?void 0:A.publicKey)||ie.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new dt(new ie(r.address).toBuffer()).gt(new dt(new ie(i.address).toBuffer()))?[i,r,new O(1).div(a)]:[r,i,a],g=ee.priceToSqrtPriceX64(b,y.decimals,f.decimals),w=await Se.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(w),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:E(K({},w.address),{programId:t.toString(),id:w.address.poolId.toString(),mintA:y,mintB:f,openTime:c.toString(),vault:{A:w.address.mintAVault.toString(),B:w.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:K({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}},Yu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,w=n.useSOLBalance&&e.mintA.address===j.toString(),A=n.useSOLBalance&&e.mintB.address===j.toString(),[k,I]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let B=t||await this.getClmmPoolKeys(e.id),M=await Se.openPositionFromBaseInstructions({poolInfo:e,poolKeys:B,ownerInfo:E(K({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(M),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:K({},M.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:r,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,w=n.useSOLBalance&&e.mintA.address===j.toBase58(),A=n.useSOLBalance&&e.mintB.address===j.toBase58(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});k&&(b=k),f.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:u,checkCreateATAOwner:l});T&&(g=T),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=t||await this.getClmmPoolKeys(e.id),R=await Se.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:x,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:r,amountMaxB:i,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(R),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:R.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===j.toString(),g=c.useSOLBalance&&t.mintB.address===j.toString(),{account:w,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});w&&(y=w),p.addInstruction(A||{});let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(I||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=Se.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:r,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===j.toString(),b=a.useSOLBalance&&t.mintB.address===j.toString(),{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(r==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(w||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(r==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A&&(y=A),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),T=Se.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===j.toString(),f=i.useSOLBalance&&t.mintB.address===j.toString(),b,g,{account:w,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=w,A&&p.addInstruction(A);let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=k,I&&p.addInstruction(I);let T=[];for(let B of t.rewardDefaultInfos){let M=i.useSOLBalance&&B.mint.address===j.toString(),D;if(B.mint.address===t.mintA.address)D=b;else if(B.mint.address===t.mintB.address)D=g;else{let{account:V,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(B.mint.programId),mint:new ie(B.mint.address),notUseTokenAccount:M,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!M,associatedOnly:M?!1:u,checkCreateATAOwner:l});D=V,Z&&p.addInstruction(Z)}T.push(D)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await Se.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[F.ClmmDecreasePosition]});let R=K({},x.address);if(i.closePosition){let B=await Se.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});p.addInstruction({endInstructions:B.instructions,endInstructionTypes:B.instructionTypes}),R=K(K({},R),B.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:r}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Se.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===j.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(n.mint.address),mint:new ie(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new O(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:r,checkCreateATAOwner:i});d&&c.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 ie(n.mint.programId),mint:new ie(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===j.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new O(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Se.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ie(m.mint.programId),mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=K(K({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(j),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new O(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:r,checkCreateATAOwner:i});m&&c.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:ne.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===j.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new O(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Se.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});u.addInstruction(b),l=K(K({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(j),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:r,checkCreateATAOwner:i});l&&a.addInstruction(l),u||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:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(j),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:r,checkCreateATAOwner:i});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:c});s.addInstruction(y),a=K(K({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:r,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=c.useSOLBalance&&e.mintA.address===j.toBase58(),g=c.useSOLBalance&&e.mintB.address===j.toBase58(),w;!s||s.equals(new O(0))?w=f?Pt.add(new dt(1)):ht.sub(new dt(1)):w=ee.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let k;if(!k){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:r}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=T,S&&y.addInstruction(S)}(!A||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Se.makeSwapBaseInInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k},inputMint:new ie(n),amountIn:r,amountOutMin:i,sqrtPriceLimitX64:w,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:r,amountInMax:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=c.useSOLBalance&&e.mintA.address===j.toBase58(),g=c.useSOLBalance&&e.mintB.address===j.toBase58(),w;!s||s.equals(new O(0))?w=n.toString()===e.mintB.address?Pt.add(new dt(1)):ht.sub(new dt(1)):w=ee.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?i:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=T,S&&y.addInstruction(S)}let k;if(!k){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:c.feePayer||this.scope.ownerPubKey,amount:f?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=T,S&&y.addInstruction(S)}(!A||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Se.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k},outputMint:new ie(n),amountOut:r,amountInMax:i,sqrtPriceLimitX64:w,remainingAccounts:u})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)r?we(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(u[m.accountInfo.mint.toString()]=m.pubkey):u[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(A=>!A.liquidity.isZero()||A.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===j.toString(),y=n.useSOLBalance&&d.mintB.address===j.toString(),f=u[d.mintA.address];if(!f){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ie(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:i});f=A,k&&l.addInstruction(k)}let b=u[d.mintB.address];if(!b){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ie(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:i});b=A,k&&l.addInstruction(k)}u[d.mintA.address]=f,u[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let k=n.useSOLBalance&&A.mint.address===j.toString(),I=u[A.mint.address];if(!I){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(A.mint.programId),mint:new ie(A.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});I=T,S&&l.addInstruction(S)}u[A.mint.address]=I,g.push(I)}let w=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let k=Se.decreaseLiquidityInstructions({poolInfo:d,poolKeys:w,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(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:c}):l.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Co(e).publicKey);return t?ec.decode(t.data).whitelistMints.filter(r=>!r.equals(ie.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=>At(new ie(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=Vr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await We(this.scope.connection,e.map(i=>({pubkey:new ie(i)})),t),r={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=In.decode(s.accountInfo.data),c=ee.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[i])]=E(K({},a),{currentPrice:c,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),r=await We(this.scope.connection,Array.from(n).map(c=>({pubkey:new ie(c)}))),i={};r.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=$u.decode(c.accountInfo.data))});let s=await Ce.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:it({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||cc.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?cn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:it({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||cc.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?cn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:E(K({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ce.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),r=await Vn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ie(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await We(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=Hu(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(uc.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(uc.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=E(K({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:c.config});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as jr,TOKEN_PROGRAM_ID as Yt,AccountLayout as af}from"@solana/spl-token";import Ns from"bn.js";import mc from"bn.js";var Ls=new mc(1e6);function Qp(o,e,t){return o.mul(e).add(t).sub(new mc(1)).div(t)}function lc(o,e,t){return o.mul(e).div(t)}var Wr=class{static tradingFee(e,t){return Qp(e,t,Ls)}static protocolFee(e,t){return lc(e,t,Ls)}static fundFee(e,t){return lc(e,t,Ls)}};import Fo from"bn.js";function qr(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function Yp(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=qr(o,e);return n.gt(Yn)&&(t=t.add(new Fo(1)),e=o.div(t),n=qr(o,t),n.gt(Yn)&&(e=e.add(new Fo(1)))),[t,e]}var Yn=new Fo(0),Ur=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=Yp(r,i),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,r,i){let s=e.mul(n).div(t),a=e.mul(r).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return qr(e.mul(n),t).gt(Yn)&&s.gt(Yn)&&(s=s.add(new Fo(1))),qr(e.mul(r),t).gt(Yn)&&a.gt(Yn)&&(a=a.add(new Fo(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Gr from"decimal.js-light";var dc=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(dc||{}),Xr=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,r){let i=Wr.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Ur.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:r,quoteReserve:i,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[r,i,e.decimals,t.decimals,e.address]:[i,r,t.decimals,e.decimals,t.address],p=new Gr(u.toString()).div(10**m).div(new Gr(c.toString()).div(10**l)),y=a.gte(u)?u.sub(new Ns(1)):a,f=u.sub(y),b=St(c.mul(y),f),g=St(b.mul(new Ns(1e6)),new Ns(1e6).sub(n)),w=g.sub(b),A=new Gr(y.toString()).div(10**m).div(new Gr(g.toString()).div(10**l)),k=p.isZero()?0:A.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:w,priceImpact:k}}};var jp=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Hp=Buffer.from("amm_config","utf8"),Zp=Buffer.from("pool","utf8"),$p=Buffer.from("pool_lp_mint","utf8"),Jp=Buffer.from("pool_vault","utf8"),ef=Buffer.from("observation","utf8");function jn(o){return ue([jp],o)}function HB(o,e){return ue([Hp,of(e)],o)}function tf(o,e,t,n){return ue([Zp,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function nf(o,e){return ue([$p,e.toBuffer()],o)}function pc(o,e,t){return ue([Jp,e.toBuffer(),t.toBuffer()],o)}function zr(o,e){return ue([ef,e.toBuffer()],o)}function of(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function fc({programId:o,configId:e,mintA:t,mintB:n}){let r=jn(o).publicKey,i=tf(o,e,t,n).publicKey,s=nf(o,i).publicKey,a=pc(o,i,t).publicKey,c=pc(o,i,n).publicKey,u=zr(o,i).publicKey;return{poolId:i,configId:e,authority:r,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as Eo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ms,TOKEN_2022_PROGRAM_ID as yc,ASSOCIATED_TOKEN_PROGRAM_ID as rf}from"@solana/spl-token";var sf=ce("Raydium_cpmm"),Do={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 bc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f,b,g,w,A){let k=_([h("amountMaxA"),h("amountMaxB"),h("openTime")]),I=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Ms,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:rf,isSigner:!1,isWritable:!1},{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:w,openTime:A},T),new Eo({keys:I,programId:o,data:Buffer.from([...Do.initialize,...T])})}function gc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([h("lpAmount"),h("amountMaxA"),h("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Ms,isSigner:!1,isWritable:!1},{pubkey:yc,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return sf.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Eo({keys:b,programId:o,data:Buffer.from([...Do.deposit,...g])})}function Ac(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){let f=_([h("lpAmount"),h("amountMinA"),h("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Ms,isSigner:!1,isWritable:!1},{pubkey:yc,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:rr,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Eo({keys:b,programId:o,data:Buffer.from([...Do.withdraw,...g])})}function Qr(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=_([h("amountIn"),h("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],w=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},w),new Eo({keys:g,programId:o,data:Buffer.from([...Do.swapBaseInput,...w])})}function wc(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y,f){let b=_([h("amountInMax"),h("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],w=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},w),new Eo({keys:g,programId:o,data:Buffer.from([...Do.swapBaseOutput,...w])})}import ve from"bn.js";var Pc=_([ge(8),W("bump"),je("disableCreatePool"),qt("index"),h("tradeFeeRate"),h("protocolFeeRate"),h("fundFeeRate"),h("createPoolFee"),C("protocolOwner"),C("fundOwner"),X(h(),16)]),Yr=_([ge(8),C("configId"),C("poolCreator"),C("vaultA"),C("vaultB"),C("mintLp"),C("mintA"),C("mintB"),C("mintProgramA"),C("mintProgramB"),C("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),h("lpAmount"),h("protocolFeesMintA"),h("protocolFeesMintB"),h("fundFeesMintA"),h("fundFeesMintB"),h("openTime"),X(h(),32)]);var Wo=class extends Ke{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 We(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),r={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Yr.decode(d.accountInfo.data);r[String(e[m])]=E(K({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await We(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Pc.decode(y.data)}}let c={},u=await We(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new ve(af.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=E(K({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new O(y.toString()).div(new O(10).pow(d.mintDecimalB)).div(new O(p.toString()).div(new O(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var c,u,l,m;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return E(K({},n),{[r]:E(K({},i),{id:new z(r),configInfo:i.configInfo,version:7,authority:jn(i.programId).publicKey,mintA:it({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?cn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:it({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?cn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Vn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),r=it({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?cn(n[t.mintA.toBase58()].feeConfig):void 0}}),i=it({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?cn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=it({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Yt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:r,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new O(t.vaultAAmount.toString()).div(10**r.decimals).toNumber(),mintAmountB:new O(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:r,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:jn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(m){var d=m,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,feeConfig:c,computeBudgetConfig:u}=d,l=Oe(d,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var V,Z,G;let p=r.feePayer||((V=this.scope.owner)==null?void 0:V.publicKey),y=new ve(new z(l.mintA.address).toBuffer()).lte(new ve(new z(l.mintB.address).toBuffer())),[f,b]=y?[l.mintA,l.mintB]:[l.mintB,l.mintA],[g,w]=y?[l.mintAAmount,l.mintBAmount]:[l.mintBAmount,l.mintAAmount],A=r.useSOLBalance&&f.address===jr.toBase58(),k=r.useSOLBalance&&b.address===jr.toBase58(),[I,T]=[new z(f.address),new z(b.address)],S=this.createTxBuilder(),{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:I,tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:p,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:i,checkCreateATAOwner:s});S.addInstruction(R||{});let{account:B,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({mint:new z(b.address),tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:p,amount:w}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:i,checkCreateATAOwner:s});if(S.addInstruction(M||{}),x===void 0||B===void 0)throw Error("you don't has some token account");let D=fc({programId:e,configId:new z(c.id),mintA:I,mintB:T});return S.addInstruction({instructions:[bc(e,this.scope.ownerPubKey,new z(c.id),D.authority,D.poolId,I,T,D.lpMint,x,B,we(this.scope.ownerPubKey,D.lpMint).publicKey,D.vaultA,D.vaultB,t,new z((Z=f.programId)!=null?Z:Yt),new z((G=b.programId)!=null?G:Yt),D.observationId,g,w,n)],instructionTypes:[F.CpmmCreatePool]}),S.addCustomComputeBudget(u),S.versionBuild({txVersion:a,extInfo:{address:E(K({},D),{mintA:f,mintB:b,programId:e,poolFeeAccount:t,feeConfig:c})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:r,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=K({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:E(K({},t),{lpAmount:new O(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Me(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new O(r.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),w=g.amount,A=t.mintA.address===jr.toString(),k=t.mintB.address===jr.toString(),I=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(i?r:w).isZero()?{payer:this.scope.ownerPubKey,amount:i?r:w}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(R||{});let{account:B,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?w:r).isZero()?{payer:this.scope.ownerPubKey,amount:i?w:r}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(M||{}),!x&&!B&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let D=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),ot=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:D,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:V}=ot,Z=Oe(ot,["tokenAccount"]);I.addInstruction(Z);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Me(new ve(1)).sub(s);return I.addInstruction({instructions:[gc(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),V,x,B,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,i?b.amount:w,i?w:b.amount)],instructionTypes:[F.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),I.addCustomComputeBudget(c),I.versionBuild({txVersion:l})}async withdrawLiquidity(e){var V,Z;let{poolInfo:t,poolKeys:n,lpAmount:r,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Me(new ve(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(r.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(r.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[be(l,t.mintA.extensions.feeConfig,d,!1),be(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,w]=[new z(t.mintA.address),new z(t.mintB.address)],A=g.equals(j),k=w.equals(j),I,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});I=S,x&&b.addInstruction(x);let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,B&&b.addInstruction(B),(!I||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let M=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});M||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let D=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Ac(new z(t.programId),this.scope.ownerPubKey,new z(D.authority),new z(t.id),M,I,T,new z(D.vault.A),new z(D.vault.B),g,w,new z(t.lpMint.address),r,l.sub((V=p.fee)!=null?V:new ve(0)),m.sub((Z=y.fee)!=null?Z:new ve(0)))],instructionTypes:[F.CpmmWithdrawLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var R,B,M,D,V,Z;let{poolInfo:t,poolKeys:n,baseIn:r,fixedOut:i,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=K({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)];i?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new ve((1+c)*1e4)).div(new ve(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new ve((1-c)*1e4)).div(new ve(1e4));let w=t.mintA.address===j.toBase58(),A=t.mintB.address===j.toBase58(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new z((R=t.mintA.programId)!=null?R:Yt),owner:this.scope.ownerPubKey,createInfo:w||!r?{payer:this.scope.ownerPubKey,amount:r?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:y,checkCreateATAOwner:p});I&&f.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((B=t.mintB.programId)!=null?B:Yt),owner:this.scope.ownerPubKey,createInfo:A||r?{payer:this.scope.ownerPubKey,amount:r?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!k||!T)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:k,mintBTokenAcc:T,mintAUseSOLBalance:w,mintBUseSOLBalance:A,associatedOnly:y});let x=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[i?wc(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),r?k:T,r?T:k,new z(x.vault[r?"A":"B"]),new z(x.vault[r?"B":"A"]),new z((V=t[r?"mintA":"mintB"].programId)!=null?V:Yt),new z((Z=t[r?"mintB":"mintA"].programId)!=null?Z:Yt),r?b:g,r?g:b,zr(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Qr(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),r?k:T,r?T:k,new z(x.vault[r?"A":"B"]),new z(x.vault[r?"B":"A"]),new z((M=t[r?"mintA":"mintB"].programId)!=null?M:Yt),new z((D=t[r?"mintB":"mintA"].programId)!=null?D:Yt),r?b:g,r?g:b,zr(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[i?F.CpmmSwapBaseOut:F.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=Xr.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new O(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new ve((1-r)*1e4)).div(new ve(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:r,slippage:i,epochInfo:s,baseIn:a}){var w,A,k,I,T,S,x,R;let c=1-Number(i.toSignificant())/100,u=new ve(new O(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=be(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((w=l.fee)!=null?w:new ve(0)),d=new ve(new O(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(A=l.fee)==null?void 0:A.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:De,fee:void 0,expirationTime:void 0};if(!m.isZero()){let B=uf(y,t,n,d);this.logDebug("lpAmountData:",{amountA:B.amountA.toString(),amountB:B.amountB.toString()}),f=be(B[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Me(new ve(1)).add(i),g=be(b.mul(f.amount.sub((I=f.fee)!=null?I:new ve(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function uf(o,e,t,n){let r=o.mul(e).div(n);!r.isZero()&&!o.mul(e).mod(n).isZero()&&(r=r.add(new ve(1)));let i=o.mul(t).div(n);return!i.isZero()&&!o.mul(t).mod(n).isZero()&&(i=i.add(new ve(1))),{amountA:r,amountB:i}}import{PublicKey as Kn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Re,TOKEN_2022_PROGRAM_ID as $r,createTransferInstruction as xc}from"@solana/spl-token";import Jr from"bn.js";import{TOKEN_PROGRAM_ID as _s,TOKEN_2022_PROGRAM_ID as cf,ASSOCIATED_TOKEN_PROGRAM_ID as lf}from"@solana/spl-token";import{PublicKey as Q,TransactionInstruction as vs,SystemProgram as Vs}from"@solana/web3.js";import Sn from"bn.js";function Jx(o,e,t,n,r,i,s,a,c,u,l,m){let d=_([W("instruction"),h("amountIn"),h("amountOut")]),p=[{pubkey:Vs.programId,isSigner:!1,isWritable:!1},{pubkey:_s,isSigner:!1,isWritable:!1},{pubkey:new Q(t.programId),isSigner:!1,isWritable:!1},{pubkey:new Q(t.id),isSigner:!1,isWritable:!0},{pubkey:new Q(n.id),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=Ie(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new Q("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=Ie(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new vs({keys:p,programId:o,data:y})}function eS(o,e,t,n,r,i,s,a,c,u){let l=_([W("instruction")]),m=[{pubkey:Vs.programId,isSigner:!1,isWritable:!1},{pubkey:_s,isSigner:!1,isWritable:!1},{pubkey:new Q(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new Q(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new Q(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=Ie(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=Ie(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new Q("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=Ie(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 vs({keys:m,programId:o,data:d})}function mf(o,e,t,n,r,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[P({pubkey:_s,isWritable:!1}),P({pubkey:cf,isWritable:!1}),P({pubkey:lf,isWritable:!1}),P({pubkey:Vs.programId,isWritable:!1}),P({pubkey:e,isSigner:!0})];b.push(P({pubkey:t})),b.push(P({pubkey:r}));let g=[c,u],w=[l,m],A=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=A[S]===x.mintA.address;if(b.push(P({pubkey:new Q(x.programId),isWritable:!1})),S===g.length-1?b.push(P({pubkey:r})):b.push(P({pubkey:n})),b.push(P({pubkey:new Q(A[S])})),b.push(P({pubkey:new Q(A[S+1])})),x.version===6){let B=w[S];b.push(P({pubkey:new Q(B.config.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(R?B.vault.A:B.vault.B)})),b.push(P({pubkey:new Q(R?B.vault.B:B.vault.A)})),b.push(P({pubkey:new Q(x.observationId)})),b.push(P({pubkey:rr})),b.push(P({pubkey:mt(new Q(x.programId),new Q(x.id)).publicKey})),f.push(df(x.sqrtPriceX64.toString(),R));for(let M of(T=y[S])!=null?T:[])b.push(P({pubkey:new Q(M)}))}else if(x.version===5){let B=w[S];b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.authority),isWritable:!1})),b.push(P({pubkey:new Q(B.marketProgramId)})),b.push(P({pubkey:new Q(B.marketAuthority)})),b.push(P({pubkey:Va,isWritable:!1})),b.push(P({pubkey:new Q(B.openOrders)})),b.push(P({pubkey:new Q(B.vault.A)})),b.push(P({pubkey:new Q(B.vault.B)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.marketId)})),b.push(P({pubkey:new Q(B.marketBids)})),b.push(P({pubkey:new Q(B.marketAsks)})),b.push(P({pubkey:new Q(B.marketEventQueue)})),b.push(P({pubkey:new Q(B.marketBaseVault)})),b.push(P({pubkey:new Q(B.marketQuoteVault)}))}else if(x.version===4){let B=w[S],M=x.status!==1;b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(B.authority),isWritable:!1})),b.push(P({pubkey:new Q(M?B.id:B.marketProgramId)})),b.push(P({pubkey:new Q(M?B.id:B.marketAuthority)})),b.push(P({pubkey:new Q(M?B.id:B.openOrders)})),b.push(P({pubkey:new Q(B.vault.A)})),b.push(P({pubkey:new Q(B.vault.B)})),b.push(P({pubkey:new Q(M?B.id:B.marketId)})),b.push(P({pubkey:new Q(M?B.id:B.marketBids)})),b.push(P({pubkey:new Q(M?B.id:B.marketAsks)})),b.push(P({pubkey:new Q(M?B.id:B.marketEventQueue)})),b.push(P({pubkey:new Q(M?B.id:B.marketBaseVault)})),b.push(P({pubkey:new Q(M?B.id:B.marketQuoteVault)}))}else if(x.version===7){let B=w[S];b.push(P({pubkey:new Q(B.authority)})),b.push(P({pubkey:new Q(B.config.id)})),b.push(P({pubkey:new Q(B.id)})),b.push(P({pubkey:new Q(R?B.vault.A:B.vault.B)})),b.push(P({pubkey:new Q(R?B.vault.B:B.vault.A)})),b.push(P({pubkey:new Q(x.observationId)}))}else throw Error("pool type error")}let k=_([W("insId"),h("amountIn"),h("amountOut"),X(J(),f.length,"clmmPriceLimit")]),I=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},I),new vs({keys:b,programId:o,data:I})}function df(o,e){if(o)if(e){let t=new Sn(o).div(new Sn(25));return t.gt(Mr)?t:Mr}else{let t=new Sn(o).mul(new Sn(25));return t.lt(_r)?t:_r}else return e?Mr:_r}function hc({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var r,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ie(m),p=t.equals(d.mintA.address)?Pt.add(yt):ht.sub(yt);return Se.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?i:new Sn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Qr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new Q(m[d?"mintA":"mintB"].address),new Q(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?F.CpmmSwapBaseIn:F.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[Rr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new Sn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?F.AmmV5SwapBaseIn:F.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[mf(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new Sn(0)),n.remainingAccounts)],instructionTypes:[F.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var kc={[Ar.toBase58()]:3},Tc={3:Ar};var Fs=_([ge(5),ge(8),C("ownAddress"),h("vaultSignerNonce"),C("baseMint"),C("quoteMint"),C("baseVault"),h("baseDepositsTotal"),h("baseFeesAccrued"),C("quoteVault"),h("quoteDepositsTotal"),h("quoteFeesAccrued"),h("quoteDustThreshold"),C("requestQueue"),C("eventQueue"),C("bids"),C("asks"),h("baseLotSize"),h("quoteLotSize"),h("feeRateBps"),h("referrerRebatesAccrued"),ge(7)]),Ic={3:Fs};import{PublicKey as Bc}from"@solana/web3.js";var Hr=ce("Serum"),Zr=class{static getProgramId(e){let t=Tc[e];return t||Hr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=kc[t];return n||Hr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Ic[e];return t||Hr.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()],r=0,i;for(;r<100;){try{let s=n.concat(Buffer.from([r]),Buffer.alloc(7));i=Bc.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return Hr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Bc.default,nonce:r}}};var jt=new Jr(0),qo=class extends Ke{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(j));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:r=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Y(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[vt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[vt({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),po({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:r})}async wrapWSol(e,t,n){let r=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Gt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),r.length&&i.addInstruction({instructions:[po({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[vt({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:r,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(j),m=u.amount.token.mint.equals(j),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?$r:Re,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?$r:Re);else{let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?$r:Re,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=k,I&&a.addInstruction(I)}m&&a.addInstruction({endInstructions:[vt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Re})],endInstructionTypes:[F.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?$r:Re)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=hc({routeProgram:i,inputMint:d,swapInfo:E(K({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[xc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]}),k.addInstruction(A);let{transactions:I}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();I.length<2&&a.addInstruction({instructions:[xc(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]})}return a.addInstruction(A),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=Oi,clmm:n=Li,cpmm:r=Ni}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:So.offsetOf("baseMint"),length:64}}),s=_([C("baseMint"),C("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=_([C("mintA"),C("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:In.span}],dataSlice:{offset:In.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(r,{dataSlice:{offset:Yr.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:r,cpmmPools:i}){e=e.toString()===Kn.default.toString()?j:e,t=t.toString()===Kn.default.toString()?j:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let r=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Dr(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new Kn(f.mintA.address),programId:Re,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},r.delete(f.mintB.address),a[f.mintB.address]={address:new Kn(f.mintB.address),programId:Re,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Re)?(r.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(b),f.mintProgramB.equals(Re)?(r.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(g)}),console.log("fetching mints info, total: ",r.size);let u=await Vn({connection:this.scope.connection,mints:Array.from(r).map(f=>new Kn(f))});a=K(K({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>E(K({},f),{[b]:E(K({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:r,simulateCache:i,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,w,A,k,I,T,S,x,R;let m=l===void 0?new Jr(0):e.raw.mul(new Jr(l.feeBps.toNumber())).div(new Jr(1e4)),d=e.raw.sub(m),p=new fe(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=E(K({},t),{address:pt(t.address).toString()}),b=[];for(let B of n)try{b.push(E(K({},this.computeAmountOut({itemPool:B,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(M){this.logDebug("direct error",B.version,B.id.toString(),M.message)}this.logDebug("direct done");for(let[B,M]of Object.entries(r)){let D={chainId:101,address:B,programId:M.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:M.mDecimals,tags:[],extensions:{}},V=M.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:D,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var mn,Ht,On,Ft;let ot=G===void 0?jt:G.data.amountOut.amount.raw.sub((Ht=(mn=G.data.amountOut.fee)==null?void 0:mn.raw)!=null?Ht:jt),Rn=q===void 0?jt:q.data.amountOut.amount.raw.sub((Ft=(On=q.data.amountOut.fee)==null?void 0:On.raw)!=null?Ft:jt);return ot.lt(Rn)?1:-1})[0];if(V===void 0)continue;let Z=new fe(Cr(D),V.data.amountOut.amount.raw.sub((w=(g=V.data.amountOut.fee)==null?void 0:g.raw)!=null?w:jt));for(let G of M.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:Z});b.push(E(K({},q),{allTrade:!!(V.data.allTrade&&q.allTrade),amountIn:V.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new O(new Ue({baseToken:V.data.amountIn.amount.token,denominator:V.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((k=(A=q.amountOut.fee)==null?void 0:A.raw)!=null?k:jt)}).toFixed()),priceImpact:new O(V.data.priceImpact.add(q.priceImpact).toFixed()),fee:[V.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[V.pool,G],remainingAccounts:[V.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(I=q.amountOut.fee)!=null&&I.raw?new fe(V.data.amountOut.amount.token,((S=(T=V.data.amountOut.fee)==null?void 0:T.raw)!=null?S:jt).add((R=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?R:jt)):void 0,middleToken:V.data.amountOut.amount.token,poolReady:V.data.poolReady&&q.poolReady,poolType:[V.data.poolType,q.poolType],feeConfig:y,expirationTime:Kt(V.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(B=>(B.allTrade||this.logDebug(`pool ${B.poolInfoList.map(M=>M.id.toString()).join(",")} filter out since not all trade`),B.allTrade)).sort((B,M)=>B.amountOut.amount.raw.sub(M.amountOut.amount.raw).gt(jt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,epochInfo:i,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:w,executionPriceX64:A}=Ce.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new O(y.toFixed()),executionPrice:new O(f.toFixed()),priceImpact:new O(b.toFixed()),fee:[g],remainingAccounts:[w],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:Kt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:xo(E(K({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xo(E(K({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new fe(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<r,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:xo(E(K({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xo(E(K({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new fe(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<r,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let r=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(r.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(r));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await We(this.scope.connection,Array.from(s).map(l=>({pubkey:new Kn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Fs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Zr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:E(K({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=K({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Os({programId:new Kn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:jn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:it({address:u.mintLp.toBase58(),programId:Re.toBase58(),decimals:u.lpDecimals}),config:E(K({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{TOKEN_PROGRAM_ID as pf}from"@solana/spl-token";import{PublicKey as ff,Transaction as Es,TransactionInstruction as yf}from"@solana/web3.js";import Sc from"bn.js";var nt=class extends Ke{static getPdaPoolId(e,t){return ue([nt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return ue([nt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Sc(r).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:r,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>nt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<nt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>nt.getPdaOwnerId(t,m,r,l).publicKey));let c=await Bt(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==nt.POOL_LAYOUT.span||b.data.length!==nt.OWNER_LAYOUT.span)continue;let g=nt.POOL_LAYOUT.decode(f.data),w=nt.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),k=g.endTime.toNumber(),I=w.tokenInfo.map(x=>x.debtAmount.gt(new Sc(0))).filter(x=>!x).length!==3,T=i>A&&i<k&&g.status===1,S=I&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:w.lpAmount,project:nt.VERSION_PROJECT[m],openTime:A,endTime:k,canClaim:S,canClaimErrorType:I?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:w.tokenInfo[R].debtAmount.add(w.tokenInfo[R].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(ye.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!c.mintAddress.equals(ye.WSOL.mint),associatedOnly:c.mintAddress.equals(ye.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(ye.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(ye.WSOL.mint),associatedOnly:m.mintAddress.equals(ye.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:r,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return fr(c,[r,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new Es().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new Es().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new Es().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=_([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:pf,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new yf({keys:i,programId:e,data:a})}},kt=nt;kt.CLAIMED_NUM=3,kt.POOL_LAYOUT=_([ge(8),W("bump"),W("status"),h("openTime"),h("endTime"),C("ammId"),X(_([W("mintDecimals"),C("mintAddress"),C("mintVault"),h("perLpLoss"),h("totalClaimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),X(h(),10,"padding")]),kt.OWNER_LAYOUT=_([ge(8),W("bump"),W("version"),C("poolId"),C("owner"),h("lpAmount"),X(_([C("mintAddress"),h("debtAmount"),h("claimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),X(h(),4,"padding")]),kt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new ff(e)),kt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},kt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Uo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Lc}from"@solana/spl-token";import Go from"bn.js";import{TransactionInstruction as gf,SYSVAR_RENT_PUBKEY as Af}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kc}from"@solana/spl-token";import{createInitializeAccountInstruction as Cc}from"@solana/spl-token";import{SystemProgram as Cn,Transaction as Rc}from"@solana/web3.js";function bf(o="accountFlags"){let e=new Tr(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Ds=_([ge(5),bf("accountFlags"),C("ownAddress"),h("vaultSignerNonce"),C("baseMint"),C("quoteMint"),C("baseVault"),h("baseDepositsTotal"),h("baseFeesAccrued"),C("quoteVault"),h("quoteDepositsTotal"),h("quoteFeesAccrued"),h("quoteDustThreshold"),C("requestQueue"),C("eventQueue"),C("bids"),C("asks"),h("baseLotSize"),h("quoteLotSize"),h("feeRateBps"),h("referrerRebatesAccrued"),ge(7)]);function wf({programId:o,marketInfo:e}){let t=_([W("version"),Ye("instruction"),h("baseLotSize"),h("quoteLotSize"),qt("feeRateBps"),h("vaultSignerNonce"),h("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:Af,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}:[]),r=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},r),new gf({keys:n,programId:o,data:r})}async function Oc({connection:o,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Rc,r=await o.getMinimumBalanceForRentExemption(165);n.add(Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:Kc}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:Kc}),Cc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Cc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new Rc;return i.add(Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(Ds.span),space:Ds.span,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),wf({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[F.CreateAccount,F.CreateAccount,F.InitAccount,F.InitAccount]},{transaction:i,signer:[],instructionTypes:[F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.InitMarket]}]}var Hn=class extends Ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:i,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,txVersion:u,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=ct({fromPublicKey:m,programId:i}),p=ct({fromPublicKey:m,programId:i}),y=ct({fromPublicKey:m,programId:i}),f=ct({fromPublicKey:m,programId:i}),b=ct({fromPublicKey:m,programId:i}),g=ct({fromPublicKey:m,programId:Lc}),w=ct({fromPublicKey:m,programId:Lc}),A=0,k=new Go(100);function I(){let D=new Go(0);for(;;)try{return{vaultOwner:Uo.createProgramAddressSync([d.publicKey.toBuffer(),D.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:D}}catch{if(D.iaddn(1),D.gt(new Go(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=I(),x=new Go(Math.round(10**e.decimals*n)),R=new Go(Math.round(n*10**t.decimals*r));if(x.eq(De))throw Error("lot size is too small");if(R.eq(De))throw Error("tick size or lot size is too small");let B=await Oc({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:d,baseMint:e.mint,quoteMint:t.mint,baseVault:g,quoteVault:w,vaultOwner:T,requestQueue:p,eventQueue:y,bids:f,asks:b,feeRateBps:A,quoteDustThreshold:k,vaultSignerNonce:S,baseLotSize:x,quoteLotSize:R,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c}}),M=this.createTxBuilder();M.addInstruction({instructions:B[0].transaction.instructions,signers:B[0].signer});for await(let D of B.slice(1,B.length))M.addInstruction({instructions:D.transaction.instructions,signers:D.signer,instructionTypes:D.instructionTypes});return u===0?M.sizeCheckBuildV0({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:w.publicKey,baseMint:new Uo(e.mint),quoteMin:new Uo(t.mint)}}):M.sizeCheckBuild({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:w.publicKey,baseMint:new Uo(e.mint),quoteMin:new Uo(t.mint)}})}};import{PublicKey as zo}from"@solana/web3.js";import{TransactionInstruction as qs,SYSVAR_CLOCK_PUBKEY as Pf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Us}from"@solana/spl-token";var Ws=_([W("instruction"),za("amount")]),Xo=_([W("instruction")]);function V0({programId:o,amount:e,instructionKeys:t}){let n=[{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:Us,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:yi,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],r=Buffer.alloc(Ws.span);return Ws.encode({instruction:1,amount:Number(e)},r),new qs({keys:n,programId:o,data:r})}function ei({programId:o},e){let t=[{pubkey:Us,isSigner:!1,isWritable:!1},{pubkey:yi,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(Xo.span);return Xo.encode({instruction:2},n),new qs({keys:t,programId:o,data:n})}function Gs(o){let{poolConfig:e,userKeys:t,side:n}=o,r=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Xo.span);Xo.encode({instruction:2},s);let a=[{pubkey:Us,isWritable:!1,isSigner:!1},{pubkey:Pf,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new qs({programId:e.programId,keys:a,data:s})}import Nc from"bn.js";var hf={[co.IDO_PROGRAM_ID_V1.toString()]:1,[co.IDO_PROGRAM_ID_V2.toString()]:2,[co.IDO_PROGRAM_ID_V3.toString()]:3,[co.IDO_PROGRAM_ID_V4.toString()]:4},Zn=class extends Ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=hf[t.programId];a||this.logAndCreateError("invalid version",a);let c=Ie(t),[u,l]=[!new Nc(e.coin).isZero(),!new Nc(e.pc).isZero()],m=c.projectInfo.mint.address.equals(j),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:r});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(j),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:r});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[ei({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new zo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[ei({programId:new zo(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new zo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[ei({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new zo(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new zo(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[Gs(E(K({},g),{side:"base"}))]:[],...l?[Gs(E(K({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as kf}from"@solana/web3.js";import{MintLayout as Tf,TOKEN_2022_PROGRAM_ID as Xs,TOKEN_PROGRAM_ID as zs}from"@solana/spl-token";var Qo=class extends Ke{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:r="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Mt.address,Mt),this._mintGroup.official.add(Mt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,E(K({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,E(K({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Xs.toBase58():zs.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,E(K({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Xs.toBase58():zs.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,E(K({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Xs.toBase58():zs.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),r=this._tokenMap.get(n);if(r)return r;if(n.toLocaleUpperCase()==="SOL")return Mt;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,E(K({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new kf(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=Tf.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var ti=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new xt(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ce("Raydium"),this.farm=new Bo({scope:this,moduleName:"Raydium_Farm"}),this.account=new fo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new vo({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Qo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new qo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Vo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Wo({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new kt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Hn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Zn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=If({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,c=new Pr({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),u=new ti(E(K({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(hr);return this._owner.publicKey}setOwner(e){return this._owner=e?new xt(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(qa);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(hr),new Error(hr)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(r=>E(K({},r),{mintAuthority:r.mint_authority||void 0,freezeAuthority:r.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var EK=o=>o;export{Qb as ACCOUNT_TYPE_SIZE,wg as ALL_PROGRAM_ID,Ip as AMM_CONFIG_SEED,dm as AMM_STABLE,Oi as AMM_V4,qf as ANAMint,Ne as API_URLS,am as AccountType,Pr as Api,Gu as BIT_PRECISION,St as BNDivCeil,gn as BNLayout,Hy as BN_100,Zy as BN_1000,$y as BN_10000,jy as BN_FIVE,Pa as BN_ONE,pn as BN_TEN,Yy as BN_THREE,Qy as BN_TWO,De as BN_ZERO,KA as BitStructure,Xa as Blob,Li as CLMM_PROGRAM_ID,yi as CLOCK_PROGRAM_ID,Am as CREATE_CPMM_POOL_AUTH,wm as CREATE_CPMM_POOL_FEE_ACC,Ni as CREATE_CPMM_POOL_PROGRAM,Vo as Clmm,$u as ClmmConfigLayout,Se as ClmmInstrument,Ur as ConstantProductCurve,Pc as CpmmConfigInfoLayout,Wr as CpmmFee,Yr as CpmmPoolInfoLayout,no as Currency,fn as CurrencyAmount,Xr as CurveCalculator,Pg as DEVNET_PROGRAM_ID,Qg as DEV_API_URLS,hm as DEV_CREATE_CPMM_POOL_AUTH,km as DEV_CREATE_CPMM_POOL_FEE_ACC,Pm as DEV_CREATE_CPMM_POOL_PROGRAM,cp as DataElement,Uf as ETHMint,Is as EXTENSION_TICKARRAY_BITMAP_SIZE,pu as FARM_LOCK_MINT,fu as FARM_LOCK_VAULT,Ci as FARM_PROGRAM_ID_V3,Ri as FARM_PROGRAM_ID_V5,Fn as FARM_PROGRAM_ID_V6,gt as FARM_PROGRAM_TO_VERSION,bu as FARM_VERSION_TO_LEDGER_LAYOUT,yu as FARM_VERSION_TO_STATE_LAYOUT,Ag as FEE_DESTINATION_ID,vr as FEE_RATE_DENOMINATOR,Ls as FEE_RATE_DENOMINATOR_VALUE,Np as FETCH_TICKARRAY_COUNT,Lp as Fee,re as Fraction,co as IDO_ALL_PROGRAM,fm as IDO_PROGRAM_ID_V1,ym as IDO_PROGRAM_ID_V2,bm as IDO_PROGRAM_ID_V3,gm as IDO_PROGRAM_ID_V4,ir as INSTRUCTION_PROGRAM_ID,F as InstructionType,Fa as JupTokenType,Fr as LIQUIDITY_FEES_DENOMINATOR,Ks as LIQUIDITY_FEES_NUMERATOR,Va as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,Dp as LIQUIDITY_VERSION_TO_SERUM_VERSION,ik as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Xu as LOG_B_2_X32,zu as LOG_B_P_ERR_MARGIN_LOWER_X64,Qu as LOG_B_P_ERR_MARGIN_UPPER_X64,br as LOOKUP_TABLE_CACHE,lo as Layout,le as LiquidityMath,Fc as LogLevel,ri as Logger,Ds as MARKET_STATE_LAYOUT_V2,Fs as MARKET_STATE_LAYOUT_V3,Ic as MARKET_VERSION_TO_STATE_LAYOUT,Sa as MAX_BASE64_SIZE,ht as MAX_SQRT_PRICE_X64,_r as MAX_SQRT_PRICE_X64_SUB_ONE,st as MAX_TICK,or as MEMO_PROGRAM_ID,rr as MEMO_PROGRAM_ID2,_n as METADATA_PROGRAM_ID,Pt as MIN_SQRT_PRICE_X64,Mr as MIN_SQRT_PRICE_X64_ADD_ONE,et as MIN_TICK,Xn as MODEL_DATA_PUBKEY,Zr as Market,ne as MathUtil,Ts as MaxU64,Uu as MaxUint128,zt as NEGATIVE_ONE,Wf as NRVMint,Op as OBSERVATION_SEED,yt as ONE,mm as OPEN_BOOK_PROGRAM,Cp as OPERATION_SEED,Ju as ObservationInfoLayout,vp as ObservationLayout,ec as OperationLayout,Di as OptionLayout,xt as Owner,Mf as PAIMint,Sp as POOL_REWARD_VAULT_SEED,Bp as POOL_SEED,Rp as POOL_TICK_ARRAY_BITMAP_SEED,xp as POOL_VAULT_SEED,Eu as POSITION_SEED,Me as Percent,Ea as PoolFetchType,In as PoolInfoLayout,Ce as PoolUtils,Vr as PositionInfoLayout,Fp as PositionRewardInfoLayout,No as PositionUtils,Ue as Price,UT as ProtocolPositionLayout,Nr as Q128,bt as Q64,Nf as RAYMint,ut as RENT_PROGRAM_ID,ti as Raydium,Vp as RewardInfo,dc as RoundDirection,wi as Rounding,pm as Router,kc as SERUM_PROGRAMID_TO_VERSION,Ar as SERUM_PROGRAM_ID_V3,Tc as SERUM_VERSION_TO_PROGRAMID,Da as SESSION_KEY,Fe as SOLMint,Mt as SOL_INFO,Nh as SPL_MINT_LAYOUT,_f as SRMMint,Mi as STORAGE_KEY,sr as SYSTEM_PROGRAM_ID,ee as SqrtPriceMath,Gn as StableLayout,Wi as Structure,Tn as SwapMath,kn as TICK_ARRAY_BITMAP_SIZE,Kp as TICK_ARRAY_SEED,qe as TICK_ARRAY_SIZE,Lk as TICK_SPACINGS,Ee as TOKEN_WSOL,Qt as TickArrayBitmap,Zu as TickArrayBitmapExtensionLayout,Lo as TickArrayBitmapExtensionUtils,Oo as TickArrayLayout,Ep as TickLayout,Bn as TickMath,me as TickQuery,H as TickUtils,ye as Token,fe as TokenAmount,gr as TxBuilder,yn as TxVersion,Ro as U64Resolution,Mk as U64_IGNORE_RANGE,Vi as UInt,vf as USDCMint,Df as USDHMint,Vf as USDTMint,lm as UTIL1216,qi as Union,mu as Voter,Gd as VoterDepositEntry,Ud as VoterLockup,lu as VoterRegistrar,qd as VoterVotingMintConfig,j as WSOLMint,Tr as WideBits,Ut as WrappedLayout,pe as ZERO,ba as _100_PERCENT,P as accountMeta,My as add,pr as addComputeBudget,bs as addLiquidityLayout,pw as array,Hi as associatedLedgerAccountLayout,Fi as bits,ge as blob,je as bool,cs as calFarmRewardAmount,Qp as ceilDiv,oo as checkLegacyTxSize,ro as checkV0TxSize,xi as chunkArray,Xo as claimLayout,Hu as clmmComputeInfoToApiInfo,vt as closeAccountInstruction,di as commonSystemAccountMeta,ho as createAssociatedLedgerAccountInstruction,ce as createLogger,Bu as createPoolFeeLayout,Mu as createPoolV4InstructionV2,rk as createPoolV4Layout,Gt as createWSolAccountInstructions,nw as cstr,Ay as currencyEquals,Ql as decimalToFraction,Ad as decodeBool,Ry as div,cr as divCeil,rt as dwLayout,wd as encodeBool,fA as endlessRetry,Gl as eq,ZA as f32,$A as f32be,JA as f64,ew as f64be,es as farmAddRewardLayout,AP as farmLedgerLayoutV3_1,bo as farmLedgerLayoutV3_2,wP as farmLedgerLayoutV5_1,uu as farmLedgerLayoutV5_2,cu as farmLedgerLayoutV6_1,Au as farmRewardInfoToConfig,$i as farmRewardLayout,Ji as farmRewardRestartLayout,Wd as farmRewardTimeInfoLayout,su as farmStateV3Layout,au as farmStateV5Layout,yo as farmStateV6Layout,GP as fetchMultipleFarmInfoAndUpdate,PI as fetchMultipleInfo,Vn as fetchMultipleMintInfos,ue as findProgramAddress,ps as fixedSwapInLayout,fs as fixedSwapOutLayout,lc as floorDiv,fr as forecastTransactionSize,wp as formatLayout,ct as generatePubKey,we as getATAAddress,gu as getAssociatedAuthority,Er as getAssociatedConfigId,Je as getAssociatedLedgerAccount,Ao as getAssociatedLedgerPoolAccount,Xp as getAssociatedOpenOrders,sc as getAssociatedPoolKeys,HB as getCpmmPdaAmmConfigId,tf as getCpmmPdaPoolId,fc as getCreatePoolKeys,Ma as getDate,ls as getDepositEntryIndex,Cu as getDxByDyBaseIn,Ku as getDyByDxBaseIn,Vb as getEpochInfo,Un as getFarmLedgerLayout,Xd as getFarmStateLayout,Os as getLiquidityAssociatedAuthority,xn as getLiquidityAssociatedId,wT as getLiquidityFromAmounts,Ny as getMax,Bt as getMultipleAccountsInfo,We as getMultipleAccountsInfoWithCustomFlags,Si as getMultipleLookupTableInfo,Ck as getPdaAmmConfigId,mt as getPdaExBitmapAccount,nf as getPdaLpMint,Lr as getPdaMetadataKey,qu as getPdaObservationAccount,zr as getPdaObservationId,Co as getPdaOperationAccount,At as getPdaPersonalPositionAddress,jn as getPdaPoolAuthority,Du as getPdaPoolId,Wu as getPdaPoolRewardVaulId,ks as getPdaPoolVaultId,hn as getPdaProtocolPositionAddress,he as getPdaTickArrayAddress,pc as getPdaVault,vn as getRecentBlockHash,os as getRegistrarAddress,Bm as getSessionKey,Ru as getStablePrice,cm as getTime,Bb as getTimestamp,us as getTokenOwnerRecordAddress,Sg as getTransferAmountFee,be as getTransferAmountFeeV2,ss as getVoterAddress,as as getVoterWeightRecordAddress,is as getVotingMintAuthority,rs as getVotingTokenMint,ep as governanceCreateTokenOwnerRecord,CA as greedy,Ul as gt,Cy as gte,$a as i128,Ik as i16ToBytes,Or as i32ToBytes,Dn as i64,Za as i8,ys as initPoolLayout,Yi as initTokenAccountInstruction,wf as initializeMarket,mg as intersection,va as isDateAfter,_a as isDateBefore,Yl as isDecimal,Ly as isMeaningfulNumber,Na as isNumber,ts as isValidFarmVersion,Ko as isZero,Ie as jsonInfo2PoolKeys,XP as judgeFarmType,Ps as leadingZeros,Fu as leastSignificantBit,So as liquidityStateV4Layout,ap as liquidityStateV5Layout,Sy as lt,Ky as lte,Ff as mSOLMint,Rr as makeAMMSwapInstruction,Nu as makeAddLiquidityInstruction,ds as makeAddNewRewardInstruction,ei as makeClaimInstruction,Gs as makeClaimInstructionV4,bc as makeCreateCpmmPoolInInstruction,wu as makeCreateFarmInstruction,Oc as makeCreateMarketInstruction,Pu as makeCreatorWithdrawFarmRewardInstruction,gc as makeDepositCpmmInInstruction,hu as makeDepositInstructionV3,ku as makeDepositInstructionV5,Tu as makeDepositInstructionV6,uh as makeDepositTokenInstruction,lh as makeDepositWithdrawInstruction,kk as makeInitPoolInstructionV4,V0 as makePurchaseInstruction,ms as makeRestartRewardInstruction,_u as makeSimulatePoolInfoInstruction,Qr as makeSwapCpmmBaseInInInstruction,wc as makeSwapCpmmBaseOutInInstruction,kp as makeSwapFixedInInstruction,Tp as makeSwapFixedOutInstruction,hc as makeSwapInstruction,po as makeTransferInstruction,Ac as makeWithdrawCpmmInInstruction,Io as makeWithdrawInstructionV3,To as makeWithdrawInstructionV5,ko as makeWithdrawInstructionV6,ch as makeWithdrawTokenInstruction,Kt as minExpirationTime,Nk as mockCreatePoolInfo,Yu as mockV3CreatePoolInfo,lp as modelDataInfoLayout,Vu as mostSignificantBit,ki as mul,Ti as notInnerObject,GA as ns64,HA as ns64be,za as nu64,FA as nu64be,Ei as offset,yg as offsetDateTime,uw as option,Y as parseBigNumberish,dn as parseNumberInfo,Ca as parseSimulateLogToJson,Wt as parseSimulateValue,iu as parseTokenAccountResp,Uh as parseTokenInfo,un as poolTypeV6,bn as printSimulate,C as publicKey,Ws as purchaseLayout,Fd as realFarmStateV3Layout,Ed as realFarmStateV5Layout,Dd as realFarmV6Layout,wa as recursivelyDecimalToFraction,ws as removeLiquidityInstruction,gs as removeLiquidityLayout,Jx as route1Instruction,eS as route2Instruction,mf as routeInstruction,dw as rustEnum,DA as s16,XA as s16be,WA as s24,zA as s24be,Qe as s32,QA as s32be,qA as s40,YA as s40be,UA as s48,jA as s48be,EA as s8,X as seq,Sf as setLoggerLevel,Xl as shakeFractionDecimal,Ka as simulateMultipleInstruction,hk as simulatePoolInfoInstruction,tm as simulateTransaction,Ta as sleep,pt as solToWSol,Xh as solToWSolToken,on as splAccountLayout,ka as splitNumber,Ef as stSOLMint,mw as str,_ as struct,Oy as sub,lw as tagged,Pi as tenExponential,Dr as toAmmComputePoolInfo,it as toApiV3Token,zl as toBN,Ra as toBuffer,cn as toFeeConfig,ha as toFraction,xy as toFractionWithDecimals,Jy as toPercent,Cr as toToken,xo as toTokenAmount,Gh as toTokenInfo,eb as toTokenPrice,tb as toTotalPrice,Aa as toUsdCurrency,hs as trailingZeros,Fb as transformTxToBase64,fi as tryParsePublicKey,nm as txToBase64,J as u128,qt as u16,vu as u16ToBytes,NA as u16be,RA as u24,MA as u24be,Ye as u32,Bk as u32ToBytes,_A as u32be,OA as u40,vA as u40be,LA as u48,VA as u48be,h as u64,W as u8,fw as union,EK as unionArr,tw as unionLayoutDiscriminator,pg as uniq,zd as updateFarmPoolInfo,wr as updateReqHistory,ow as utf8,pi as validateAndParsePublicKey,ns as validateFarmRewards,cw as vec,Pd as vecU8,np as voterStakeRegistryCreateDepositEntry,tp as voterStakeRegistryCreateVoter,Zd as voterStakeRegistryDeposit,$d as voterStakeRegistryUpdateVoterWeightRecord,Jd as voterStakeRegistryWithdraw,zh as wSolToSolToken,Zi as withdrawRewardLayout,dg as xor,yw as zeros};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=index.mjs.map