@raydium-io/raydium-sdk-v2 0.2.24-alpha → 0.2.25-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.
package/lib/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- var rd=Object.defineProperty,sd=Object.defineProperties;var ad=Object.getOwnPropertyDescriptors;var kr=Object.getOwnPropertySymbols;var mc=Object.prototype.hasOwnProperty,dc=Object.prototype.propertyIsEnumerable;var lc=(i,e,t)=>e in i?rd(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,_=(i,e)=>{for(var t in e||(e={}))mc.call(e,t)&&lc(i,t,e[t]);if(kr)for(var t of kr(e))dc.call(e,t)&&lc(i,t,e[t]);return i},U=(i,e)=>sd(i,ad(e));var Qe=(i,e)=>{var t={};for(var n in i)mc.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&kr)for(var n of kr(i))e.indexOf(n)<0&&dc.call(i,n)&&(t[n]=i[n]);return t};import el from"axios";import{PublicKey as yc}from"@solana/web3.js";import{get as _s,set as pc}from"lodash";var ud=(o=>(o[o.Error=0]="Error",o[o.Warning=1]="Warning",o[o.Info=2]="Info",o[o.Debug=3]="Debug",o))(ud||{}),Es=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}},Vs={},fc={};function ke(i){let e=_s(Vs,i);if(!e){let t=_s(fc,i);e=new Es({name:i,logLevel:t}),pc(Vs,i,e)}return e}function lg(i,e){pc(fc,i,e);let t=_s(Vs,i);t&&(t.level=e)}import{MINT_SIZE as cd,TOKEN_PROGRAM_ID as ld,getTransferFeeConfig as md,unpackMint as dd}from"@solana/spl-token";var Ds=ke("Raydium_accountInfo_util");async function dn(i,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:r=100}=_({batchRequest:!1},t),s=Ws(e,r),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=i._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=Ws(c,10);a=(await(await Promise.all(u.map(async m=>await i._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Ds.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:f,lamports:y,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Ds.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new yc(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>i.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&Ds.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function We(i,e,t){let n=await dn(i,e.map(o=>o.pubkey),t);return e.map((o,r)=>U(_({},o),{accountInfo:n[r]}))}var pd=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(pd||{}),Ag=1;async function _o({connection:i,mints:e,config:t}){var r,s,a;if(e.length===0)return{};let n=await We(i,e.map(c=>({pubkey:It(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<cd){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=dd(c.pubkey,c.accountInfo,(r=c.accountInfo)==null?void 0:r.owner);o[c.pubkey.toString()]=U(_({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||ld,feeConfig:(a=md(u))!=null?a:void 0})}return o[yc.default.toBase58()]=o[$.toBase58()],o}import tt from"bn.js";var Eo=9e15,Zn=1e9,qs="0123456789abcdef",Tr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Ir="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Us={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Eo,maxE:Eo,crypto:!1},Ac,Cn,ge=!0,xr="[DecimalError] ",jn=xr+"Invalid argument: ",wc=xr+"Precision limit exceeded",kc=xr+"crypto unavailable",hc="[object Decimal]",Bt=Math.floor,lt=Math.pow,fd=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,yd=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,bd=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Tc=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,fn=1e7,pe=7,gd=9007199254740991,Pd=Tr.length-1,Gs=Ir.length-1,X={toStringTag:hc};X.absoluteValue=X.abs=function(){var i=new this.constructor(this);return i.s<0&&(i.s=1),se(i)};X.ceil=function(){return se(new this.constructor(this),this.e+1,2)};X.clampedTo=X.clamp=function(i,e){var t,n=this,o=n.constructor;if(i=new o(i),e=new o(e),!i.s||!e.s)return new o(NaN);if(i.gt(e))throw Error(jn+e);return t=n.cmp(i),t<0?i:n.cmp(e)>0?e:new o(n)};X.comparedTo=X.cmp=function(i){var e,t,n,o,r=this,s=r.d,a=(i=new r.constructor(i)).d,c=r.s,u=i.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(r.e!==i.e)return r.e>i.e^c<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};X.cosine=X.cos=function(){var i,e,t=this,n=t.constructor;return t.d?t.d[0]?(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+pe,n.rounding=1,t=Ad(n,Kc(n,t)),n.precision=i,n.rounding=e,se(Cn==2||Cn==3?t.neg():t,i,e,!0)):new n(1):new n(NaN)};X.cubeRoot=X.cbrt=function(){var i,e,t,n,o,r,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(ge=!1,r=l.s*lt(l.s*l,1/3),!r||Math.abs(r)==1/0?(t=wt(l.d),i=l.e,(r=(i-t.length+1)%3)&&(t+=r==1||r==-2?"0":"00"),r=lt(t,1/3),i=Bt((i+1)/3)-(i%3==(i<0?-1:2)),r==1/0?t="5e"+i:(t=r.toExponential(),t=t.slice(0,t.indexOf("e")+1)+i),n=new m(t),n.s=l.s):n=new m(r.toString()),s=(i=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=qe(u.plus(l).times(a),u.plus(c),s+2,1),wt(a.d).slice(0,s)===(t=wt(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(se(a,i+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(se(n,i+1,1),e=!n.times(n).times(n).eq(l));break}return ge=!0,se(n,i,m.rounding,e)};X.decimalPlaces=X.dp=function(){var i,e=this.d,t=NaN;if(e){if(i=e.length-1,t=(i-Bt(this.e/pe))*pe,i=e[i],i)for(;i%10==0;i/=10)t--;t<0&&(t=0)}return t};X.dividedBy=X.div=function(i){return qe(this,new this.constructor(i))};X.dividedToIntegerBy=X.divToInt=function(i){var e=this,t=e.constructor;return se(qe(e,new t(i),0,1,1),t.precision,t.rounding)};X.equals=X.eq=function(i){return this.cmp(i)===0};X.floor=function(){return se(new this.constructor(this),this.e+1,3)};X.greaterThan=X.gt=function(i){return this.cmp(i)>0};X.greaterThanOrEqualTo=X.gte=function(i){var e=this.cmp(i);return e==1||e===0};X.hyperbolicCosine=X.cosh=function(){var i,e,t,n,o,r=this,s=r.constructor,a=new s(1);if(!r.isFinite())return new s(r.s?1/0:NaN);if(r.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(r.e,r.sd())+4,s.rounding=1,o=r.d.length,o<32?(i=Math.ceil(o/3),e=(1/Kr(4,i)).toString()):(i=16,e="2.3283064365386962890625e-10"),r=Vo(s,1,r.times(e),new s(1),!0);for(var c,u=i,l=new s(8);u--;)c=r.times(r),r=a.minus(c.times(l.minus(c.times(l))));return se(r,s.precision=t,s.rounding=n,!0)};X.hyperbolicSine=X.sinh=function(){var i,e,t,n,o=this,r=o.constructor;if(!o.isFinite()||o.isZero())return new r(o);if(e=r.precision,t=r.rounding,r.precision=e+Math.max(o.e,o.sd())+4,r.rounding=1,n=o.d.length,n<3)o=Vo(r,2,o,o,!0);else{i=1.4*Math.sqrt(n),i=i>16?16:i|0,o=o.times(1/Kr(5,i)),o=Vo(r,2,o,o,!0);for(var s,a=new r(5),c=new r(16),u=new r(20);i--;)s=o.times(o),o=o.times(a.plus(s.times(c.times(s).plus(u))))}return r.precision=e,r.rounding=t,se(o,e,t,!0)};X.hyperbolicTangent=X.tanh=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+7,n.rounding=1,qe(t.sinh(),t.cosh(),n.precision=i,n.rounding=e)):new n(t.s)};X.inverseCosine=X.acos=function(){var i,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,r=t.rounding;return n!==-1?n===0?e.isNeg()?pn(t,o,r):new t(0):new t(NaN):e.isZero()?pn(t,o+4,r).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),i=pn(t,o+4,r).times(.5),t.precision=o,t.rounding=r,i.minus(e))};X.inverseHyperbolicCosine=X.acosh=function(){var i,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(i=n.precision,e=n.rounding,n.precision=i+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,ge=!1,t=t.times(t).minus(1).sqrt().plus(t),ge=!0,n.precision=i,n.rounding=e,t.ln()):new n(t)};X.inverseHyperbolicSine=X.asinh=function(){var i,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,ge=!1,t=t.times(t).plus(1).sqrt().plus(t),ge=!0,n.precision=i,n.rounding=e,t.ln())};X.inverseHyperbolicTangent=X.atanh=function(){var i,e,t,n,o=this,r=o.constructor;return o.isFinite()?o.e>=0?new r(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(i=r.precision,e=r.rounding,n=o.sd(),Math.max(n,i)<2*-o.e-1?se(new r(o),i,e,!0):(r.precision=t=n-o.e,o=qe(o.plus(1),new r(1).minus(o),t+i,1),r.precision=i+4,r.rounding=1,o=o.ln(),r.precision=i,r.rounding=e,o.times(.5))):new r(NaN)};X.inverseSine=X.asin=function(){var i,e,t,n,o=this,r=o.constructor;return o.isZero()?new r(o):(e=o.abs().cmp(1),t=r.precision,n=r.rounding,e!==-1?e===0?(i=pn(r,t+4,n).times(.5),i.s=o.s,i):new r(NaN):(r.precision=t+6,r.rounding=1,o=o.div(new r(1).minus(o.times(o)).sqrt().plus(1)).atan(),r.precision=t,r.rounding=n,o.times(2)))};X.inverseTangent=X.atan=function(){var i,e,t,n,o,r,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<=Gs)return s=pn(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Gs)return s=pn(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/pe+2|0),i=t;i;--i)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(ge=!1,e=Math.ceil(a/pe),n=1,c=u.times(u),s=new l(u),o=u;i!==-1;)if(o=o.times(c),r=s.minus(o.div(n+=2)),o=o.times(c),s=r.plus(o.div(n+=2)),s.d[e]!==void 0)for(i=e;s.d[i]===r.d[i]&&i--;);return t&&(s=s.times(2<<t-1)),ge=!0,se(s,l.precision=m,l.rounding=d,!0)};X.isFinite=function(){return!!this.d};X.isInteger=X.isInt=function(){return!!this.d&&Bt(this.e/pe)>this.d.length-2};X.isNaN=function(){return!this.s};X.isNegative=X.isNeg=function(){return this.s<0};X.isPositive=X.isPos=function(){return this.s>0};X.isZero=function(){return!!this.d&&this.d[0]===0};X.lessThan=X.lt=function(i){return this.cmp(i)<0};X.lessThanOrEqualTo=X.lte=function(i){return this.cmp(i)<1};X.logarithm=X.log=function(i){var e,t,n,o,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(i==null)i=new l(10),e=!0;else{if(i=new l(i),t=i.d,i.s<0||!t||!t[0]||i.eq(1))return new l(NaN);e=i.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)r=!0;else{for(o=t[0];o%10===0;)o/=10;r=o!==1}if(ge=!1,a=m+p,s=Qn(u,a),n=e?Br(l,a+10):Qn(i,a),c=qe(s,n,a,1),mi(c.d,o=m,d))do if(a+=10,s=Qn(u,a),n=e?Br(l,a+10):Qn(i,a),c=qe(s,n,a,1),!r){+wt(c.d).slice(o+1,o+15)+1==1e14&&(c=se(c,m+1,0));break}while(mi(c.d,o+=10,d));return ge=!0,se(c,m,d)};X.minus=X.sub=function(i){var e,t,n,o,r,s,a,c,u,l,m,d,p=this,f=p.constructor;if(i=new f(i),!p.d||!i.d)return!p.s||!i.s?i=new f(NaN):p.d?i.s=-i.s:i=new f(i.d||p.s!==i.s?p:NaN),i;if(p.s!=i.s)return i.s=-i.s,p.plus(i);if(u=p.d,d=i.d,a=f.precision,c=f.rounding,!u[0]||!d[0]){if(d[0])i.s=-i.s;else if(u[0])i=new f(p);else return new f(c===3?-0:0);return ge?se(i,a,c):i}if(t=Bt(i.e/pe),l=Bt(p.e/pe),u=u.slice(),r=l-t,r){for(m=r<0,m?(e=u,r=-r,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/pe),s)+2,r>n&&(r=n,e.length=1),e.reverse(),n=r;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}r=0}for(m&&(e=u,u=d,d=e,i.s=-i.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>r;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=fn-1;--u[o],u[n]+=fn}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(i.d=u,i.e=Sr(u,t),ge?se(i,a,c):i):new f(c===3?-0:0)};X.modulo=X.mod=function(i){var e,t=this,n=t.constructor;return i=new n(i),!t.d||!i.s||i.d&&!i.d[0]?new n(NaN):!i.d||t.d&&!t.d[0]?se(new n(t),n.precision,n.rounding):(ge=!1,n.modulo==9?(e=qe(t,i.abs(),0,3,1),e.s*=i.s):e=qe(t,i,0,n.modulo,1),e=e.times(i),ge=!0,t.minus(e))};X.naturalExponential=X.exp=function(){return Xs(this)};X.naturalLogarithm=X.ln=function(){return Qn(this)};X.negated=X.neg=function(){var i=new this.constructor(this);return i.s=-i.s,se(i)};X.plus=X.add=function(i){var e,t,n,o,r,s,a,c,u,l,m=this,d=m.constructor;if(i=new d(i),!m.d||!i.d)return!m.s||!i.s?i=new d(NaN):m.d||(i=new d(i.d||m.s===i.s?m:NaN)),i;if(m.s!=i.s)return i.s=-i.s,m.minus(i);if(u=m.d,l=i.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(i=new d(m)),ge?se(i,a,c):i;if(r=Bt(m.e/pe),n=Bt(i.e/pe),u=u.slice(),o=r-n,o){for(o<0?(t=u,o=-o,s=l.length):(t=l,n=r,s=u.length),r=Math.ceil(a/pe),s=r>s?r+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=u.length,o=l.length,s-o<0&&(o=s,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/fn|0,u[o]%=fn;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return i.d=u,i.e=Sr(u,n),ge?se(i,a,c):i};X.precision=X.sd=function(i){var e,t=this;if(i!==void 0&&i!==!!i&&i!==1&&i!==0)throw Error(jn+i);return t.d?(e=Ic(t.d),i&&t.e+1>e&&(e=t.e+1)):e=NaN,e};X.round=function(){var i=this,e=i.constructor;return se(new e(i),i.e+1,e.rounding)};X.sine=X.sin=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+pe,n.rounding=1,t=kd(n,Kc(n,t)),n.precision=i,n.rounding=e,se(Cn>2?t.neg():t,i,e,!0)):new n(NaN)};X.squareRoot=X.sqrt=function(){var i,e,t,n,o,r,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(ge=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=wt(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=Bt((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(r=n,n=r.plus(qe(s,r,t+2,1)).times(.5),wt(r.d).slice(0,t)===(e=wt(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(se(r,c+1,0),r.times(r).eq(s))){n=r;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(se(n,c+1,1),i=!n.times(n).eq(s));break}return ge=!0,se(n,c,l.rounding,i)};X.tangent=X.tan=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+10,n.rounding=1,t=t.sin(),t.s=1,t=qe(t,new n(1).minus(t.times(t)).sqrt(),i+10,0),n.precision=i,n.rounding=e,se(Cn==2||Cn==4?t.neg():t,i,e,!0)):new n(NaN)};X.times=X.mul=function(i){var e,t,n,o,r,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(i=new m(i)).d;if(i.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!i.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?i.s/0:i.s*0);for(t=Bt(l.e/pe)+Bt(i.e/pe),c=d.length,u=p.length,c<u&&(r=d,d=p,p=r,s=c,c=u,u=s),r=[],s=c+u,n=s;n--;)r.push(0);for(n=u;--n>=0;){for(e=0,o=c+n;o>n;)a=r[o]+p[n]*d[o-n-1]+e,r[o--]=a%fn|0,e=a/fn|0;r[o]=(r[o]+e)%fn|0}for(;!r[--s];)r.pop();return e?++t:r.shift(),i.d=r,i.e=Sr(r,t),ge?se(i,m.precision,m.rounding):i};X.toBinary=function(i,e){return Ys(this,2,i,e)};X.toDecimalPlaces=X.toDP=function(i,e){var t=this,n=t.constructor;return t=new n(t),i===void 0?t:(Ut(i,0,Zn),e===void 0?e=n.rounding:Ut(e,0,8),se(t,i+t.e+1,e))};X.toExponential=function(i,e){var t,n=this,o=n.constructor;return i===void 0?t=hn(n,!0):(Ut(i,0,Zn),e===void 0?e=o.rounding:Ut(e,0,8),n=se(new o(n),i+1,e),t=hn(n,!0,i+1)),n.isNeg()&&!n.isZero()?"-"+t:t};X.toFixed=function(i,e){var t,n,o=this,r=o.constructor;return i===void 0?t=hn(o):(Ut(i,0,Zn),e===void 0?e=r.rounding:Ut(e,0,8),n=se(new r(o),i+o.e+1,e),t=hn(n,!1,i+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};X.toFraction=function(i){var e,t,n,o,r,s,a,c,u,l,m,d,p=this,f=p.d,y=p.constructor;if(!f)return new y(p);if(u=t=new y(1),n=c=new y(0),e=new y(n),r=e.e=Ic(f)-p.e-1,s=r%pe,e.d[0]=lt(10,s<0?pe+s:s),i==null)i=r>0?e:u;else{if(a=new y(i),!a.isInt()||a.lt(u))throw Error(jn+a);i=a.gt(e)?r>0?e:u:a}for(ge=!1,a=new y(wt(f)),l=y.precision,y.precision=r=f.length*pe*2;m=qe(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(i)!=1;)t=n,n=o,o=u,u=c.plus(m.times(o)),c=o,o=e,e=a.minus(m.times(o)),a=o;return o=qe(i.minus(t),n,0,1,1),c=c.plus(o.times(u)),t=t.plus(o.times(n)),c.s=u.s=p.s,d=qe(u,n,r,1).minus(p).abs().cmp(qe(c,t,r,1).minus(p).abs())<1?[u,n]:[c,t],y.precision=l,ge=!0,d};X.toHexadecimal=X.toHex=function(i,e){return Ys(this,16,i,e)};X.toNearest=function(i,e){var t=this,n=t.constructor;if(t=new n(t),i==null){if(!t.d)return t;i=new n(1),e=n.rounding}else{if(i=new n(i),e===void 0?e=n.rounding:Ut(e,0,8),!t.d)return i.s?t:i;if(!i.d)return i.s&&(i.s=t.s),i}return i.d[0]?(ge=!1,t=qe(t,i,0,e,1).times(i),ge=!0,se(t)):(i.s=t.s,t=i),t};X.toNumber=function(){return+this};X.toOctal=function(i,e){return Ys(this,8,i,e)};X.toPower=X.pow=function(i){var e,t,n,o,r,s,a=this,c=a.constructor,u=+(i=new c(i));if(!a.d||!i.d||!a.d[0]||!i.d[0])return new c(lt(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,r=c.rounding,i.eq(1))return se(a,n,r);if(e=Bt(i.e/pe),e>=i.d.length-1&&(t=u<0?-u:u)<=gd)return o=Bc(c,a,t,n),i.s<0?new c(1).div(o):se(o,n,r);if(s=a.s,s<0){if(e<i.d.length-1)return new c(NaN);if((i.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=lt(+a,u),e=t==0||!isFinite(t)?Bt(u*(Math.log("0."+wt(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):(ge=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=Xs(i.times(Qn(a,n+t)),n),o.d&&(o=se(o,n+5,1),mi(o.d,n,r)&&(e=n+10,o=se(Xs(i.times(Qn(a,e+t)),e),e+5,1),+wt(o.d).slice(n+1,n+15)+1==1e14&&(o=se(o,n+1,0)))),o.s=s,ge=!0,c.rounding=r,se(o,n,r))};X.toPrecision=function(i,e){var t,n=this,o=n.constructor;return i===void 0?t=hn(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(Ut(i,1,Zn),e===void 0?e=o.rounding:Ut(e,0,8),n=se(new o(n),i,e),t=hn(n,i<=n.e||n.e<=o.toExpNeg,i)),n.isNeg()&&!n.isZero()?"-"+t:t};X.toSignificantDigits=X.toSD=function(i,e){var t=this,n=t.constructor;return i===void 0?(i=n.precision,e=n.rounding):(Ut(i,1,Zn),e===void 0?e=n.rounding:Ut(e,0,8)),se(new n(t),i,e)};X.toString=function(){var i=this,e=i.constructor,t=hn(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()&&!i.isZero()?"-"+t:t};X.truncated=X.trunc=function(){return se(new this.constructor(this),this.e+1,1)};X.valueOf=X.toJSON=function(){var i=this,e=i.constructor,t=hn(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()?"-"+t:t};function wt(i){var e,t,n,o=i.length-1,r="",s=i[0];if(o>0){for(r+=s,e=1;e<o;e++)n=i[e]+"",t=pe-n.length,t&&(r+=Hn(t)),r+=n;s=i[e],n=s+"",t=pe-n.length,t&&(r+=Hn(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return r+s}function Ut(i,e,t){if(i!==~~i||i<e||i>t)throw Error(jn+i)}function mi(i,e,t,n){var o,r,s,a;for(r=i[0];r>=10;r/=10)--e;return--e<0?(e+=pe,o=0):(o=Math.ceil((e+1)/pe),e%=pe),r=lt(10,pe-e),a=i[o]%r|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==r||t>3&&a+1==r/2)&&(i[o+1]/r/100|0)==lt(10,e-2)-1||(a==r/2||a==0)&&(i[o+1]/r/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==r||!n&&t>3&&a+1==r/2)&&(i[o+1]/r/1e3|0)==lt(10,e-3)-1,s}function hr(i,e,t){for(var n,o=[0],r,s=0,a=i.length;s<a;){for(r=o.length;r--;)o[r]*=e;for(o[0]+=qs.indexOf(i.charAt(s++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function Ad(i,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/Kr(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),i.precision+=t,e=Vo(i,1,e.times(o),new i(1));for(var r=t;r--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return i.precision-=t,e}var qe=function(){function i(n,o,r){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*o+a,n[c]=s%r|0,a=s/r|0;return a&&n.unshift(a),n}function e(n,o,r,s){var a,c;if(r!=s)c=r>s?1:-1;else for(a=c=0;a<r;a++)if(n[a]!=o[a]){c=n[a]>o[a]?1:-1;break}return c}function t(n,o,r,s){for(var a=0;r--;)n[r]-=a,a=n[r]<o[r]?1:0,n[r]=a*s+n[r]-o[r];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,r,s,a,c){var u,l,m,d,p,f,y,b,g,P,h,I,T,k,S,x,K,B,C,L,N=n.constructor,O=n.s==o.s?1:-1,R=n.d,v=o.d;if(!R||!R[0]||!v||!v[0])return new N(!n.s||!o.s||(R?v&&R[0]==v[0]:!v)?NaN:R&&R[0]==0||!v?O*0:O/0);for(c?(p=1,l=n.e-o.e):(c=fn,p=pe,l=Bt(n.e/p)-Bt(o.e/p)),C=v.length,K=R.length,g=new N(O),P=g.d=[],m=0;v[m]==(R[m]||0);m++);if(v[m]>(R[m]||0)&&l--,r==null?(k=r=N.precision,s=N.rounding):a?k=r+(n.e-o.e)+1:k=r,k<0)P.push(1),f=!0;else{if(k=k/p+2|0,m=0,C==1){for(d=0,v=v[0],k++;(m<K||d)&&k--;m++)S=d*c+(R[m]||0),P[m]=S/v|0,d=S%v|0;f=d||m<K}else{for(d=c/(v[0]+1)|0,d>1&&(v=i(v,d,c),R=i(R,d,c),C=v.length,K=R.length),x=C,h=R.slice(0,C),I=h.length;I<C;)h[I++]=0;L=v.slice(),L.unshift(0),B=v[0],v[1]>=c/2&&++B;do d=0,u=e(v,h,C,I),u<0?(T=h[0],C!=I&&(T=T*c+(h[1]||0)),d=T/B|0,d>1?(d>=c&&(d=c-1),y=i(v,d,c),b=y.length,I=h.length,u=e(y,h,b,I),u==1&&(d--,t(y,C<b?L:v,b,c))):(d==0&&(u=d=1),y=v.slice()),b=y.length,b<I&&y.unshift(0),t(h,y,I,c),u==-1&&(I=h.length,u=e(v,h,C,I),u<1&&(d++,t(h,C<I?L:v,I,c))),I=h.length):u===0&&(d++,h=[0]),P[m++]=d,u&&h[0]?h[I++]=R[x]||0:(h=[R[x]],I=1);while((x++<K||h[0]!==void 0)&&k--);f=h[0]!==void 0}P[0]||P.shift()}if(p==1)g.e=l,Ac=f;else{for(m=1,d=P[0];d>=10;d/=10)m++;g.e=m+l*p-1,se(g,a?r+g.e+1:r,s,f)}return g}}();function se(i,e,t,n){var o,r,s,a,c,u,l,m,d,p=i.constructor;e:if(e!=null){if(m=i.d,!m)return i;for(o=1,a=m[0];a>=10;a/=10)o++;if(r=e-o,r<0)r+=pe,s=e,l=m[d=0],c=l/lt(10,o-s-1)%10|0;else if(d=Math.ceil((r+1)/pe),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,r%=pe,s=r-pe+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;r%=pe,s=r-pe+o,c=s<0?0:l/lt(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%lt(10,o-s-1)),u=t<4?(c||n)&&(t==0||t==(i.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(r>0?s>0?l/lt(10,o-s):0:m[d-1])%10&1||t==(i.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=i.e+1,m[0]=lt(10,(pe-e%pe)%pe),i.e=-e||0):m[0]=i.e=0,i;if(r==0?(m.length=d,a=1,d--):(m.length=d+1,a=lt(10,pe-r),m[d]=s>0?(l/lt(10,o-s)%lt(10,s)|0)*a:0),u)for(;;)if(d==0){for(r=1,s=m[0];s>=10;s/=10)r++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;r!=a&&(i.e++,m[0]==fn&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=fn)break;m[d--]=0,a=1}for(r=m.length;m[--r]===0;)m.pop()}return ge&&(i.e>p.maxE?(i.d=null,i.e=NaN):i.e<p.minE&&(i.e=0,i.d=[0])),i}function hn(i,e,t){if(!i.isFinite())return Sc(i);var n,o=i.e,r=wt(i.d),s=r.length;return e?(t&&(n=t-s)>0?r=r.charAt(0)+"."+r.slice(1)+Hn(n):s>1&&(r=r.charAt(0)+"."+r.slice(1)),r=r+(i.e<0?"e":"e+")+i.e):o<0?(r="0."+Hn(-o-1)+r,t&&(n=t-s)>0&&(r+=Hn(n))):o>=s?(r+=Hn(o+1-s),t&&(n=t-o-1)>0&&(r=r+"."+Hn(n))):((n=o+1)<s&&(r=r.slice(0,n)+"."+r.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(r+="."),r+=Hn(n))),r}function Sr(i,e){var t=i[0];for(e*=pe;t>=10;t/=10)e++;return e}function Br(i,e,t){if(e>Pd)throw ge=!0,t&&(i.precision=t),Error(wc);return se(new i(Tr),e,1,!0)}function pn(i,e,t){if(e>Gs)throw Error(wc);return se(new i(Ir),e,t,!0)}function Ic(i){var e=i.length-1,t=e*pe+1;if(e=i[e],e){for(;e%10==0;e/=10)t--;for(e=i[0];e>=10;e/=10)t++}return t}function Hn(i){for(var e="";i--;)e+="0";return e}function Bc(i,e,t,n){var o,r=new i(1),s=Math.ceil(n/pe+4);for(ge=!1;;){if(t%2&&(r=r.times(e),gc(r.d,s)&&(o=!0)),t=Bt(t/2),t===0){t=r.d.length-1,o&&r.d[t]===0&&++r.d[t];break}e=e.times(e),gc(e.d,s)}return ge=!0,r}function bc(i){return i.d[i.d.length-1]&1}function xc(i,e,t){for(var n,o=new i(e[0]),r=0;++r<e.length;)if(n=new i(e[r]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function Xs(i,e){var t,n,o,r,s,a,c,u=0,l=0,m=0,d=i.constructor,p=d.rounding,f=d.precision;if(!i.d||!i.d[0]||i.e>17)return new d(i.d?i.d[0]?i.s<0?0:1/0:1:i.s?i.s<0?0:i:0/0);for(e==null?(ge=!1,c=f):c=e,a=new d(.03125);i.e>-2;)i=i.times(a),m+=5;for(n=Math.log(lt(2,m))/Math.LN10*2+5|0,c+=n,t=r=s=new d(1),d.precision=c;;){if(r=se(r.times(i),c,1),t=t.times(++l),a=s.plus(qe(r,t,c,1)),wt(a.d).slice(0,c)===wt(s.d).slice(0,c)){for(o=m;o--;)s=se(s.times(s),c,1);if(e==null)if(u<3&&mi(s.d,c-n,p,u))d.precision=c+=10,t=r=a=new d(1),l=0,u++;else return se(s,d.precision=f,p,ge=!0);else return d.precision=f,s}s=a}}function Qn(i,e){var t,n,o,r,s,a,c,u,l,m,d,p=1,f=10,y=i,b=y.d,g=y.constructor,P=g.rounding,h=g.precision;if(y.s<0||!b||!b[0]||!y.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:y.s!=1?NaN:b?0:y);if(e==null?(ge=!1,l=h):l=e,g.precision=l+=f,t=wt(b),n=t.charAt(0),Math.abs(r=y.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)y=y.times(i),t=wt(y.d),n=t.charAt(0),p++;r=y.e,n>1?(y=new g("0."+t),r++):y=new g(n+"."+t.slice(1))}else return u=Br(g,l+2,h).times(r+""),y=Qn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=h,e==null?se(y,h,P,ge=!0):y;for(m=y,c=s=y=qe(y.minus(1),y.plus(1),l,1),d=se(y.times(y),l,1),o=3;;){if(s=se(s.times(d),l,1),u=c.plus(qe(s,new g(o),l,1)),wt(u.d).slice(0,l)===wt(c.d).slice(0,l))if(c=c.times(2),r!==0&&(c=c.plus(Br(g,l+2,h).times(r+""))),c=qe(c,new g(p),l,1),e==null)if(mi(c.d,l-f,P,a))g.precision=l+=f,u=s=y=qe(m.minus(1),m.plus(1),l,1),d=se(y.times(y),l,1),o=a=1;else return se(c,g.precision=h,P,ge=!0);else return g.precision=h,c;c=u,o+=2}}function Sc(i){return String(i.s*i.s/0)}function zs(i,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,i.e=t=t-n-1,i.d=[],n=(t+1)%pe,t<0&&(n+=pe),n<o){for(n&&i.d.push(+e.slice(0,n)),o-=pe;n<o;)i.d.push(+e.slice(n,n+=pe));e=e.slice(n),n=pe-e.length}else n-=o;for(;n--;)e+="0";i.d.push(+e),ge&&(i.e>i.constructor.maxE?(i.d=null,i.e=NaN):i.e<i.constructor.minE&&(i.e=0,i.d=[0]))}else i.e=0,i.d=[0];return i}function wd(i,e){var t,n,o,r,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Tc.test(e))return zs(i,e)}else if(e==="Infinity"||e==="NaN")return+e||(i.s=NaN),i.e=NaN,i.d=null,i;if(yd.test(e))t=16,e=e.toLowerCase();else if(fd.test(e))t=2;else if(bd.test(e))t=8;else throw Error(jn+e);for(r=e.search(/p/i),r>0?(c=+e.slice(r+1),e=e.substring(2,r)):e=e.slice(2),r=e.indexOf("."),s=r>=0,n=i.constructor,s&&(e=e.replace(".",""),a=e.length,r=a-r,o=Bc(n,new n(t),r,r*2)),u=hr(e,t,fn),l=u.length-1,r=l;u[r]===0;--r)u.pop();return r<0?new n(i.s*0):(i.e=Sr(u,l),i.d=u,ge=!1,s&&(i=qe(i,o,a*4)),c&&(i=i.times(Math.abs(c)<54?lt(2,c):di.pow(2,c))),ge=!0,i)}function kd(i,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Vo(i,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Kr(5,t)),e=Vo(i,2,e,e);for(var o,r=new i(5),s=new i(16),a=new i(20);t--;)o=e.times(e),e=e.times(r.plus(o.times(s.times(o).minus(a))));return e}function Vo(i,e,t,n,o){var r,s,a,c,u=1,l=i.precision,m=Math.ceil(l/pe);for(ge=!1,c=t.times(t),a=new i(n);;){if(s=qe(a.times(c),new i(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=qe(s.times(c),new i(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(r=m;s.d[r]===a.d[r]&&r--;);if(r==-1)break}r=a,a=n,n=s,s=r,u++}return ge=!0,s.d.length=m+1,s}function Kr(i,e){for(var t=i;--e;)t*=i;return t}function Kc(i,e){var t,n=e.s<0,o=pn(i,i.precision,1),r=o.times(.5);if(e=e.abs(),e.lte(r))return Cn=n?4:1,e;if(t=e.divToInt(o),t.isZero())Cn=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(r))return Cn=bc(t)?n?2:3:n?4:1,e;Cn=bc(t)?n?1:4:n?3:2}return e.minus(o).abs()}function Ys(i,e,t,n){var o,r,s,a,c,u,l,m,d,p=i.constructor,f=t!==void 0;if(f?(Ut(t,1,Zn),n===void 0?n=p.rounding:Ut(n,0,8)):(t=p.precision,n=p.rounding),!i.isFinite())l=Sc(i);else{for(l=hn(i),s=l.indexOf("."),f?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=hr(hn(d),10,o),d.e=d.d.length),m=hr(l,10,o),r=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=f?"0p+0":"0";else{if(s<0?r--:(i=new p(i),i.d=m,i.e=r,i=qe(i,d,t,n,0,o),m=i.d,r=i.e,u=Ac),s=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(i.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(i.s<0?8:7)),m.length=t,u)for(;++m[--t]>o-1;)m[t]=0,t||(++r,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=qs.charAt(m[s]);if(f){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=hr(l,o,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=qs.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(r<0?"p":"p+")+r}else if(r<0){for(;++r;)l="0"+l;l="0."+l}else if(++r>c)for(r-=c;r--;)l+="0";else r<c&&(l=l.slice(0,r)+"."+l.slice(r))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return i.s<0?"-"+l:l}function gc(i,e){if(i.length>e)return i.length=e,!0}function hd(i){return new this(i).abs()}function Td(i){return new this(i).acos()}function Id(i){return new this(i).acosh()}function Bd(i,e){return new this(i).plus(e)}function xd(i){return new this(i).asin()}function Sd(i){return new this(i).asinh()}function Kd(i){return new this(i).atan()}function Cd(i){return new this(i).atanh()}function Rd(i,e){i=new this(i),e=new this(e);var t,n=this.precision,o=this.rounding,r=n+4;return!i.s||!e.s?t=new this(NaN):!i.d&&!e.d?(t=pn(this,r,1).times(e.s>0?.25:.75),t.s=i.s):!e.d||i.isZero()?(t=e.s<0?pn(this,n,o):new this(0),t.s=i.s):!i.d||e.isZero()?(t=pn(this,r,1).times(.5),t.s=i.s):e.s<0?(this.precision=r,this.rounding=1,t=this.atan(qe(i,e,r,1)),e=pn(this,r,1),this.precision=n,this.rounding=o,t=i.s<0?t.minus(e):t.plus(e)):t=this.atan(qe(i,e,r,1)),t}function Ld(i){return new this(i).cbrt()}function Nd(i){return se(i=new this(i),i.e+1,2)}function Od(i,e,t){return new this(i).clamp(e,t)}function Md(i){if(!i||typeof i!="object")throw Error(xr+"Object expected");var e,t,n,o=i.defaults===!0,r=["precision",1,Zn,"rounding",0,8,"toExpNeg",-Eo,0,"toExpPos",0,Eo,"maxE",0,Eo,"minE",-Eo,0,"modulo",0,9];for(e=0;e<r.length;e+=3)if(t=r[e],o&&(this[t]=Us[t]),(n=i[t])!==void 0)if(Bt(n)===n&&n>=r[e+1]&&n<=r[e+2])this[t]=n;else throw Error(jn+t+": "+n);if(t="crypto",o&&(this[t]=Us[t]),(n=i[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(kc);else this[t]=!1;else throw Error(jn+t+": "+n);return this}function vd(i){return new this(i).cos()}function Fd(i){return new this(i).cosh()}function Cc(i){var e,t,n;function o(r){var s,a,c,u=this;if(!(u instanceof o))return new o(r);if(u.constructor=o,Pc(r)){u.s=r.s,ge?!r.d||r.e>o.maxE?(u.e=NaN,u.d=null):r.e<o.minE?(u.e=0,u.d=[0]):(u.e=r.e,u.d=r.d.slice()):(u.e=r.e,u.d=r.d?r.d.slice():r.d);return}if(c=typeof r,c==="number"){if(r===0){u.s=1/r<0?-1:1,u.e=0,u.d=[0];return}if(r<0?(r=-r,u.s=-1):u.s=1,r===~~r&&r<1e7){for(s=0,a=r;a>=10;a/=10)s++;ge?s>o.maxE?(u.e=NaN,u.d=null):s<o.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[r]):(u.e=s,u.d=[r]);return}else if(r*0!==0){r||(u.s=NaN),u.e=NaN,u.d=null;return}return zs(u,r.toString())}else if(c!=="string")throw Error(jn+r);return(a=r.charCodeAt(0))===45?(r=r.slice(1),u.s=-1):(a===43&&(r=r.slice(1)),u.s=1),Tc.test(r)?zs(u,r):wd(u,r)}if(o.prototype=X,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=Md,o.clone=Cc,o.isDecimal=Pc,o.abs=hd,o.acos=Td,o.acosh=Id,o.add=Bd,o.asin=xd,o.asinh=Sd,o.atan=Kd,o.atanh=Cd,o.atan2=Rd,o.cbrt=Ld,o.ceil=Nd,o.clamp=Od,o.cos=vd,o.cosh=Fd,o.div=_d,o.exp=Ed,o.floor=Vd,o.hypot=Dd,o.ln=Wd,o.log=qd,o.log10=Gd,o.log2=Ud,o.max=Xd,o.min=zd,o.mod=Yd,o.mul=Hd,o.pow=Qd,o.random=jd,o.round=Zd,o.sign=$d,o.sin=Jd,o.sinh=ep,o.sqrt=tp,o.sub=np,o.sum=op,o.tan=ip,o.tanh=rp,o.trunc=sp,i===void 0&&(i={}),i&&i.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)i.hasOwnProperty(t=n[e++])||(i[t]=this[t]);return o.config(i),o}function _d(i,e){return new this(i).div(e)}function Ed(i){return new this(i).exp()}function Vd(i){return se(i=new this(i),i.e+1,3)}function Dd(){var i,e,t=new this(0);for(ge=!1,i=0;i<arguments.length;)if(e=new this(arguments[i++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return ge=!0,new this(1/0);t=e}return ge=!0,t.sqrt()}function Pc(i){return i instanceof di||i&&i.toStringTag===hc||!1}function Wd(i){return new this(i).ln()}function qd(i,e){return new this(i).log(e)}function Ud(i){return new this(i).log(2)}function Gd(i){return new this(i).log(10)}function Xd(){return xc(this,arguments,"lt")}function zd(){return xc(this,arguments,"gt")}function Yd(i,e){return new this(i).mod(e)}function Hd(i,e){return new this(i).mul(e)}function Qd(i,e){return new this(i).pow(e)}function jd(i){var e,t,n,o,r=0,s=new this(1),a=[];if(i===void 0?i=this.precision:Ut(i,1,Zn),n=Math.ceil(i/pe),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));r<n;)o=e[r],o>=429e7?e[r]=crypto.getRandomValues(new Uint32Array(1))[0]:a[r++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);r<n;)o=e[r]+(e[r+1]<<8)+(e[r+2]<<16)+((e[r+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,r):(a.push(o%1e7),r+=4);r=n/4}else throw Error(kc);else for(;r<n;)a[r++]=Math.random()*1e7|0;for(n=a[--r],i%=pe,n&&i&&(o=lt(10,pe-i),a[r]=(n/o|0)*o);a[r]===0;r--)a.pop();if(r<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=pe)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<pe&&(t-=pe-n)}return s.e=t,s.d=a,s}function Zd(i){return se(i=new this(i),i.e+1,this.rounding)}function $d(i){return i=new this(i),i.d?i.d[0]?i.s:0*i.s:i.s||NaN}function Jd(i){return new this(i).sin()}function ep(i){return new this(i).sinh()}function tp(i){return new this(i).sqrt()}function np(i,e){return new this(i).sub(e)}function op(){var i=0,e=arguments,t=new this(e[i]);for(ge=!1;t.s&&++i<e.length;)t=t.plus(e[i]);return ge=!0,se(t,this.precision,this.rounding)}function ip(i){return new this(i).tan()}function rp(i){return new this(i).tanh()}function sp(i){return se(i=new this(i),i.e+1,1)}X[Symbol.for("nodejs.util.inspect.custom")]=X.toString;X[Symbol.toStringTag]="Decimal";var di=X.constructor=Cc(Us);Tr=new di(Tr);Ir=new di(Ir);var M=di;import pp from"big.js";import $n from"bn.js";import ap from"toformat";var up=ap,pi=up;import Rr from"big.js";import cp from"bn.js";import lp from"decimal.js-light";import fi from"bn.js";var Hs=(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))(Hs||{}),Rc=9007199254740991;function te(i){let e=ke("Raydium_parseBigNumberish");if(i instanceof fi)return i;if(typeof i=="string"){if(i.match(/^-?[0-9]+$/))return new fi(i);e.logWithError(`invalid BigNumberish string: ${i}`)}return typeof i=="number"?(i%1&&e.logWithError(`BigNumberish number underflow: ${i}`),(i>=Rc||i<=-Rc)&&e.logWithError(`BigNumberish number overflow: ${i}`),new fi(String(i))):typeof i=="bigint"?new fi(i.toString()):(e.error(`invalid BigNumberish value: ${i}`),new fi(0))}var Cr=ke("module/fraction"),Qs=pi(Rr),yi=pi(lp),mp={[0]:yi.ROUND_DOWN,[1]:yi.ROUND_HALF_UP,[2]:yi.ROUND_UP},dp={[0]:Rr.roundDown,[1]:Rr.roundHalfUp,[2]:Rr.roundUp},Pe=class{constructor(e,t=new cp(1)){this.numerator=te(e),this.denominator=te(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Pe(this.denominator,this.numerator)}add(e){let t=e instanceof Pe?e:new Pe(te(e));return this.denominator.eq(t.denominator)?new Pe(this.numerator.add(t.numerator),this.denominator):new Pe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Pe?e:new Pe(te(e));return this.denominator.eq(t.denominator)?new Pe(this.numerator.sub(t.numerator),this.denominator):new Pe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Pe?e:new Pe(te(e));return new Pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Pe?e:new Pe(te(e));return new Pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Cr.logWithError(`${e} is not an integer.`),e<=0&&Cr.logWithError(`${e} is not positive.`),yi.set({precision:e+1,rounding:mp[n]});let o=new yi(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Cr.logWithError(`${e} is not an integer.`),e<0&&Cr.logWithError(`${e} is negative.`),Qs.DP=e,Qs.RM=dp[n]||1,new Qs(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var fp=ke("Raydium_amount"),Lr=pi(pp);function Lc(i,e){let t="0",n="0";if(i.includes(".")){let o=i.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):fp.logWithError(`invalid number string, num: ${i}`)}else t=i;return[t,n.slice(0,e)||n]}var Ce=class extends Pe{constructor(t,n,o=!0,r){let s=new $n(0),a=Po.pow(new $n(t.decimals));if(o)s=te(n);else{let c=new $n(0),u=new $n(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Lc(n.toString(),t.decimals);c=te(l),u=te(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ke(r||"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 Ce(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Ce(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Lr.DP=this.token.decimals,new Lr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},go=class extends Pe{constructor(t,n,o=!0,r){let s=new $n(0),a=Po.pow(new $n(t.decimals));if(o)s=te(n);else{let c=new $n(0),u=new $n(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Lc(n.toString(),t.decimals);c=te(l),u=te(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ke(r||"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 go(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new go(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.currency.decimals,n,o=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Lr.DP=this.currency.decimals,new Lr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as yp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Nc}from"@solana/spl-token";var Tn={chainId:101,address:yp.default.toBase58(),programId:Nc.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},yt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Nc.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as ea}from"@solana/web3.js";import{PublicKey as je,SystemProgram as Oc,SYSVAR_RENT_PUBKEY as bp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as gp}from"@solana/spl-token";function w({pubkey:i,isSigner:e=!1,isWritable:t=!0}){return{pubkey:i,isWritable:t,isSigner:e}}var js=[w({pubkey:gp,isWritable:!1}),w({pubkey:Oc.programId,isWritable:!1}),w({pubkey:bp,isWritable:!1})];function Zs({publicKey:i,transformSol:e}){let t=$s(i.toString());if(t instanceof je)return e&&t.equals(bt)?$:t;if(e&&t.toString()===bt.toBase58())return $;if(typeof t=="string"){if(t===je.default.toBase58())return je.default;try{return new je(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function $s(i){try{return new je(i)}catch{return i}}var Nr=new je("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),In=new je("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),rt=new je("SysvarRent111111111111111111111111111111111"),Js=new je("SysvarC1ock11111111111111111111111111111111"),an=new je("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Or=new je("Sysvar1nstructions1111111111111111111111111"),Mr=Oc.programId,$g=new je("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Jg=new je("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),eP=new je("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),tP=new je("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),nP=new je("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),oP=new je("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),iP=new je("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),rP=new je("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),sP=new je("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),aP=new je("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),uP=new je("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),$=new je("So11111111111111111111111111111111111111112"),bt=je.default;function It(i){return Zs({publicKey:i,transformSol:!0})}var ta=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:r=!1,isToken2022:s=!1}){if(e===bt.toBase58()||e instanceof ea&&bt.equals(e)){this.decimals=yt.decimals,this.symbol=yt.symbol,this.name=yt.name,this.mint=new ea(yt.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=r?ea.default:Zs({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Oe=ta;Oe.WSOL=new ta(U(_({},yt),{mint:yt.address}));var na=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},bi=na;bi.SOL=new na(Tn);function gP(i,e){return i instanceof Oe&&e instanceof Oe?i.equals(e):i instanceof Oe||e instanceof Oe?!1:i===e}import Pp from"bn.js";var Mc=new Pe(new Pp(100)),et=class extends Pe{toSignificant(e=5,t,n){return this.mul(Mc).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Mc).toFixed(e,t,n)}};var Ap=ke("Raydium_price"),gt=class extends Pe{constructor(t){let{baseToken:n,quoteToken:o,numerator:r,denominator:s}=t;super(r,s);this.baseToken=n,this.quoteToken=o,this.scalar=new Pe(oa(n.decimals),oa(o.decimals))}get raw(){return new Pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new gt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Ap.logWithError("mul token not equals");let n=super.mul(t);return new gt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};function st(i){if(i instanceof et)return new Pe(i.numerator,i.denominator);if(i instanceof gt)return i.adjusted;if(i instanceof Ce)try{return st(i.toExact())}catch{return new Pe(at)}if(i instanceof Pe)return i;let e=String(i),t=Ao(e);return new Pe(t.numerator,t.denominator)}function EP(i){var n;if(i instanceof et)return{fr:new Pe(i.numerator,i.denominator)};if(i instanceof gt)return{fr:i.adjusted};if(i instanceof Ce)return{fr:st(i.toExact()),decimals:i.token.decimals};if(i instanceof Pe)return{fr:i};let e=String(i),t=Ao(e);return{fr:new Pe(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function VP(i,e){if(i==null||e==null)return!1;let t=st(i),n=st(e);return t.sub(n).numerator,t.sub(n).numerator.lt(at)}function wp(i,e){if(i==null||e==null)return!1;let t=st(i),n=st(e);return t.sub(n).numerator.gt(at)}function DP(i,e){if(i==null||e==null)return!1;let t=st(i),n=st(e);return t.sub(n).numerator.lte(at)}function WP(i,e){if(i==null||e==null)return!1;let t=st(i),n=st(e);return t.sub(n).numerator.gte(at)}function kp(i,e){if(i==null||e==null)return!1;let t=st(i),n=st(e);return t.sub(n).numerator.eq(at)}function qP(i,e){if(i==null||e==null)return;let t=st(i),n=st(e);try{return t.div(n)}catch{return t}}function UP(i,e){if(i==null||e==null)return;let t=st(i),n=st(e);return t.sub(n)}function GP(i){return i==null?!1:!kp(i,0)}function XP(i,e){return wp(e,i)?e:i}function ia(i,e){if(i==null||e==null)return;let t=st(i),n=st(e);return t.mul(n)}function zP(i,e){if(i==null||e==null)return;let t=st(i),n=st(e);return t.add(n)}var at=new tt(0),Fc=new tt(1),iA=new tt(2),rA=new tt(3),sA=new tt(5),Po=new tt(10),aA=new tt(100),uA=new tt(1e3),cA=new tt(1e4);function oa(i){return Po.pow(te(i))}function Ao(i){var a;if(i===void 0)return{denominator:"1",numerator:"0"};if(i instanceof tt)return{numerator:i.toString(),denominator:"1"};if(i instanceof Pe)return{denominator:i.denominator.toString(),numerator:i.numerator.toString()};let e=String(i),[,t="",n="",o=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],r="1"+"0".repeat(o.length),s=t+(n==="0"?"":n)+o||"0";return{denominator:r,numerator:s,sign:t,int:n,dec:o}}function vr(i,e){let t=i.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function hp(i){var n;let[,e="",t=""]=(n=i.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function Tp(i,e=0){return i instanceof tt?i:new tt(hp(_c(i).mul(Po.pow(new tt(String(e))))))}function _c(i){if(i instanceof et)return new Pe(i.numerator,i.denominator);if(i instanceof gt)return i.adjusted;if(i instanceof Ce)try{return _c(i.toExact())}catch{return new Pe(at)}if(i instanceof Pe)return i;let e=String(i),t=Ao(e);return new Pe(t.numerator,t.denominator)}function gi(i,e,t){return i.mul(e).add(t).sub(new tt(1)).div(t)}function Fr(i,e,t){return i.mul(e).div(t)}function lA(i,e){let{numerator:t,denominator:n}=Ao(i);return new et(new tt(t),new tt(n).mul(e!=null&&e.alreadyDecimaled?new tt(100):new tt(1)))}function mA(i){let{token:e,numberPrice:t,decimalDone:n}=i,o=new Oe({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:r,denominator:s}=Ao(t),a=n?new tt(r).mul(Po.pow(new tt(e.decimals))):r,c=new tt(s).mul(Po.pow(new tt(o.decimals)));return new gt({baseToken:o,denominator:c.toString(),quoteToken:new Oe(U(_({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function vc(i){let e=new bi({decimals:6,symbol:"usd",name:"usd"}),t=Tp(ia(i,10**e.decimals));return new go(e,t)}function dA(i,e){return vc(!e||!i?0:ia(i,e))}function pA(i){if(i==null)return;let{numerator:e,denominator:t}=Ao(i.toString());return new Pe(e,t)}function fA(i){return i instanceof M}var Ec=i=>typeof i=="number",Vc=i=>i?new Date(i):new Date,Ip=i=>Vc(i).getTime();function Dc(i,e,t){let n=Ec(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(i).getTime()<=n}function Wc(i,e,t){let n=Ec(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(i).getTime()>n}function bA(i,e){let n=Ip(i)+(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 Vc(n)}function Ws(i,e=1,t=[]){let n=[...i];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function PA(i,...e){return i.filter(t=>e.every(n=>n.includes(t)))}function AA(i,...e){return i.filter(t=>e.every(n=>!n.includes(t)))}function wA(i){return[...new Set(i)]}var yn=class{constructor(e){this._owner=e}get publicKey(){return yn.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return yn.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return yn.isKeyPair(this._owner)}get isPublicKey(){return yn.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!yn.isKeyPair(e)}};import{PublicKey as Cp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Rp}from"@solana/spl-token";import{ComputeBudgetProgram as qc,Keypair as Uc,PublicKey as Gc,Transaction as Er,TransactionMessage as Bp,VersionedTransaction as ra}from"@solana/web3.js";var Rn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(Rn||{}),z={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",ClmmLockPosition:"ClmmLockPosition",ClmmHarvestLockPosition:"ClmmHarvestLockPosition",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV4Withdraw:"FarmV4Withdraw",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut",CpmmLockLp:"CpmmLockLp",CpmmCollectLockFee:"CpmmCollectLockFee",TransferTip:"TransferTip"};import{TOKEN_PROGRAM_ID as xp}from"@solana/spl-token";var Ln=ke("Raydium_txUtil"),Xc=1644;function Vr(i){let e=[],t=[];return i.microLamports&&(e.push(qc.setComputeUnitPrice({microLamports:i.microLamports})),t.push(z.SetComputeUnitPrice)),i.units&&(e.push(qc.setComputeUnitLimit({units:i.units})),t.push(z.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Do(i,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=i.getLatestBlockhash)==null?void 0:n.call(i,{commitment:t})))==null?void 0:o.blockhash}async function Dr(i,e){return i.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);i.onSignature(e,r=>{if(clearTimeout(o),!r.err){t("");return}n(Object.assign(r.err,{txId:e}))},"confirmed")})}function Wr(i,e){i.length<1&&Ln.logWithError(`no instructions provided: ${i.toString()}`),e.length<1&&Ln.logWithError(`no signers provided:, ${e.toString()}`);let t=new Er;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...i);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Xc}catch{return!1}}async function zc(i,e,t,n=!0){let o=new Gc("RaydiumSimuLateTransaction11111111111111111"),r=[],s=new Er;s.feePayer=o;for(let u of e)Wr([...s.instructions,u],[o])||(r.push(s),s=new Er,s.feePayer=o),s.add(u);s.instructions.length>0&&r.push(s);let a=[];try{if(a=await Sp(i,r,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Ln.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Ln.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Ln.debug("filteredLog:",c),l.length||Ln.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function Yc(i,e){let t=i.match(/{["\w:,]+}/g);return!t||t.length!==1?Ln.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Nn(i,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(i);return!n||n.length!==2?Ln.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ie(i,e){let[t,n]=Gc.findProgramAddressSync(i,e);return{publicKey:t,nonce:n}}async function Sp(i,e,t){let n=[];if(t){let o=await i.getLatestBlockhash(),r=[];for(let u of e){u.recentBlockhash=o.blockhash,u.lastValidBlockHeight=o.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");r.push(p)}let s=r.map(u=>{let l=i._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 i._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async o=>await(await i.simulateTransaction(o)).value))}catch(o){o instanceof Error&&Ln.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:o.message})}return n}function Pi({instructions:i,payer:e,signers:t}){return Wr(i,[e,...t])}function Ai({instructions:i,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Uc.generate().publicKey.toString()}){let r=new Bp({payerKey:e,recentBlockhash:n,instructions:i}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new ra(r).serialize()).toString("base64").length<Xc}catch{return!1}}var _r={time:0,data:void 0};async function OA(i){if(!_r.data||(Date.now()-_r.time)/1e3>30){let e=await i.getEpochInfo();return _r={time:Date.now(),data:e},e}else return _r.data}var Hc=i=>Buffer.isBuffer(i)?i:i instanceof Uint8Array?Buffer.from(i.buffer,i.byteOffset,i.byteLength):Buffer.from(i),Kp=i=>{let e=i.serialize({requireAllSignatures:!1,verifySignatures:!1});i instanceof ra&&(e=Hc(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function wo(i){let e=[];return i.forEach(t=>{t instanceof Er&&(t.recentBlockhash||(t.recentBlockhash=xp.toBase58()),t.feePayer||(t.feePayer=Uc.generate().publicKey)),e.push(Kp(t))}),console.log("simulate tx string:",e),e}function MA(i){let e=i.serialize({requireAllSignatures:!1,verifySignatures:!1});return i instanceof ra&&(e=Hc(e)),e.toString("base64")}function J(i,e,t){return ie([i.toBuffer(),(t!=null?t:Rp).toBuffer(),e.toBuffer()],new Cp("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ae}from"@solana/web3.js";var sa=new ae("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),aa=new ae("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),ua=new ae("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Wo=new ae("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Lp=new ae("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),ca=new ae("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),qr=new ae("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),wi=new ae("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Np=new ae("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Ur=new ae("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Jn=new ae("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),qo=new ae("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),ki=new ae("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),eo=new ae("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Op=new ae("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),la=new ae("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Mp=new ae("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),vp=new ae("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Fp=new ae("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),_p=new ae("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),to=new ae("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),ma=new ae("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Ep=new ae("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),hi=new ae("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Ti=new ae("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),mt=new ae("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),Vp=new ae("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),WA=new ae("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),qA=new ae("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Dp=new ae("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Wp=new ae("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),Ii={IDO_PROGRAM_ID_V1:Mp,IDO_PROGRAM_ID_V2:vp,IDO_PROGRAM_ID_V3:Fp,IDO_PROGRAM_ID_V4:_p},Nt={AMM_V4:wi,AMM_STABLE:Np,CLMM_PROGRAM_ID:Jn,CLMM_LOCK_PROGRAM_ID:qo,CLMM_LOCK_AUTH_ID:ki,FARM_PROGRAM_ID_V3:sa,FARM_PROGRAM_ID_V4:aa,FARM_PROGRAM_ID_V5:ua,FARM_PROGRAM_ID_V6:Wo,OPEN_BOOK_PROGRAM:ca,SERUM_PROGRAM_ID_V3:qr,UTIL1216:Lp,Router:Op,CREATE_CPMM_POOL_PROGRAM:to,CREATE_CPMM_POOL_AUTH:ma,CREATE_CPMM_POOL_FEE_ACC:Ep,LOCK_CPMM_PROGRAM:hi,LOCK_CPMM_AUTH:Ti,LAUNCHPAD_PROGRAM:mt,LAUNCHPAD_AUTH:Vp,LAUNCHPAD_PLATFORM:Dp,LAUNCHPAD_CONFIG:Wp,FEE_DESTINATION_ID:la,MODEL_DATA_PUBKEY:eo},On={OPEN_BOOK_PROGRAM:new ae("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new ae("Ray1111111111111111111111111111111111111111"),AMM_V4:new ae("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new ae("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new ae("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new ae("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new ae("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new ae("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new ae("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new ae("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new ae("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new ae("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:ae.default,Router:new ae("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new ae("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new ae("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new ae("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new ae("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new ae("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new ae("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new ae("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new ae("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new ae("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new ae("Ray1111111111111111111111111111111111111111")};import xe from"bn.js";var Ot=1e4;function XA(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let o=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new xe(o.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===Ot){let a=new xe(o.maximumFee.toString());return{amount:i.add(a),fee:a,expirationTime:s}}else{let a=bn(i.mul(new xe(Ot)),new xe(Ot-o.transferFeeBasisPoints)),c=new xe(o.maximumFee.toString()),u=a.sub(i).gt(c)?i.add(c):a,l=bn(u.mul(new xe(o.transferFeeBasisPoints)),new xe(Ot)),m=l.gt(r)?r:l;return{amount:u,fee:m,expirationTime:s}}else{let a=bn(i.mul(new xe(o.transferFeeBasisPoints)),new xe(Ot)),c=a.gt(r)?r:a;return{amount:i,fee:c,expirationTime:s}}}function Ne(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let o=U(_({},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}}),r=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,s=new xe(r.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===Ot){let c=new xe(r.maximumFee.toString());return{amount:i.add(c),fee:c,expirationTime:a}}else{let c=bn(i.mul(new xe(Ot)),new xe(Ot-r.transferFeeBasisPoints)),u=new xe(r.maximumFee.toString()),l=c.sub(i).gt(u)?i.add(u):c,m=bn(l.mul(new xe(r.transferFeeBasisPoints)),new xe(Ot)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=bn(i.mul(new xe(r.transferFeeBasisPoints)),new xe(Ot)),u=c.gt(s)?s:c;return{amount:i,fee:u,expirationTime:a}}}function gn(i,e){return i===void 0?e:e===void 0?i:Math.min(i,e)}function bn(i,e){let{div:t,mod:n}=i.divmod(e);return n.gt(new xe(0))?t.add(new xe(1)):t}function ko(i,e){if(i.isZero())return new xe(0);let t=i.div(e);return t.isZero()?new xe(1):i.mod(e).gt(new xe(0))?t.add(new xe(1)):t}function da(i,e,t){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new xe(o.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=bn(i.mul(new xe(o.transferFeeBasisPoints)),new xe(Ot)),c=a.gt(r)?r:a;return{amount:i,fee:c,expirationTime:s}}function pa(i,e,t){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new xe(o.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===Ot){let a=new xe(o.maximumFee.toString());return{amount:i.add(a),fee:a,expirationTime:s}}else{let a=bn(i.mul(new xe(Ot)),new xe(Ot-o.transferFeeBasisPoints)),c=new xe(o.maximumFee.toString()),u=a.sub(i).gt(c)?i.add(c):a,l=bn(u.mul(new xe(o.transferFeeBasisPoints)),new xe(Ot)),m=l.gt(r)?r:l;return{amount:u,fee:m,expirationTime:s}}}import{PublicKey as fa,AddressLookupTableAccount as Xo}from"@solana/web3.js";async function ya({connection:i,address:e,cluster:t="mainnet"}){let n=await dn(i,[...new Set(e.map(r=>r.toString()))].map(r=>new fa(r))),o={};for(let r=0;r<e.length;r++){let s=n[r],a=e[r];if(!s)continue;let c=new Xo({key:a,state:Xo.deserialize(s.data)});o[a.toString()]=c,t==="devnet"?Go[a.toString()]=c:Uo[a.toString()]=c}return o}var Uo={},ba=async i=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Uo[e])return Uo;let t=new fa(e),n=await i.getAccountInfo(t);return n&&(Uo[e]=new Xo({key:t,state:Xo.deserialize(n.data)})),Uo},Go={},ga=async i=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Go[e])return Go;let t=new fa(e),n=await i.getAccountInfo(t);return n&&(Go[e]=new Xo({key:t,state:Xo.deserialize(n.data)})),Go};import{PublicKey as zo,sendAndConfirmTransaction as Pa,SystemProgram as qp,Transaction as Bi,TransactionMessage as xi,VersionedTransaction as Si}from"@solana/web3.js";import Up from"axios";var Gr=2e3,Xr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.loopMultiTxStatus=!!e.loopMultiTxStatus}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Up.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}=Vr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(qp.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new zo(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(z.TransferTip),!0):!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:r=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...r),this.lookupTableAddress.push(...s.filter(a=>a!==zo.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(_({},t||{})):this.build(t)}build(e){var n;let t=new Bi;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var l;let{recentBlockHash:r,skipPreflight:s=!0,sendAndConfirm:a,notSendToRpc:c}=o||{},u=r!=null?r:await Do(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),wo([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await Pa(this.connection,t,this.signers.find(d=>d.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 m=await this.signAllTransactions([t]);if(this.signers.length)for(let d of m)try{d.sign(...this.signers)}catch{}return{txId:c?"":await this.connection.sendRawTransaction(m[0].serialize(),{skipPreflight:s}),signedTx:m[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),r=t.filter(l=>l.transaction.instructions.length>0),s=[o,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.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 g;let{sequentially:m,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:f,skipPreflight:y=!0}=l||{},b=f!=null?f:await Do(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let P=[],h=0;for(let I of s){if(++h,h<=p)continue;let T=await Pa(this.connection,I,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});P.push(T)}return{txIds:P,signedTxs:s}}return{txIds:await await Promise.all(s.map(async P=>(P.recentBlockhash=b,await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let P=s.map((I,T)=>(I.recentBlockhash=b,a[T].length&&I.sign(...a[T]),I));wo(P);let h=await this.signAllTransactions(P);if(m){let I=0,T=[],k=async()=>{if(!h[I])return;let S=await this.connection.sendRawTransaction(h[I].serialize(),{skipPreflight:y});T.push({txId:S,status:"sent",signedTx:h[I]}),d==null||d([...T]),I++;let x=!1,K=null,B=null,C=L=>{K!==null&&clearInterval(K),B!==null&&this.connection.removeSignatureListener(B);let N=T.findIndex(O=>O.txId===S);if(N>-1){if(T[N].status==="error"||T[N].status==="success")return;T[N].status=L.err?"error":"success"}d==null||d([...T]),L.err||k()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var L;if(x){clearInterval(K);return}try{let N=await this.connection.getTransaction(S,{commitment:"confirmed",maxSupportedTransactionVersion:0});N&&(x=!0,clearInterval(K),C({err:((L=N.meta)==null?void 0:L.err)||null}),console.log("tx status from getTransaction:",S))}catch(N){x=!0,clearInterval(K),console.error("getTransaction timeout:",N,S)}},Gr)),B=this.connection.onSignature(S,L=>{if(x){this.connection.removeSignatureListener(B);return}x=!0,C(L)},"confirmed"),this.connection.getSignatureStatus(S)};return await k(),{txIds:T.map(S=>S.txId),signedTxs:h}}else{let I=[];for(let T=0;T<h.length;T+=1){let k=await this.connection.sendRawTransaction(h[T].serialize(),{skipPreflight:y});I.push(k)}return{txIds:I,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var y;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:r}=f,s=Qe(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=_(_({},this.cluster==="devnet"?await ga(this.connection):await ba(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new zo(b));let l=await ya({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?zo.default.toBase58():r!=null?r:await Do(this.connection,this.blockhashCommitment),d=new xi({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((y=this.owner)==null?void 0:y.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new Si(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var I;let{skipPreflight:g=!0,sendAndConfirm:P,notSendToRpc:h}=b||{};if(wo([p]),(I=this.owner)!=null&&I.isKeyPair){let T=await this.connection.sendTransaction(p,{skipPreflight:g});return P&&await Dr(this.connection,T),{txId:T,signedTx:p}}if(this.signAllTransactions){let T=await this.signAllTransactions([p]);if(this.signers.length)for(let k of T)try{k.sign(this.signers)}catch{}return{txId:h?"":await this.connection.sendTransaction(T[0],{skipPreflight:g}),signedTx:T[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),r=t.filter(l=>l.builder.instructions.length>0),s=[o,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.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 y;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),wo(s),(y=this.owner)!=null&&y.isKeyPair){if(m){let b=[];for(let g of s){let P=await this.connection.sendTransaction(g,{skipPreflight:f});await Dr(this.connection,P),b.push(P)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,P=[],h=async()=>{if(!b[g])return;let I=await this.connection.sendTransaction(b[g],{skipPreflight:f});P.push({txId:I,status:"sent",signedTx:b[g]}),d==null||d([...P]),g++;let T=!1,k=null,S=null,x=K=>{k!==null&&clearInterval(k),S!==null&&this.connection.removeSignatureListener(S);let B=P.findIndex(C=>C.txId===I);if(B>-1){if(P[B].status==="error"||P[B].status==="success")return;P[B].status=K.err?"error":"success"}d==null||d([...P]),K.err||h()};this.loopMultiTxStatus&&(k=setInterval(async()=>{var K;if(T){clearInterval(k);return}try{let B=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});B&&(T=!0,clearInterval(k),x({err:((K=B.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",I))}catch(B){T=!0,clearInterval(k),console.error("getTransaction timeout:",B,I)}},Gr)),S=this.connection.onSignature(I,K=>{if(T){this.connection.removeSignatureListener(S);return}T=!0,x(K)},"confirmed"),this.connection.getSignatureStatus(I)};return h(),{txIds:[],signedTxs:b}}else{let g=[];for(let P=0;P<b.length;P+=1){let h=await this.connection.sendTransaction(b[P],{skipPreflight:f});g.push(h)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let m=e||{},{splitIns:t=[],computeBudgetConfig:n}=m,o=Qe(m,["splitIns","computeBudgetConfig"]),r=n?Vr(n):{instructions:[],instructionTypes:[]},s=this.signers.reduce((p,f)=>U(_({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let f=[...u,p],y=n?[...r.instructions,...f]:f,g=[...new Set(f.map(P=>P.keys.filter(h=>h.isSigner).map(h=>h.pubkey.toString())).flat()).values()].map(P=>new zo(P));if(p!==t[l]&&u.length<12&&(Pi({instructions:y,payer:this.feePayer,signers:g})||Pi({instructions:f,payer:this.feePayer,signers:g})))u.push(p);else{if(u.length===0)throw Error("item ins too big");l+=p===t[l]?1:0,Pi({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new Bi().add(...r.instructions,...u)):a.push(new Bi().add(...u)),c.push(Array.from(new Set(u.map(P=>P.keys.filter(h=>h.isSigner).map(h=>h.pubkey.toString())).flat())).map(P=>s[P]).filter(P=>P!==void 0)),u=[p]}}),u.length>0){let f=[...new Set(u.map(y=>y.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(y=>s[y]).filter(y=>y!==void 0);Pi({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new Bi().add(...r.instructions,...u)):a.push(new Bi().add(...u)),c.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(f=>f.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var I;let{sequentially:f,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:g,skipPreflight:P=!0}=p||{},h=g!=null?g:await Do(this.connection,this.blockhashCommitment);if(a.forEach(async(T,k)=>{T.recentBlockhash=h,c[k].length&&T.sign(...c[k])}),wo(a),(I=this.owner)!=null&&I.isKeyPair){if(f){let T=0,k=[];for(let S of a){if(++T,T<=b){k.push("tx skipped");continue}let x=await Pa(this.connection,S,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:P});k.push(x)}return{txIds:k,signedTxs:a}}return{txIds:await Promise.all(a.map(async T=>await this.connection.sendRawTransaction(T.serialize(),{skipPreflight:P}))),signedTxs:a}}if(this.signAllTransactions){let T=await this.signAllTransactions(a.slice(b,a.length)),k=[...a.slice(0,b),...T];if(f){let S=0,x=[],K=async()=>{if(!k[S])return;S<b&&(x.push({txId:"",status:"success",signedTx:k[S]}),y==null||y([...x]),S++,K());let B=await this.connection.sendRawTransaction(k[S].serialize(),{skipPreflight:P});x.push({txId:B,status:"sent",signedTx:k[S]}),y==null||y([...x]),S++;let C=!1,L=null,N=null,O=R=>{L!==null&&clearInterval(L),N!==null&&this.connection.removeSignatureListener(N);let v=x.findIndex(Y=>Y.txId===B);if(v>-1){if(x[v].status==="error"||x[v].status==="success")return;x[v].status=R.err?"error":"success"}y==null||y([...x]),R.err||K()};this.loopMultiTxStatus&&(L=setInterval(async()=>{var R;if(C){clearInterval(L);return}try{let v=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:0});v&&(C=!0,clearInterval(L),O({err:((R=v.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",B))}catch(v){C=!0,clearInterval(L),console.error("getTransaction timeout:",v,B)}},Gr)),N=this.connection.onSignature(B,R=>{if(C){this.connection.removeSignatureListener(N);return}C=!0,O(R)},"confirmed"),this.connection.getSignatureStatus(B)};return await K(),{txIds:x.map(B=>B.txId),signedTxs:k}}else{let S=[];for(let x=0;x<k.length;x+=1){let K=await this.connection.sendRawTransaction(k[x].serialize(),{skipPreflight:P});S.push(K)}return{txIds:S,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var h;let P=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:r=[]}=P,s=Qe(P,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=_(_({},this.cluster==="devnet"?await ga(this.connection):await ba(this.connection)),o),c=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let I of c)a[I]===void 0&&u.push(new zo(I));let l=await ya({connection:this.connection,address:u});for(let[I,T]of Object.entries(l))a[I]=T;let m=t?Vr(t):{instructions:[],instructionTypes:[]},d=await Do(this.connection,this.blockhashCommitment),p=this.signers.reduce((I,T)=>U(_({},I),{[T.publicKey.toBase58()]:T}),{}),f=[],y=[],b=[],g=0;if(this.allInstructions.forEach(I=>{let T=[...b,I],k=t?[...m.instructions,...T]:T;if(I!==n[g]&&b.length<12&&(Ai({instructions:k,payer:this.feePayer,lookupTableAddressAccount:a})||Ai({instructions:T,payer:this.feePayer,lookupTableAddressAccount:a})))b.push(I);else{if(b.length===0)throw Error("item ins too big");g+=I===n[g]?1:0;let S={};for(let x of[...new Set(c)])a[x]!==void 0&&(S[x]=a[x]);if(t&&Ai({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let x=new xi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new Si(x))}else{let x=new xi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new Si(x))}y.push(Array.from(new Set(b.map(x=>x.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat())).map(x=>p[x]).filter(x=>x!==void 0)),b=[I]}}),b.length>0){let T=[...new Set(b.map(k=>k.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat()).values()].map(k=>p[k]).filter(k=>k!==void 0);if(t&&Ai({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let k=new xi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new Si(k))}else{let k=new xi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new Si(k))}y.push(T)}return(h=this.owner)!=null&&h.signer&&y.forEach(I=>{I.some(T=>T.publicKey.equals(this.owner.publicKey))||I.push(this.owner.signer)}),f.forEach((I,T)=>{I.sign(y[T])}),{builder:this,transactions:f,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async I=>{var B;let{sequentially:T,onTxUpdate:k,skipTxCount:S=0,recentBlockHash:x,skipPreflight:K=!0}=I||{};if(f.map(async(C,L)=>{y[L].length&&C.sign(y[L]),x&&(C.message.recentBlockhash=x)}),wo(f),(B=this.owner)!=null&&B.isKeyPair){if(T){let C=0,L=[];for(let N of f){if(++C,C<=S){console.log("skip tx: ",C),L.push("tx skipped");continue}let O=await this.connection.sendTransaction(N,{skipPreflight:K});await Dr(this.connection,O),L.push(O)}return{txIds:L,signedTxs:f}}return{txIds:await Promise.all(f.map(async C=>await this.connection.sendTransaction(C,{skipPreflight:K}))),signedTxs:f}}if(this.signAllTransactions){let C=await this.signAllTransactions(f.slice(S,f.length)),L=[...f.slice(0,S),...C];if(T){let N=0,O=[],R=async()=>{if(!L[N])return;if(N<S){O.push({txId:"",status:"success",signedTx:L[N]}),k==null||k([...O]),N++,R();return}let v=await this.connection.sendTransaction(L[N],{skipPreflight:K});O.push({txId:v,status:"sent",signedTx:L[N]}),k==null||k([...O]),N++;let Y=!1,Q=null,de=null,ce=le=>{Q!==null&&clearInterval(Q),de!==null&&this.connection.removeSignatureListener(de);let Ae=O.findIndex(fe=>fe.txId===v);if(Ae>-1){if(O[Ae].status==="error"||O[Ae].status==="success")return;O[Ae].status=le.err?"error":"success"}k==null||k([...O]),le.err||R()};this.loopMultiTxStatus&&(Q=setInterval(async()=>{var le;if(Y){clearInterval(Q);return}try{let Ae=await this.connection.getTransaction(v,{commitment:"confirmed",maxSupportedTransactionVersion:0});Ae&&(Y=!0,clearInterval(Q),ce({err:((le=Ae.meta)==null?void 0:le.err)||null}),console.log("tx status from getTransaction:",v))}catch(Ae){Y=!0,clearInterval(Q),console.error("getTransaction timeout:",Ae,v)}},Gr)),de=this.connection.onSignature(v,le=>{if(Y){this.connection.removeSignatureListener(de);return}Y=!0,ce(le)},"confirmed"),this.connection.getSignatureStatus(v)};return R(),{txIds:[],signedTxs:L}}else{let N=[];for(let O=0;O<L.length;O+=1){let R=await this.connection.sendTransaction(L[O],{skipPreflight:K});N.push(R)}return{txIds:N,signedTxs:L}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};import{PublicKey as Gp}from"@solana/web3.js";import Xp from"bn.js";async function Qc(i){new Promise(e=>setTimeout(e,i))}function pw(){return new Date().getTime()}function zp(i){return typeof i=="object"&&i!==null&&![Oe,Ce,Gp,Pe,Xp,gt,et].some(e=>typeof e=="object"&&i instanceof e)}function Ge(i){return typeof i=="string"?$s(i):Array.isArray(i)?i.map(e=>Ge(e)):zp(i)?Object.fromEntries(Object.entries(i).map(([e,t])=>[e,Ge(t)])):i}import Yp from"bn.js";var Gt=new Yp(1e6);var jc=(t=>(t.ALL="all",t.Strict="strict",t))(jc||{}),Zc=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(Zc||{});var Pt={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://lite-api.jup.ag/tokens/v1/tagged/verified",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position",LAUNCH_AUTH_HOST:"https://launch-auth-v1.raydium.io",LAUNCH_COMMENT_HOST:"hhttps://launch-forum-v1.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1.raydium.io"},$c=U(_({},Pt),{BASE_HOST:"https://api-v3-devnet.raydium.io",OWNER_BASE_HOST:"https://owner-v1-devnet.raydium.io",SWAP_HOST:"https://transaction-v1-devnet.raydium.io",CPMM_LOCK:"https://dynamic-ipfs-devnet.raydium.io/lock/cpmm/position",LAUNCH_AUTH_HOST:"https://launch-auth-v1-devnet.raydium.io",LAUNCH_COMMENT_HOST:"https://launch-forum-v1-devnet.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1-devnet.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1-devnet.raydium.io"});var Jc="ray_tab_hash",Aa="ray_req_hash",Hp=()=>{if(typeof window===void 0)return"";let i=sessionStorage.getItem(Jc);return i||(i=`ray-${Date.now()}`,sessionStorage.setItem(Jc,i)),i},zr=async n=>{var o=n,{logCount:i=1e3,removeLastLog:e}=o,t=Qe(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let r=JSON.parse(localStorage.getItem(Aa)||"[]").slice(0,i-1);e&&r.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),r.unshift(U(_({},t),{time:Date.now(),session:Hp()}));try{localStorage.setItem(Aa,JSON.stringify(r))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(r[0].data=a+(a.length>100?"...":"");!s;){r.pop();let c=JSON.stringify(t.data).substring(0,100);r[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(Aa,JSON.stringify(r)),s=!0}catch{s=!1}}return new Promise(c=>c())}return zr(U(_({},t),{logCount:i,removeLastLog:!0}))}};import{TOKEN_2022_PROGRAM_ID as Qp,TOKEN_PROGRAM_ID as jp}from"@solana/spl-token";var Yo=ke("Raydium_Api"),wa=new Map,ka=new Map;async function sk(i,e,t=1e3){let n;for(;n==null;)try{Yo.debug(`Request ${i} through endlessRetry`),n=await e()}catch(o){Yo.error(`Request ${i} failed, retry after ${t} ms`,o),await Qc(t)}return n}var Yr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:r}){this.cluster=e,this.urlConfigs=r||{},this.logCount=o||1e3,this.api=el.create({baseURL:this.urlConfigs.BASE_HOST||this.cluster==="devnet"?$c.BASE_HOST:Pt.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return Yo.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(Yo.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&&zr({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),Yo.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&&zr({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Yo.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Pt.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Pt.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Pt.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await el.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,r)=>o+r,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Pt.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Pt.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Pt.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Pt.JUP_TOKEN_LIST})).map(t=>U(_({},t),{chainId:101,programId:t.tags.includes("token-2022")?Qp.toBase58():jp.toBase58()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Pt.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:r=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Pt.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${r}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Pt.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>wa.has(s)?(n.push(wa.get(s)),!1):!0),r=[];return o.length&&(r=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Pt.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),r.forEach(a=>{wa.set(a.id,a)})),n.concat(r)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:r="default",order:s="desc",page:a=1}=e,[c,u]=[t&&It(t).toBase58(),n&&n!=="undefined"?It(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Pt.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${r}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Pt.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Pt.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Pt.CHECK_AVAILABILITY)).data}async fetchLaunchConfigs(){var t;if((t=ka.get(this.cluster))!=null&&t.length)return ka.get(this.cluster);let e=await this.api.get(this.cluster==="devnet"?"https://launch-mint-v1-devnet.raydium.io/main/configs":"https://launch-mint-v1.raydium.io/main/configs");return ka.set(this.cluster,e.data.data),e.data.data}};import{merge as ag}from"lodash";var Hr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",tl="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as es,SystemProgram as ay}from"@solana/web3.js";import{AccountLayout as jo,createAssociatedTokenAccountIdempotentInstruction as va,TOKEN_PROGRAM_ID as ro,TOKEN_2022_PROGRAM_ID as uy}from"@solana/spl-token";var ha=(...i)=>i.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Xe=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ke(t)}createTxBuilder(e){return this.scope.checkOwner(),new Xr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,loopMultiTxStatus:this.scope.loopMultiTxStatus,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(ha(e))}logInfo(...e){this.logger.info(ha(e))}logAndCreateError(...e){let t=ha(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as ty,SystemProgram as ny}from"@solana/web3.js";import oy from"bn.js";import{createCloseAccountInstruction as iy,createInitializeAccountInstruction as ry,createTransferInstruction as sy,TOKEN_PROGRAM_ID as Qo}from"@solana/spl-token";import{Keypair as Zf,PublicKey as Pl}from"@solana/web3.js";import $f from"bn.js";import{TOKEN_PROGRAM_ID as Jf}from"@solana/spl-token";function Zp(i){return i instanceof Uint8Array||i!=null&&typeof i=="object"&&i.constructor.name==="Uint8Array"}function Ta(i,...e){if(!Zp(i))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(i.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${i.length}`)}function Ia(i,e=!0){if(i.destroyed)throw new Error("Hash instance has been destroyed");if(e&&i.finished)throw new Error("Hash#digest() has already been called")}function nl(i,e){Ta(i);let t=e.outputLen;if(i.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var jr=i=>new DataView(i.buffer,i.byteOffset,i.byteLength),Pn=(i,e)=>i<<32-e|i>>>e;var wk=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function $p(i){if(typeof i!="string")throw new Error(`utf8ToBytes expected string, got ${typeof i}`);return new Uint8Array(new TextEncoder().encode(i))}function Ba(i){return typeof i=="string"&&(i=$p(i)),Ta(i),i}var Qr=class{clone(){return this._cloneInto()}},kk={}.toString;function ol(i){let e=n=>i().update(Ba(n)).digest(),t=i();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>i(),e}function Jp(i,e,t,n){if(typeof i.setBigUint64=="function")return i.setBigUint64(e,t,n);let o=BigInt(32),r=BigInt(4294967295),s=Number(t>>o&r),a=Number(t&r),c=n?4:0,u=n?0:4;i.setUint32(e+c,s,n),i.setUint32(e+u,a,n)}var il=(i,e,t)=>i&e^~i&t,rl=(i,e,t)=>i&e^i&t^e&t,Zr=class extends Qr{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=jr(this.buffer)}update(e){Ia(this);let{view:t,buffer:n,blockLen:o}=this;e=Ba(e);let r=e.length;for(let s=0;s<r;){let a=Math.min(o-this.pos,r-s);if(a===o){let c=jr(e);for(;o<=r-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ia(this),nl(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:r}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;Jp(n,o-8,BigInt(this.length*8),r),this.process(n,0);let a=jr(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],r)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:r,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=r,e.destroyed=s,o%t&&e.buffer.set(n),e}};var ef=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]),no=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),oo=new Uint32Array(64),xa=class extends Zr{constructor(){super(64,32,8,!1),this.A=no[0]|0,this.B=no[1]|0,this.C=no[2]|0,this.D=no[3]|0,this.E=no[4]|0,this.F=no[5]|0,this.G=no[6]|0,this.H=no[7]|0}get(){let{A:e,B:t,C:n,D:o,E:r,F:s,G:a,H:c}=this;return[e,t,n,o,r,s,a,c]}set(e,t,n,o,r,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=r|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)oo[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=oo[m-15],p=oo[m-2],f=Pn(d,7)^Pn(d,18)^d>>>3,y=Pn(p,17)^Pn(p,19)^p>>>10;oo[m]=y+oo[m-7]+f+oo[m-16]|0}let{A:n,B:o,C:r,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=Pn(a,6)^Pn(a,11)^Pn(a,25),p=l+d+il(a,c,u)+ef[m]+oo[m]|0,y=(Pn(n,2)^Pn(n,13)^Pn(n,22))+rl(n,o,r)|0;l=u,u=c,c=a,a=s+p|0,s=r,r=o,o=n,n=p+y|0}n=n+this.A|0,o=o+this.B|0,r=r+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,r,s,a,c,u,l)}roundClean(){oo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var sl=ol(()=>new xa);import{PublicKey as Yf}from"@solana/web3.js";import pl,{isBN as fl}from"bn.js";import{bits as tf,BitStructure as nf,blob as of,Blob as rf,cstr as sf,f32 as af,f32be as uf,f64 as cf,f64be as lf,greedy as mf,Layout as df,ns64 as pf,ns64be as ff,nu64 as yf,nu64be as bf,offset as gf,s16 as Pf,s16be as Af,s24 as wf,s24be as kf,s32 as hf,s32be as Tf,s40 as If,s40be as Bf,s48 as xf,s48be as Sf,s8 as Kf,seq as Cf,struct as Rk,Structure as Rf,u16 as Lf,u16be as Nf,u24 as Of,u24be as Mf,u32 as vf,u32be as Ff,u40 as _f,u40be as Ef,u48 as Vf,u48be as Df,u8 as Wf,UInt as qf,union as Uf,Union as Gf,unionLayoutDiscriminator as Xf,utf8 as zf}from"@solana/buffer-layout";var Ki=df,al=Rf,ul=Gf,Lk=nf,Sa=qf,cl=rf,Nk=mf,$r=Wf,en=Lf,Ok=Of,Ci=vf,Mk=_f,vk=Vf,ll=yf,Fk=Nf,_k=Mf,Ek=Ff,Vk=Ef,Dk=Df,Wk=bf,qk=Kf,Uk=Pf,Gk=wf,ze=hf,Xk=If,zk=xf,Yk=pf,Hk=Af,Qk=kf,jk=Tf,Zk=Bf,$k=Sf,Jk=ff,eh=af,th=uf,nh=cf,oh=lf;var ml=Cf,dl=Uf,ih=Xf,Re=of,rh=sf,sh=zf,Ka=tf,Ca=gf;var ho=class extends Ki{constructor(t,n,o){super(t,o);this.blob=Re(t),this.signed=n}decode(t,n=0){let o=new pl(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new pl(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Jr=class extends Ki{constructor(t){super(8,t);this._lower=Ka(Ci(),!1),this._upper=Ka(Ci(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),r=this._upper.decode(t,n+this._lower.span);return _(_({},o),r)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function D(i){return new Sa(1,i)}function kt(i){return new Sa(4,i)}function A(i){return new ho(8,!1,i)}function re(i){return new ho(16,!1,i)}function yl(i){return new ho(1,!0,i)}function Ho(i){return new ho(8,!0,i)}function bl(i){return new ho(16,!0,i)}var Mn=class extends Ki{constructor(t,n,o,r){super(t.span,r);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function F(i){return new Mn(Re(32),e=>new Yf(e),e=>e.toBuffer(),i)}var Ra=class extends Ki{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=$r()}encode(t,n,o=0){return t==null?this.discriminator.encode(0,n,o):(this.discriminator.encode(1,n,o),this.layout.encode(t,n,o+1)+1)}decode(t,n=0){let o=this.discriminator.decode(t,n);if(o===0)return null;if(o===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let o=this.discriminator.decode(t,n);if(o===0)return 1;if(o===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function mh(i,e){return new Ra(i,e)}function Ye(i){return new Mn($r(),Hf,Qf,i)}function Hf(i){if(i===0)return!1;if(i===1)return!0;throw new Error("Invalid bool: "+i)}function Qf(i){return i?1:0}function gl(i,e){let t=Ci("length"),n=E([t,j(i,Ca(t,-t.span),"values")]);return new Mn(n,({values:o})=>o,o=>({values:o}),e)}function dh(i,e,t){let n=E([A("tag"),e.replicate("data")]);function o({tag:r,data:s}){if(!r.eq(i))throw new Error("Invalid tag, expected: "+i.toString("hex")+", got: "+r.toString("hex"));return s}return new Mn(n,o,r=>({tag:i,data:r}),t)}function jf(i){let e=Ci("length"),t=E([e,Re(Ca(e,-e.span),"data")]);return new Mn(t,({data:n})=>n,n=>({data:n}),i)}function ht(i){return new Mn(jf(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),i)}function ph(i,e){let t=dl($r(),e);return i.forEach((n,o)=>t.addVariant(o,n,n.property)),t}function fh(i,e,t){let n=E([j(i,e,"values")]);return new Mn(n,({values:o})=>o,o=>({values:o}),t)}var La=class extends al{decode(e,t){return super.decode(e,t)}};function E(i,e,t){return new La(i,e,t)}var Na=class extends ul{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(o=>o.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function yh(i,e,t){return new Na(i,e,t)}var Oa=class extends cl{decode(e,t){let n=super.decode(e,t);if(!n.every(o=>o===0))throw new Error("nonzero padding bytes");return n}};function bh(i){return new Oa(i)}function j(i,e,t){let n,o=typeof e=="number"?e:fl(e)?e.toNumber():new Proxy(e,{get(r,s){if(!n){let a=Reflect.get(r,"count");n=fl(a)?a.toNumber():a,Reflect.set(r,"count",n)}return Reflect.get(r,s)},set(r,s,a){return s==="count"&&(n=a),Reflect.set(r,s,a)}});return ml(i,o,t)}var An=E([F("mint"),F("owner"),A("amount"),kt("delegateOption"),F("delegate"),D("state"),kt("isNativeOption"),A("isNative"),A("delegatedAmount"),kt("closeAuthorityOption"),F("closeAuthority")]);var Rh=ke("Raydium_Util");function Al({owner:i,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:r,account:s}of t.value){let a=An.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:r,mint:c,amount:u,isAssociated:J(i,c,s.owner).publicKey.equals(r),isNative:!1,programId:s.owner}),o.push({pubkey:r,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Pl.default,amount:new $f(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function nt({fromPublicKey:i,programId:e=Jf,assignSeed:t}){let n=t?btoa(t).slice(0,32):Zf.generate().publicKey.toBase58().slice(0,32);return{publicKey:ey(i,n,e),seed:n}}function ey(i,e,t){let n=Buffer.concat([i.toBuffer(),Buffer.from(e),t.toBuffer()]),o=sl(n);return new Pl(o)}function Ma(i){let{mint:e,tokenAccount:t,owner:n,programId:o=Qo}=i;return ry(t,e,n,o)}function vn(i){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:r=Qo}=i;return iy(e,t,o,n,r)}async function io(i){let{connection:e,amount:t,commitment:n,payer:o,owner:r,skipCloseAccount:s}=i,a=await e.getMinimumBalanceForRentExemption(An.span,n),c=te(t).add(new oy(a)),u=nt({fromPublicKey:o,programId:Qo});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[ny.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:An.span,programId:Qo}),Ma({mint:new ty(yt.address),tokenAccount:u.publicKey,owner:r,programId:Qo})],instructionTypes:[z.CreateAccount,z.InitAccount],endInstructionTypes:s?[]:[z.CloseAccount],endInstructions:s?[]:[vn({tokenAccount:u.publicKey,payer:o,owner:r})]}}function wl({source:i,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:r=Qo}){return sy(i,e,t,BigInt(String(n)),o,r)}var Ri=class extends Xe{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:o,notSubscribeAccountChange:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._notSubscribeAccountChange=r!=null?r:!0,this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}set notSubscribeAccountChange(t){this._notSubscribeAccountChange=t}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return J(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<(this._notSubscribeAccountChange?1e3*5:1e3*60*3))return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=_(_({},{}),t),[r,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:ro},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:uy},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Al({owner:this.scope.ownerPubKey,solAccountResp:r,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._notSubscribeAccountChange||(this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>{this.fetchWalletTokenAccounts({forceUpdate:!0}),this._accountListener.forEach(l=>l({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:c,tokenAccountRawInfos:u}}clearAccountChangeCkb(){this._accountChangeListenerId!==void 0&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId)}async getCreatedTokenAccount({mint:t,programId:n=ro,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let r=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 r){let{publicKey:c}=a;if(c&&(!o||o&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,b,g,P;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:r,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,m=new es(t.tokenProgram||ro),d=this.getAssociatedTokenAccount(n,new es(m)),p=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!r||h.pubkey.equals(d))).sort((h,I)=>h.accountInfo.amount.lt(I.accountInfo.amount)?1:-1);if(o===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(r){let h=va(s,d,s,n,m),I=this.tokenAccountRawInfos.find(T=>T.pubkey.equals(d));if(u){let T=await this.scope.connection.getAccountInfo(d);if(T===null)(y=f.instructions)==null||y.push(h),f.instructionTypes.push(z.CreateATA);else if(!(T.owner.equals(m)&&jo.decode(T.data).mint.equals(n)&&jo.decode(T.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else I===void 0&&(f.instructions.push(h),f.instructionTypes.push(z.CreateATA));if(n.equals($)&&o.amount){let T=await io({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(b=o.amount)!=null?b:0,skipCloseAccount:c});f.instructions.push(...T.instructions||[]),f.endInstructions.push(...T.endInstructions||[]),f.instructionTypes.push(...T.instructionTypes||[]),f.endInstructionTypes.push(...T.endInstructionTypes||[]),o.amount&&(f.instructions.push(wl({source:T.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:ro})),f.instructionTypes.push(z.TransferAmount))}return!c&&I===void 0&&(f.endInstructions.push(vn({owner:s,payer:o.payer||s,tokenAccount:d,programId:m})),f.endInstructionTypes.push(z.CloseAccount)),{account:d,instructionParams:f}}else{let h=nt({fromPublicKey:s,programId:m,assignSeed:l}),I=await this.scope.connection.getMinimumBalanceForRentExemption(jo.span),T=ay.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:I+Number((P=(g=o.amount)==null?void 0:g.toString())!=null?P:0),space:jo.span,programId:m});return f.instructions.push(T,Ma({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(z.CreateAccount),f.instructionTypes.push(z.InitAccount),c||(f.endInstructions.push(vn({owner:s,payer:o.payer||s,tokenAccount:h.publicKey,programId:m})),f.endInstructionTypes.push(z.CloseAccount)),{account:h.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=ro,autoUnwrapWSOLToSOL:o}){var c;await this.fetchWalletTokenAccounts();let r=(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(!r){let u=this.getAssociatedTokenAccount(t,n),l=await va(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[z.CreateATA],r=u}return o&&$.toBase58()===t.toBase58()&&(a.endInstructions=[vn({owner:s,payer:s,tokenAccount:r,programId:n})],a.endInstructionTypes=[z.CloseAccount]),{pubKey:r,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:r,programId:s=ro,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(r,s);if(new es($).equals(r)){let p=await io({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return _({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=va(this.scope.ownerPubKey,d,this.scope.ownerPubKey,r,s);if(m){let y=await this.scope.connection.getAccountInfo(d);if(y===null)p.push(f);else if(!(y.owner.equals(ro)&&jo.decode(y.data).mint.equals(r)&&jo.decode(y.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${r.toString()}, ata: ${d.toString()}`)}else p.push(f);return{tokenAccount:d,instructions:p,instructionTypes:[z.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=ro,amount:r,useSOLBalance:s,handleTokenAccount:a,feePayer:c}=t,u,l=this.createTxBuilder(c);if(n.equals(new es($))&&s){let m=await this.handleTokenAccount({side:"in",amount:r||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=m,f=Qe(m,["tokenAccount"]);u=p,l.addInstruction(f)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!u&&a){let d=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=d,f=Qe(d,["tokenAccount"]);u=p,l.addInstruction(f)}return _({tokenAccount:u},l.AllTxData)}};import{PublicKey as Me,SystemProgram as Ry}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Vl}from"@solana/spl-token";import{PublicKey as Wa}from"@solana/web3.js";var Fa=E([D("instruction")]),_a=E([D("instruction")]),cy=E([A("rewardState"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardLastUpdateTime"),A("totalReward"),A("totalRewardEmissioned"),A("rewardClaimed"),A("rewardPerSecond"),re("accRewardPerShare"),F("rewardVault"),F("rewardMint"),F("rewardSender"),A("rewardType"),j(A(),15,"padding")]),ly=E([A("state"),A("nonce"),F("lpVault"),F("rewardVault"),F(),F(),A(),A(),A("totalReward"),re("perShareReward"),A("lastSlot"),A("perSlotReward")]),my=E([A("state"),A("nonce"),F("lpVault"),F("rewardVaultA"),A("totalRewardA"),re("perShareRewardA"),A("perSlotRewardA"),D("option"),F("rewardVaultB"),Re(7),A("totalRewardB"),re("perShareRewardB"),A("perSlotRewardB"),A("lastSlot"),F()]),dy=E([A(),A("state"),A("nonce"),A("validRewardTokenNum"),re("rewardMultiplier"),A("rewardPeriodMax"),A("rewardPeriodMin"),A("rewardPeriodExtend"),F("lpMint"),F("lpVault"),j(cy,5,"rewardInfos"),F("creator"),F(),j(A(),32,"padding")]),kl=new Proxy(ly,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return U(_({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(i,e,t)}}),hl=new Proxy(my,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return U(_({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(i,e,t)}}),Li=new Proxy(dy,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return U(_({},o),{version:6,rewardInfos:o.rewardInfos.map(r=>{var s;return U(_({},r),{rewardType:((s=Object.entries(so).find(a=>String(a[1])===r.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(i,e,t)}}),py=E([A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),Ea=E([D("instruction"),A("nonce"),j(py,5,"rewardTimeInfo")]),Va=E([D("instruction"),A("rewardReopenTime"),A("rewardEndTime"),A("rewardPerSecond")]),Da=E([D("instruction"),A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),uT=E([A("state"),F("id"),F("owner"),A("deposited"),j(A(),1,"rewardDebts")]),Ni=E([A("state"),F("id"),F("owner"),A("deposited"),j(re(),1,"rewardDebts"),A(""),A("voteLockedBalance"),j(A(),15)]),cT=E([A("state"),F("id"),F("owner"),A("deposited"),j(A(),2,"rewardDebts")]),Tl=E([A("state"),F("id"),F("owner"),A("deposited"),j(re(),2,"rewardDebts"),j(A(),17)]),Il=E([A(),A("state"),F("id"),F("owner"),A("deposited"),j(re(),5,"rewardDebts"),j(A(),16)]),Mt=E([D("instruction"),A("amount")]),fy=E([F("mint"),F("grantAuthority"),A("baselineVoteWeightScaledFactor"),A("maxExtraLockupVoteWeightScaledFactor"),A("lockupSaturationSecs"),yl("digitShift"),j(D(),7,"reserved1"),j(A(),7,"reserved2")]),Bl=E([Re(8),F("governanceProgramId"),F("realm"),F("realmGoverningTokenMint"),F("realmAuthority"),j(D(),32,"reserved1"),j(fy,4,"votingMints"),Ho("timeOffset"),D("bump"),j(D(),7,"reserved2"),j(A(),11,"reserved3")]),yy=E([Ho("startTime"),Ho("endTime"),D("kind"),j(D(),15,"reserved")]),by=E([j(yy,1,"lockup"),A("amountDeposited_native"),A("amountInitiallyLockedNative"),Ye("isUsed"),Ye("allowClawback"),D("votingMintConfigIdx"),j(D(),29,"reserved")]),xl=E([Re(8),F("voterAuthority"),F("registrar"),j(by,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),j(D(),94,"reserved")]);import{NATIVE_MINT as gy}from"@solana/spl-token";var PT=ke("Raydium_farm_config"),Sl=new Wa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Kl=new Wa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),AT=gy,wT=new Wa("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX"),Cl={3:kl,5:hl,6:Li},Rl={3:Ni,5:Tl,6:Il},qa=i=>[3,4,5,6].indexOf(i)!==-1,Ua=i=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=i,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,r={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(s=r[e])==null?void 0:s.call(r)},so={"Standard SPL":0,"Option tokens":1},un={[sa.toString()]:3,[aa.toString()]:4,[ua.toString()]:5,[Wo.toString()]:6,[On.FARM_PROGRAM_ID_V3.toString()]:3,[On.FARM_PROGRAM_ID_V4.toString()]:4,[On.FARM_PROGRAM_ID_V5.toString()]:5,[On.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as ye,SystemProgram as To,SYSVAR_CLOCK_PUBKEY as $o,SYSVAR_RENT_PUBKEY as wy,TransactionInstruction as dt}from"@solana/web3.js";import ts from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as ky,createAssociatedTokenAccountIdempotentInstruction as hy,TOKEN_PROGRAM_ID as zt}from"@solana/spl-token";function Ga(i,e,t){return ie([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],i)}function Xa(i,e){return ie([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],i)}function za(i,e){return ie([e.toBuffer()],i)}function Ya(i,e,t){return ie([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],i)}function Ha(i,e,t){return ie([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],i)}function Qa(i,e,t,n){return ie([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}import Xt from"bn.js";var Oi=ke("Raydium.farm.util");function Mi({programId:i,poolId:e,mint:t,type:n}){let{publicKey:o}=ie([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],i);return o}function xt({programId:i,poolId:e,owner:t,version:n}){let{publicKey:o}=ie([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],i);return o}var Ll=({programId:i,poolId:e})=>ie([e.toBuffer()],i);function Nl(i){return{isSet:new Xt(1),rewardPerSecond:te(i.perSecond),rewardOpenTime:te(i.openTime),rewardEndTime:te(i.endTime),rewardType:te(so[i.rewardType])}}function ja(i){return te(i.endTime).sub(te(i.openTime)).mul(te(i.perSecond))}function Zo(i){let e=Rl[i];return e||Oi.logWithError("invalid version",i),e}function Py(i){let e=Cl[i];return e||Oi.logWithError("invalid version",i),e}function Ay(i,e,t,n){if(i.version===3||i.version===5){if(i.lastSlot.gte(new Xt(t)))return i;let o=new Xt(t).sub(i.lastSlot);i.lastSlot=new Xt(t);for(let r of i.rewardInfos){if(e.amount.eq(new Xt(0)))continue;let s=r.perSlotReward.mul(o);r.perShareReward=r.perShareReward.add(s.mul(new Xt(10).pow(new Xt(i.version===3?9:15))).div(e.amount)),r.totalReward=r.totalReward.add(s)}}else if(i.version===6)for(let o of i.rewardInfos){if(o.rewardState.eq(new Xt(0)))continue;let r=Xt.min(new Xt(n),o.rewardEndTime);if(o.rewardOpenTime.gte(r))continue;let a=r.sub(o.rewardLastUpdateTime).mul(o.rewardPerSecond),c=o.totalReward.sub(o.totalRewardEmissioned);c.lt(a)?(a=c,o.rewardLastUpdateTime=o.rewardLastUpdateTime.add(c.div(o.rewardPerSecond))):o.rewardLastUpdateTime=r,!e.amount.eq(new Xt(0))&&(o.accRewardPerShare=o.accRewardPerShare.add(a.mul(i.rewardMultiplier).div(e.amount)),o.totalRewardEmissioned=o.totalRewardEmissioned.add(a))}return i}async function _T({connection:i,farmPools:e,owner:t,config:n,chainTime:o}){let r=!1,s=!1,a=new Xt(10),c=[];for(let d of e){let p=Ge(d);p.version===6?s=!0:r=!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:xt({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await We(i,c,n);for(let{pubkey:d,version:p,key:f,poolId:y,accountInfo:b}of l){let g=y.toBase58();if(u[g]=_({},u[g]),f==="state"){let P=Py(p);(!b||!b.data||b.data.length!==P.span)&&Oi.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=P.decode(b.data)}else if(f==="lpVault")(!b||!b.data||b.data.length!==An.span)&&Oi.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=An.decode(b.data);else if(f==="ledger"){let P=Zo(p);b&&b.data&&(b.data.length!==P.span&&Oi.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=P.decode(b.data))}}let m=s||r?await i.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Ay(u[d].state,u[d].lpVault,m,o));for(let[d,{state:p,ledger:f}]of Object.entries(u))if(f){let y=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new Xt(9)):a.pow(new Xt(15)),b=p.rewardInfos.map((g,P)=>{let h=f.rewardDebts[P];return f.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(y).sub(h)});u[d].wrapped=U(_({},u[d].wrapped),{pendingRewards:b})}return u}function ET(i,e=Date.now()){if(i.version===6){let t=i.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>Dc(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>Wc(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=i.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 Za(i,e,t,n){let o=await i.getAccountInfo(e);if(o===null)throw Error("registrar info check error");let s=Bl.decode(o.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await i.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=xl.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Ty=ke("Raydium_farm_instruction"),vi={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};function Fi(i){let{version:e,id:t,ledger:n,programId:o,owner:r}=i,s={3:9,5:10}[e];s||Ty.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Fa.span);Fa.encode({instruction:s},a);let c=[w({pubkey:t}),w({pubkey:n}),w({pubkey:r,isWritable:!1}),w({pubkey:To.programId,isWritable:!1}),w({pubkey:wy,isWritable:!1})];return{instruction:new dt({programId:o,keys:c,data:a}),instructionType:z.FarmV3CreateLedger}}function Ol(i){var n;let e=Buffer.alloc(Ea.span);Ea.encode({instruction:0,nonce:new ts(i.nonce),rewardTimeInfo:i.rewardInfoConfig},e);let t=[...js,w({pubkey:i.farmId}),w({pubkey:i.farmAuthority,isWritable:!1}),w({pubkey:i.lpVault}),w({pubkey:i.lpMint,isWritable:!1}),w({pubkey:i.lockVault}),w({pubkey:i.lockMint,isWritable:!1}),w({pubkey:(n=i.lockUserAccount)!=null?n:bt}),w({pubkey:i.owner,isWritable:!1,isSigner:!0})];for(let o of i.rewardInfo)t.push(w({pubkey:o.rewardMint,isWritable:!1}),w({pubkey:o.rewardVault}),w({pubkey:o.userRewardToken}));return{instruction:new dt({programId:i.programId,keys:t,data:e}),instructionType:z.FarmV6Create}}function Ml(i){let e=Buffer.alloc(_a.span);_a.encode({instruction:5},e);let t=[w({pubkey:zt,isWritable:!1}),w({pubkey:i.id}),w({pubkey:i.authority,isWritable:!1}),w({pubkey:i.lpVault,isWritable:!1}),w({pubkey:i.rewardVault}),w({pubkey:i.userRewardToken}),w({pubkey:i.owner,isWritable:!1,isSigner:!0})];return{instruction:new dt({programId:i.programId,keys:t,data:e}),instructionType:z.FarmV6CreatorWithdraw}}function Iy(i,e,t,n,o,r,s,a,c,u,l,m,d){let p=E([D("depositEntryIndex"),A("amount")]),f=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:zt,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:Or,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},y);let b=Buffer.from([...vi.voterStakeRegistryDeposit,...y]);return new dt({keys:f,programId:i,data:b})}function By(i,e,t,n){let o=E([]),r=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:To.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([...vi.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new dt({keys:r,programId:i,data:a})}function xy(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f){let y=E([D("depositEntryIndex"),A("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:zt,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:Or,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);y.encode({depositEntryIndex:p,amount:f},g);let P=Buffer.from([...vi.voterStakeRegistryWithdraw,...g]);return new dt({keys:b,programId:i,data:P})}function Sy(i,e,t,n,o,r){let s=E([D("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:To.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new dt({keys:a,programId:i,data:c})}function Ky(i,e,t,n,o,r,s,a){let c=E([D("voterBump"),D("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:To.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Or,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...vi.voterStakeRegistryCreateVoter,...l]);return new dt({keys:u,programId:i,data:m})}function Cy(i,e,t,n,o,r,s,a,c,u,l,m){let d=E([D("depositEntryIndex"),D("kind"),D("option"),A("startTs"),kt("periods"),Ye("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:To.programId,isSigner:!1,isWritable:!1},{pubkey:zt,isSigner:!1,isWritable:!1},{pubkey:ky,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},f);let y=Buffer.from([...vi.voterStakeRegistryCreateDepositEntry,...f]);return new dt({keys:p,programId:i,data:y})}async function eI({connection:i,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=Ga(n,o,r).publicKey,l=xt({programId:e,poolId:a,owner:s,version:3}),m=await i.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=Ni.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new ts(0)))throw Error("user do not has new stake amount");let f=Xa(e,a).publicKey,y=za(e,a).publicKey,{publicKey:b,nonce:g}=Ya(n,u,s),P=J(b,f,c).publicKey,{publicKey:h,nonce:I}=Ha(n,u,s),T=Qa(t,o,r,s).publicKey,k=[],S=J(s,f,c).publicKey;if(await i.getAccountInfo(S)===null&&k.push(hy(s,S,s,f)),await i.getAccountInfo(b)===null){let L=Sy(t,o,s,r,s,T);k.push(L,Ky(n,u,b,h,s,s,g,I))}let{index:B,isInit:C}=await Za(i,u,b,f);return C||k.push(Cy(n,u,b,P,s,s,f,B,0,void 0,0,!1)),k.push(Iy(n,u,b,P,S,s,l,a,f,y,e,B,p),By(n,u,b,h)),k}async function tI({connection:i,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=Ga(n,o,r).publicKey,l=xt({programId:e,poolId:a,owner:s,version:3}),m=await i.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=Ni.decode(m.data);if(d.voteLockedBalance.eq(new ts(0)))throw Error("user has vote locked balance = 0");let p=Xa(e,a).publicKey,f=za(e,a).publicKey,{publicKey:y}=Ya(n,u,s),b=J(y,p,c).publicKey,{publicKey:g}=Ha(n,u,s),P=Qa(t,o,r,s).publicKey,h=[],{index:I,isInit:T}=await Za(i,u,y,p);if(!T)throw Error("deposit entry index check error");return h.push(xy(n,u,y,s,P,g,b,J(s,p,c).publicKey,l,a,p,f,e,I,d.voteLockedBalance)),h}function $a({payer:i,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let r=Buffer.alloc(Va.span);Va.encode({instruction:3,rewardReopenTime:te(o.openTime),rewardEndTime:te(o.endTime),rewardPerSecond:te(o.perSecond)},r);let s=[w({pubkey:zt,isWritable:!1}),w({pubkey:n.id}),w({pubkey:n.lpVault,isWritable:!1}),w({pubkey:e}),w({pubkey:t}),w({pubkey:i,isWritable:!1,isSigner:!0})];return new dt({programId:n.programId,keys:s,data:r})}function Ja({payer:i,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let r=Buffer.alloc(Da.span);Da.encode({instruction:4,isSet:new ts(1),rewardPerSecond:te(o.perSecond),rewardOpenTime:te(o.openTime),rewardEndTime:te(o.endTime),rewardType:te(so[o.rewardType])},r);let s=[...js,w({pubkey:t.id}),w({pubkey:t.authority,isWritable:!1}),w({pubkey:o.mint,isWritable:!1}),w({pubkey:n}),w({pubkey:e}),w({pubkey:i,isWritable:!1,isSigner:!0})];return new dt({programId:t.programId,keys:s,data:r})}function nI(i){let{farmInfo:e,farmKeys:t,version:n,lpAccount:o,rewardAccounts:r,owner:s,instruction:a,amount:c,deposit:u}=i,[l,m]=[new ye(e.programId),new ye(e.id)],d=xt({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(Mt.span);Mt.encode({instruction:a,amount:c},p);let f=n===6?[w({pubkey:zt,isWritable:!1}),...u?[w({pubkey:To.programId,isWritable:!1})]:[],w({pubkey:m}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:new ye(t.lpVault)}),w({pubkey:d}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:o})]:[w({pubkey:m}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:d}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:o}),w({pubkey:new ye(t.lpVault)}),w({pubkey:r[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1})];if(n===5)for(let y=1;y<t.rewardInfos.length;y++)f.push(w({pubkey:r[y]})),f.push(w({pubkey:new ye(t.rewardInfos[y].vault)}));if(n===6)for(let y=0;y<t.rewardInfos.length;y++)f.push(w({pubkey:new ye(t.rewardInfos[y].vault)})),f.push(w({pubkey:r[y]}));return new dt({programId:l,keys:f,data:p})}function _i(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s}=i,[a,c]=[new ye(e.programId),new ye(e.id)],u=xt({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(Mt.span);Mt.encode({instruction:2,amount:te(s)},l);let m=[w({pubkey:zt,isWritable:!1}),w({pubkey:c}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:new ye(t.lpVault)}),w({pubkey:u}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(w({pubkey:new ye(t.rewardInfos[d].vault)})),m.push(w({pubkey:o[d]}));return new dt({programId:a,keys:m,data:l})}function Ei(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new ye(e.programId),new ye(e.id)],l=xt({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(Mt.span);Mt.encode({instruction:12,amount:te(s)},m);let d=[w({pubkey:u}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ye(t.lpVault)}),w({pubkey:o[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(w({pubkey:o[p]})),d.push(w({pubkey:new ye(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(w({pubkey:p}));return new dt({programId:c,keys:d,data:m})}function vl(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new ye(e.programId),new ye(e.id)],l=E([D("instruction"),A("amount")]),m=[w({pubkey:u}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:a[0]}),w({pubkey:r,isSigner:!0,isWritable:!1}),w({pubkey:n}),w({pubkey:new ye(t.lpVault)}),w({pubkey:o[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1}),w({pubkey:o[1]}),w({pubkey:new ye(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},d),new dt({keys:m,programId:c,data:d})}function Vi(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new ye(e.programId),new ye(e.id)],l=xt({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(Mt.span);Mt.encode({instruction:11,amount:te(s)},m);let d=[w({pubkey:u}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ye(t.lpVault)}),w({pubkey:o[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1})];if(a)for(let p of a)d.push(w({pubkey:p}));return new dt({programId:c,keys:d,data:m})}function Fl(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new ye(e.programId),new ye(e.id)],l=xt({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(Mt.span);Mt.encode({instruction:10,amount:te(s)},m);let d=[w({pubkey:u}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ye(t.lpVault)}),w({pubkey:o[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1})];if(a)for(let p of a)d.push(w({pubkey:p}));return new dt({programId:c,keys:d,data:m})}function _l(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new ye(e.programId),new ye(e.id)],l=xt({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(Mt.span);Mt.encode({instruction:11,amount:te(s)},m);let d=[w({pubkey:u}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ye(t.lpVault)}),w({pubkey:o[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(w({pubkey:o[p]})),d.push(w({pubkey:new ye(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(w({pubkey:p}));return new dt({programId:c,keys:d,data:m})}function El(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s}=i,[a,c]=[new ye(e.programId),new ye(e.id)],u=xt({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(Mt.span);Mt.encode({instruction:1,amount:te(s)},l);let m=[w({pubkey:zt,isWritable:!1}),w({pubkey:To.programId,isWritable:!1}),w({pubkey:c}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:new ye(t.lpVault)}),w({pubkey:u}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(w({pubkey:new ye(t.rewardInfos[d].vault)})),m.push(w({pubkey:o[d]}));return new dt({programId:a,keys:m,data:l})}var Di=class extends Xe{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(bt)){let n=await io({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ja(U(_({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=Wo,txVersion:r,feePayer:s,lockProgram:a}){var S,x;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new Me(e.lpMint.address),lockInfo:{lockMint:(S=a==null?void 0:a.mint)!=null?S:Sl,lockVault:(x=a==null?void 0:a.vault)!=null?x:Kl},version:6,rewardInfos:t,programId:o},l=this.createTxBuilder(s),m=n!=null?n:this.scope.ownerPubKey,d=nt({fromPublicKey:m,programId:u.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(Li.span);l.addInstruction({instructions:[Ry.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:Li.span,programId:u.programId})]});let{publicKey:f,nonce:y}=Ll({programId:new Me(u.programId),poolId:d.publicKey}),b=Mi({programId:u.programId,poolId:d.publicKey,mint:u.lpMint,type:"lpVault"}),g=[],P=[];for(let K of u.rewardInfos){K.openTime>=K.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",K.openTime.toString()),isNaN(so[K.rewardType])&&this.logAndCreateError("rewardType error",K.rewardType),Number(K.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",K.perSecond),g.push(Nl(K));let{rewardPubKey:B,newInstruction:C}=await this._getUserRewardInfo({rewardInfo:K,payer:m});C&&l.addInstruction(C),B||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let L=K.mint.equals(bt)?new Me(yt.address):K.mint;P.push({rewardMint:L,rewardVault:Mi({programId:u.programId,poolId:d.publicKey,mint:L,type:"rewardVault"}),userRewardToken:B})}let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new Me(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});I&&l.addInstruction(I),h||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:T,instructionType:k}=Ol({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:h,programId:u.programId,rewardInfo:P,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[T],instructionTypes:[k]}).versionBuild({txVersion:r,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:h,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o,feePayer:r}){var g;let s=un[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ge((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let u=t||this.scope.ownerPubKey,l=n.mint.equals(bt)?new Me(yt.address):n.mint,m=c.rewardInfos.findIndex(P=>new Me(P.mint.address).equals(l)),d=a.rewardInfos[m];d||this.logAndCreateError("configuration does not exist","rewardMint",l);let p=(g=d.vault)!=null?g:bt,f=this.createTxBuilder(r),{rewardPubKey:y,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return b&&f.addInstruction(b),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),f.addInstruction({instructions:[$a({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:c,rewardInfo:n})],instructionTypes:[z.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o,feePayer:r}){var m;let s=un[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ge((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.forEach(d=>{d.openTime>=d.endTime&&this.logAndCreateError("start time error","newRewardInfo",d)});let u=t||this.scope.ownerPubKey,l=this.createTxBuilder(r);for(let d of n){let p=d.mint.equals(bt)?new Me(yt.address):d.mint,f=c.rewardInfos.findIndex(I=>new Me(I.mint.address).equals(p)),y=a.rewardInfos[f];y||this.logAndCreateError("configuration does not exist","rewardMint",p);let b=(m=y.vault)!=null?m:bt,{rewardPubKey:g,newInstruction:P}=await this._getUserRewardInfo({rewardInfo:d,payer:u});P&&l.addInstruction(P),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=$a({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[h],instructionTypes:[z.FarmV6Restart]})}return l.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:r,feePayer:s}=e,a=un[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=Ge((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=r!=null?r:this.scope.ownerPubKey,l=this.createTxBuilder(s),m=o.mint.equals(bt)?new Me(yt.address):o.mint,d=Mi({programId:new Me(n.programId),poolId:new Me(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:o,payer:u});return f&&l.addInstruction(f),p||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=m,l.addInstruction({instructions:[Ja({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:c,rewardVault:d,rewardInfo:o})],instructionTypes:[z.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:r,feePayer:s}=e,a=un[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=Ge((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=r!=null?r:this.scope.ownerPubKey,l=this.createTxBuilder(s);for(let m of o){let d=m.mint.equals(bt)?new Me(yt.address):m.mint,p=Mi({programId:new Me(n.programId),poolId:new Me(n.id),mint:d,type:"rewardVault"}),{rewardPubKey:f,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:m,payer:u});y&&l.addInstruction(y),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let b=Ja({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:U(_({},m),{mint:d})});l.addInstruction({instructions:[b],instructionTypes:[z.FarmV6CreatorAddReward]})}return l.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:r,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l,txTipConfig:m}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:d,programId:p}=n,f=un[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),qa(f)||this.logAndCreateError("invalid farm program:",n.programId);let[y,b]=[new Me(n.programId),new Me(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],P=xt({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),h=this.createTxBuilder(r);h.addCustomComputeBudget(l),h.addTipInstruction(m);let I={};for(let O of this.scope.account.tokenAccounts)if(a){let R=J(this.scope.ownerPubKey,O.mint,O.programId).publicKey;O.publicKey&&R.equals(O.publicKey)&&(I[O.mint.toString()]=O.publicKey)}else I[O.mint.toString()]=O.publicKey;let T=g.lpMint,k=I[T.address];k||this.logAndCreateError("you don't have any lp","lp zero",I);let S=[];for(let O of d){let R=s&&O.mint.address===$.toString(),v=I[O.mint.address];if(!v){let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new Me(O.mint.address),notUseTokenAccount:R,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:a,checkCreateATAOwner:c});v=Y,Q&&h.addInstruction(Q)}I[O.mint.address]=v,S.push(v)}let x,K=await this.scope.connection.getAccountInfo(P);if(K&&(x=Zo(f).decode(K.data)),n.programId!==Wo.toString()&&n.programId!==On.FARM_PROGRAM_ID_V6.toString()&&!x){let{instruction:O,instructionType:R}=Fi({id:b,programId:y,version:f,ledger:P,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[O],instructionTypes:[R]})}let B=Ua({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:S});B&&this.logAndCreateError(B);let C={amount:te(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:k,rewardAccounts:S,userAuxiliaryLedgers:u==null?void 0:u.map(O=>new Me(O))},L=f===6?El(C):f===5?_l(C):Fl(C),N={3:z.FarmV3Deposit,5:z.FarmV5Deposit,6:z.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[N[f]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:r,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m,txTipConfig:d}=e,{rewardInfos:p}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let f=un[n.programId];qa(f)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],b=this.createTxBuilder(a);b.addCustomComputeBudget(m),b.addTipInstruction(d);let g={};for(let B of this.scope.account.tokenAccounts)if(c){let C=J(this.scope.ownerPubKey,B.mint).publicKey;B.publicKey&&C.equals(B.publicKey)&&(g[B.mint.toString()]=B.publicKey)}else g[B.mint.toString()]=B.publicKey;if(f!==4){let B=xt({programId:new Me(n.programId),poolId:new Me(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(B);if(C)Zo(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:L,instructionType:N}=Fi({id:new Me(y.id),programId:new Me(y.programId),version:f,ledger:B,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[L],instructionTypes:[N]})}}r&&r.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let P=y.lpMint.address,h=s&&P===$.toString(),I=g[P.toString()];if(!I){let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Me(P),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:c,checkCreateATAOwner:u});I=B,C&&b.addInstruction(C)}g[P.toString()]=I;let T=[];for(let B of p){let C=s&&B.mint.address===$.toString(),L=g[B.mint.address];if(!L){let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B.mint.programId,mint:new Me(B.mint.address),notUseTokenAccount:C,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!C,associatedOnly:C?!1:c,checkCreateATAOwner:u});L=N,O&&b.addInstruction(O)}g[B.mint.address]=L,T.push(L)}let k=Ua({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:T});k&&this.logAndCreateError(k);let S={amount:te(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:l==null?void 0:l.map(B=>new Me(B))},x=f===6?_i(S):f===5?Ei(S):f===4?vl(S):Vi(S),K={3:z.FarmV3Withdraw,4:z.FarmV4Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};return b.addInstruction({instructions:[x],instructionTypes:[K[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:o,txTipConfig:r,feePayer:s}){var y;this.scope.checkOwner();let a=Ge((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c=un[e.programId];c!==6&&this.logAndCreateError("invalid farm version",c);let u=a.rewardInfos.find(b=>It(b.mint.address).equals(It(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:bt,m=this.createTxBuilder(s),d;if(t.equals(bt)||t.equals(Me.default)){let b=await io({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ja(U(_({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new M(u.perSecond).mul(10**u.mint.decimals).toString()}))});d=b.addresses.newAccount,m.addInstruction(b)}else{let b=await this.scope.account.getCreatedTokenAccount({mint:t});b?d=b:(d=await this.scope.account.getAssociatedTokenAccount(t),m.addInstruction({instructions:[Vl(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[z.CreateATA]}))}let{instruction:p,instructionType:f}=Ml({programId:a.programId,id:a.id,authority:a.authority,lpVault:a.lpVault,rewardVault:l,userRewardToken:d,owner:this.scope.ownerPubKey});return m.addCustomComputeBudget(o),m.addTipInstruction(r),m.addInstruction({instructions:[p],instructionTypes:[f]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(o),m={};for(let f of this.scope.account.tokenAccounts)if(r){let y=J(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&y.equals(f.publicKey)&&(m[f.mint.toString()]=f.publicKey)}else m[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,y)=>U(_({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:P}=f,h=un[y],I=b.address,T=n&&I===$.toString(),k=m[I];if(!k){let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Me(I),notUseTokenAccount:T,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:T?!1:r,checkCreateATAOwner:s});k=L,N&&l.addInstruction(N)}m[I.toString()]=k;let S=[];for(let L of g){let N=n&&L.mint.address===$.toString(),O=m[L.mint.address];if(!O)if(N){let{account:R,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L.mint.programId,mint:new Me(L.mint.address),notUseTokenAccount:N,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!N,associatedOnly:N?!1:r,checkCreateATAOwner:s});O=R,v&&l.addInstruction(v)}else{let R=new Me(L.mint.address);O=this.scope.account.getAssociatedTokenAccount(R),l.addInstruction({instructions:[Vl(this.scope.ownerPubKey,O,this.scope.ownerPubKey,R)]})}m[L.mint.address]=O,S.push(O)}let x=p[P],K={amount:at,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:x,lpAccount:k,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(L=>new Me(L))},B=h===6?_i(K):h===5?Ei(K):Vi(K),C={3:z.FarmV3Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};l.addInstruction({instructions:[B],instructionTypes:[C[h]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as ut}from"@solana/web3.js";import{AccountLayout as Ab,NATIVE_MINT as ys,TOKEN_PROGRAM_ID as uo}from"@solana/spl-token";import{Keypair as us,PublicKey as H,SystemProgram as Vn,TransactionInstruction as Tt}from"@solana/web3.js";import lu from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Hi,TOKEN_2022_PROGRAM_ID as $e,TOKEN_PROGRAM_ID as Fe}from"@solana/spl-token";import Wy from"bn.js";import cn from"bn.js";var Te=new cn(0),tn=new cn(1),Fn=new cn(-1),pt=new cn(1).shln(64),ns=new cn(1).shln(128),Wi=pt.sub(tn),qi=64,Dl=ns.subn(1),St=-443636,vt=-St,Ft=new cn("4295048016"),_t=new cn("79226673521066979257578248091"),os=new cn("4295048017"),is=new cn("79226673521066979257578248090"),Wl=16,ql="59543866431248",Ul="184467440737095516",Gl="15793534762490258745",rs=new cn(10).pow(new cn(6)),Ly=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(Ly||{}),OI={[500]:10,[3e3]:60,[1e4]:200},MI={version:6,liquidity:Te,tickCurrent:0,feeGrowthGlobalX64A:Te,feeGrowthGlobalX64B:Te,protocolFeesTokenA:Te,protocolFeesTokenB:Te,swapInAmountTokenA:Te,swapOutAmountTokenB:Te,swapInAmountTokenB:Te,swapOutAmountTokenA:Te,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},Xl={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:[]},vI=new cn("18446744073700000000");import we from"bn.js";function ss(i){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,i,!1),new Uint8Array(e)}function _I(i){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,i,!1),new Uint8Array(e)}function EI(i){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,i,!1),new Uint8Array(e)}function as(i){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,i,!1),new Uint8Array(e)}function eu(i,e){let t=0;for(let n=i-1;n>=0&&!e.testn(n);n--)t++;return t}function tu(i,e){let t=0;for(let n=0;n<i&&!e.testn(n);n++)t++;return t}function Ui(i,e){for(let t=0;t<i;t++)if(e.testn(t))return!1;return!0}function zl(i,e){return Ui(i,e)?null:eu(i,e)}function Yl(i,e){return Ui(i,e)?null:tu(i,e)}var Ny=Buffer.from("amm_config","utf8"),nu=Buffer.from("pool","utf8"),ou=Buffer.from("pool_vault","utf8"),Oy=Buffer.from("pool_reward_vault","utf8"),Hl=Buffer.from("position","utf8"),My=Buffer.from("tick_array","utf8"),vy=Buffer.from("operation","utf8"),Fy=Buffer.from("pool_tick_array_bitmap_extension","utf8"),_y=Buffer.from("observation","utf8");function qI(i,e){return ie([Ny,ss(e)],i)}function Ql(i,e,t,n){return ie([nu,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function iu(i,e,t){return ie([ou,e.toBuffer(),t.toBuffer()],i)}function jl(i,e,t){return ie([Oy,e.toBuffer(),t.toBuffer()],i)}function Ie(i,e,t){return ie([My,e.toBuffer(),as(t)],i)}function wn(i,e,t,n){return ie([Hl,e.toBuffer(),as(t),as(n)],i)}function Et(i,e){return ie([Hl,e.toBuffer()],i)}function _n(i){return ie([Buffer.from("metadata","utf8"),an.toBuffer(),i.toBuffer()],an)}function Gi(i){return ie([vy],i)}function ot(i,e){return ie([Fy,e.toBuffer()],i)}function Zl(i,e){return ie([_y,e.toBuffer()],i)}var $l=Buffer.from("locked_position","utf8");function ru(i,e){return ie([$l,e.toBuffer()],i)}function Jo(i,e){return ie([$l,e.toBuffer()],i)}var Ey=Buffer.from("support_mint","utf8");function su(i,e){return ie([Ey,e.toBuffer()],i)}import{PublicKey as nn}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as Jl}from"@solana/spl-token";import He from"bn.js";import Bn from"bn.js";var Xi=class{static getfeeGrowthInside(e,t,n){let o=new Bn(0),r=new Bn(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,r=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),r=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Bn(0),a=new Bn(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=be.wrappingSubU128(be.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),u=be.wrappingSubU128(be.wrappingSubU128(e.feeGrowthGlobalX64B,r),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=be.mulDivFloor(be.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,pt),c=t.tokenFeesOwedA.add(a),u=be.mulDivFloor(be.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,pt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=be.mulDivFloor(be.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,pt),c=t.tokenFeesOwedA.add(a),u=be.mulDivFloor(be.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,pt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let r=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=be.wrappingSubU128(c,u.growthInsideLastX64),m=be.mulDivFloor(l,t.liquidity,pt),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static GetPositionRewards(e,t,n,o){let r=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=be.wrappingSubU128(c,u.growthInsideLastX64),m=be.mulDivFloor(l,t.liquidity,pt),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static getRewardGrowthInside(e,t,n,o){let r=[];for(let s=0;s<o.length;s++){let a=new Bn(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Bn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(be.wrappingSubU128(be.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return r}static getRewardGrowthInsideV2(e,t,n,o){let r=[];for(let s=0;s<o.length;s++){let a=new Bn(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Bn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(be.wrappingSubU128(be.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return r}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:r,epochInfo:s}){var b,g,P,h;let a=ue.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),c=ue.getSqrtPriceX64FromTick(t.tickLower),u=ue.getSqrtPriceX64FromTick(t.tickUpper),l=r?1+o:1-o,m=Be.getAmountsFromLiquidity(a,c,u,n,r),[d,p]=[Ne(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Ne(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[f,y]=[Ne(new Bn(new M(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,s,!0),Ne(new Bn(new M(m.amountB.toString()).mul(l).toFixed(0)),(h=e.mintB.extensions)==null?void 0:h.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:gn(d.expirationTime,p.expirationTime)}}};var Vy=15,Se=class{static async getTickArrays(e,t,n,o,r,s,a){let c=[],u=ee.getTickArrayStartIndexByTick(o,r),l=ee.getInitializedTickArrayInRange(s,a,r,u,Math.floor(Vy/2));for(let p=0;p<l.length;p++){let{publicKey:f}=Ie(t,n,l[p]);c.push(f)}let m=(await dn(e,c)).map(p=>p!==null?zi.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=U(_({},f),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,r,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,r,s);for(;a==null||a.liquidityGross.lten(0);){if(u=ee.getNextTickArrayStartIndex(u,r,s),this.checkIsValidStartIndex(u,r))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,o,r){let s=Math.floor(e/Se.tickCount(t)),a=n?ee.searchLowBitFromStart(o,r,s-1,1,t):ee.searchHightBitFromStart(o,r,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let r;if(o){let a=ft-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a-1}}else{let a=0;for(;a<ft;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a+1}}let{publicKey:s}=Ie(e,t,n.startTickIndex);return{nextTick:r,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,r,s){let a=ee.getTickArrayStartIndexByTick(o,r),c=Math.floor((o-a)/r),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<ft;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=Ie(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(ee.checkIsOutOfBoundary(e)){if(e>vt)return!1;let n=ee.getTickArrayStartIndexByTick(St,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return ft*e}};var au=14,En=class{static maxTickInTickarrayBitmap(e){return e*ft*Io}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let r=n*o;return e<0?{minValue:-r,maxValue:-r+n}:{minValue:r,maxValue:r+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!Se.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let r=this.maxTickInTickarrayBitmap(n),s=o?t-Se.tickCount(n):t+Se.tickCount(n);if(s<-r||s>=r)return{isInit:!1,tickIndex:t};let a=n*ft,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=zl(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-r}}else{let l=e.shrn(u),m=Yl(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:r-Se.tickCount(n)}}}},Yi=class{static getBitmapOffset(e,t){if(!Se.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=En.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=En.maxTickInTickarrayBitmap(e),n=-t;if(vt<=t)throw Error(`extensionTickBoundary check error: ${vt}, ${t}`);if(n<=St)throw Error(`extensionTickBoundary check error: ${n}, ${St}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),r=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:ee.mergeTickArrayBitmap(o).testn(r),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let r=Se.tickCount(t),s=n?e-r:e+r,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:r,maxValue:s}=En.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=ee.mergeTickArrayBitmap(e).shln(Io-1-a),u=Ui(512,c)?null:eu(512,c);if(u!==null){let l=t-u*Se.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r}}else{let c=ee.mergeTickArrayBitmap(e).shrn(a),u=Ui(512,c)?null:tu(512,c);if(u!==null){let l=t+u*Se.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-Se.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%En.maxTickInTickarrayBitmap(t),o=Math.floor(n/Se.tickCount(t));return e<0&&n!=0&&(o=Io-o),o}};var ve=class{static getOutputAmountAndRemainAccounts(e,t,n,o,r,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:f,sqrtPriceX64:y,feeAmount:b}=Bo.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,r,s);return c.push(...f),{allTrade:d,expectedAmountOut:p.mul(Fn),remainingAccounts:c,executionPrice:y,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,r){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 y=this.preInitializedTickArrayStartIndex(e,s);if(y.isExist){let{publicKey:b}=Ie(e.programId,e.id,y.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=Bo.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(Fn),u,r);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=ve.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Yi.checkTickArrayIsInit(Se.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):ee.checkTickArrayIsInitialized(ee.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=Ie(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:r,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,Se.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(r){let{publicKey:a}=Ie(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/Se.tickCount(e.tickSpacing)),o=t?ee.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):ee.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=Se.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:r}=En.nextInitializedTickArrayStartIndex(ee.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:r};t=r;let{isInit:s,tickIndex:a}=Yi.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<St||t>vt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:r}){var a,c,u;let s=[];for(let l=0;l<r.length;l++){let m=r[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=U(_({},m),{perSecond:be.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new nn(d)});if(p.tokenMint.equals(nn.default))continue;if(n<=p.openTime.toNumber()||o.eq(Te)){s.push(p);continue}let f=new He(Math.min(p.endTime.toNumber(),n)),y=f.sub(p.lastUpdateTime),b=be.mulDivFloor(y,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),P=be.mulDivFloor(y,p.emissionsPerSecondX64,pt),h=p.rewardTotalEmissioned.add(P);s.push(U(_({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:h,lastUpdateTime:f}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let r of t){let s=ee.getTickArrayStartIndexByTick(r,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=En.maxTickInTickarrayBitmap(e),n=-t;return t>vt&&(t=Se.getArrayStartIndex(vt,e)+Se.tickCount(e)),n<St&&(n=Se.getArrayStartIndex(St,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!Se.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/Se.tickCount(t)*Io}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await We(e,t.map(s=>({pubkey:s})),{batchRequest:n}),r={};for(let s of o)s.accountInfo!==null&&(r[s.pubkey.toString()]=tm.decode(s.accountInfo.data));return r}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},r=[];for(let c of t){let u=ee.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=ee.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=Ie(c.programId,c.id,m);r.push({pubkey:d}),o[d.toString()]=c.id}}let s=await We(e,r,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=zi.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=U(_({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:r=!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(Et(p,d).publicKey);let l=await dn(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=ei.decode(d.data),f=p.poolId.toString(),y=e.find(x=>x.state.id.toBase58()===f);if(y===void 0)continue;let b=y.state,g=ee._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),P=ee._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:h,amountB:I}=Be.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,p.liquidity,!1),T=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));y.positionAccount=[...(a=y.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:P.price,amountA:h,amountB:I,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=>U(_({},x),{pendingReward:new He(0)})),leverage:T,tokenFeeAmountA:new He(0),tokenFeeAmountB:new He(0)}];let k=await ee.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickLower,y.state.tickSpacing),S=await ee.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickUpper,y.state.tickSpacing);m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=k,m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(r){let d=Object.values(m),p=await dn(t,d,{batchRequest:o}),f={};for(let y=0;y<d.length;y++){let b=p[y];if(b===null)continue;let g=d[y].toString();f[g]=zi.decode(b.data)}for(let{state:y,positionAccount:b}of e)if(!!b)for(let g of b){let P=`${y.programId.toString()}-${y.id.toString()}-${g.tickLower}`,h=`${y.programId.toString()}-${y.id.toString()}-${g.tickUpper}`,I=f[m[P].toString()],T=f[m[h].toString()],k=I.ticks[ee.getTickOffsetInArray(g.tickLower,y.tickSpacing)],S=T.ticks[ee.getTickOffsetInArray(g.tickUpper,y.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:K}=await Xi.GetPositionFees(y,g,k,S),B=await Xi.GetPositionRewards(y,g,k,S);g.tokenFeeAmountA=x.gte(new He(0))?x:new He(0),g.tokenFeeAmountB=K.gte(new He(0))?K:new He(0);for(let C=0;C<B.length;C++)g.rewardInfos[C].pendingReward=B[C].gte(new He(0))?B[C]:new He(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:r,slippage:s,priceLimit:a=new M(0),catchLiquidityInsufficient:c=!1}){var L;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new M(0))?u=l?Ft.add(new He(1)):_t.sub(new He(1)):u=ue.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Ne(r,m,o,!1),{allTrade:f,expectedAmountOut:y,remainingAccounts:b,executionPrice:g,feeAmount:P}=ve.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((L=p.fee)!=null?L:Te),u,c),h=Ne(y,d,o,!1),I=ue.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),T=l?I:new M(1).div(I),k=y.mul(new He(Math.floor((1-s)*1e10))).div(new He(1e10)),S=Ne(k,d,o,!1),x=l?e.currentPrice:new M(1).div(e.currentPrice),K=new M(T).sub(x).abs(),B=x,C=new et(new M(K).mul(10**15).toFixed(0),new M(B).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:h,minAmountOut:S,expirationTime:gn(p.expirationTime,h.expirationTime),currentPrice:e.currentPrice,executionPrice:T,priceImpact:C,fee:P,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:r,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Oe(U(_({},u),{mint:u.address,isToken2022:u.programId===Jl.toBase58()})),new Oe(U(_({},l),{mint:l.address,isToken2022:l.programId===Jl.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:y,minAmountOut:b,expirationTime:g,currentPrice:P,executionPrice:h,priceImpact:I,fee:T,remainingAccounts:k,executionPriceX64:S}=ve.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new nn(u.address),amountIn:n,slippage:r,epochInfo:s,catchLiquidityInsufficient:a}),x=U(_({},f),{amount:new Ce(m,f.amount),fee:f.fee===void 0?void 0:new Ce(m,f.fee)}),K=U(_({},y),{amount:new Ce(d,y.amount),fee:y.fee===void 0?void 0:new Ce(d,y.fee)}),B=U(_({},b),{amount:new Ce(d,b.amount),fee:b.fee===void 0?void 0:new Ce(d,b.fee)}),C=new gt({baseToken:m,denominator:new He(10).pow(new He(20+m.decimals)),quoteToken:d,numerator:P.mul(new M(10**(20+d.decimals))).toFixed(0)}),L=new gt({baseToken:m,denominator:new He(10).pow(new He(20+m.decimals)),quoteToken:d,numerator:h.mul(new M(10**(20+d.decimals))).toFixed(0)}),N=new Ce(m,T);return{allTrade:p,realAmountIn:x,amountOut:K,minAmountOut:B,expirationTime:g,currentPrice:C,executionPrice:L,priceImpact:I,fee:N,remainingAccounts:k,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountOut:r,slippage:s,priceLimit:a=new M(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 M(0))?l=c?_t.sub(new He(1)):Ft.add(new He(1)):l=ue.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=Ne(r,u[n.toString()],o,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:f,feeAmount:y}=ve.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((B=m.fee)!=null?B:Te),l),b=c?e.mintB.address:e.mintA.address,g=Ne(d,u[b],o,!1),P=ue.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),h=c?P:new M(1).div(P),I=d.mul(new He(Math.floor((1+s)*1e10))).div(new He(1e10)),T=Ne(I,u[b],o,!0),k=c?e.currentPrice:new M(1).div(e.currentPrice),S=new M(h).sub(k).abs(),x=k,K=new et(new M(S).mul(10**15).toFixed(0),new M(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:T,realAmountOut:m,expirationTime:gn(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:K,fee:y,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var f,y,b;let r=e[t],s=ee.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=ee.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(s,r.priceMin),l=Math.min(a,r.priceMax)-c,m=a-s,d=r.priceMax-r.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:r.feeApr*p,rewardsApr:[((f=r.rewardApr[0])!=null?f:0)*p,((y=r.rewardApr[1])!=null?y:0)*p,((b=r.rewardApr[2])!=null?b:0)*p],apr:r.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:r,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[It(e.mintA.address).toString()],d=o[It(e.mintB.address).toString()],p=e.mintA.decimals,f=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let y=ue.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),b=ue.getSqrtPriceX64FromTick(s),g=ue.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:h}=Be.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:I,amountSlippageB:T}=Be.getAmountsFromLiquidityWithSlippage(y,b,g,r,!1,!1,0),k=new M(P.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(h.toString()).div(new M(10).pow(f)).mul(d.value)),S=new M(I.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(T.toString()).div(new M(10).pow(f)).mul(d.value)),x=new M(1).div(k.add(S)),B=new M(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),C=3600*24*365,L=e.rewardDefaultInfos.map(N=>{var v,Y;let O=N.mint.decimals,R=o[N.mint.address];return c<((v=N.startTime)!=null?v:0)||c>((Y=N.endTime)!=null?Y:0)||!N.perSecond||!R||O===void 0?0:new M(R.value).mul(new M(N.perSecond).mul(C)).div(new M(10).pow(O)).mul(x).mul(100).toNumber()});return{feeApr:B,rewardsApr:L,apr:B+L.reduce((N,O)=>N+O,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:r,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,P;let l=ue.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),m=ue.getSqrtPriceX64FromTick(n),d=ue.getSqrtPriceX64FromTick(o),p=Ne(r,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new He(new M(p.amount.sub((P=p.fee)!=null?P:Te).toString()).toFixed(0)),y;if(l.lte(m))y=t?Be.getLiquidityFromTokenAmountA(m,d,f,!a):new He(0);else if(l.lte(d)){let h=Be.getLiquidityFromTokenAmountA(l,d,f,!a),I=Be.getLiquidityFromTokenAmountB(m,l,f);y=t?h:I}else y=t?new He(0):Be.getLiquidityFromTokenAmountB(m,d,f);let b=await ve.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:y,slippage:s,add:a});return{liquidity:y,amountA:t?p:b.amountA,amountB:t?b.amountB:p,amountSlippageA:t?p:b.amountSlippageA,amountSlippageB:t?b.amountSlippageB:p,expirationTime:b.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:r,slippage:s,add:a}){var b,g,P,h;let c=ue.getSqrtPriceX64FromTick(n),u=ue.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=Be.getAmountsFromLiquidity(ue.priceToSqrtPriceX64(new M(t.price),t.mintA.decimals,t.mintB.decimals),c,u,r,a),[d,p]=[Ne(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Ne(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,y]=[Ne(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.feeConfig,e,!0),Ne(m.amountB.muln(l),(h=t.mintB.extensions)==null?void 0:h.feeConfig,e,!0)];return{liquidity:r,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:gn(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new nn(c.id));(await dn(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=xo.decode(c.data))});let s=t.map(c=>ot(new nn(c.programId),new nn(c.id)).publicKey),a=await ve.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>U(_({},c),{[u.id]:U(_({},n[u.id]),{id:new nn(u.id),version:6,programId:new nn(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:U(_({},u.config),{id:new nn(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapAccount:ot(new nn(u.programId),new nn(u.id)).publicKey,exBitmapInfo:a[ot(new nn(u.programId),new nn(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function KB({poolInfo:i,tickLower:e,tickUpper:t,amountA:n,amountB:o,slippage:r,add:s,epochInfo:a,amountHasFee:c}){var h,I,T,k;let[u,l,m,d]=e<t?[e,t,n,o]:[t,e,o,n],p=ue.priceToSqrtPriceX64(new M(i.price),i.mintA.decimals,i.mintB.decimals),f=ue.getSqrtPriceX64FromTick(u),y=ue.getSqrtPriceX64FromTick(l),[b,g]=[Ne(m,(h=i.mintA.extensions)==null?void 0:h.feeConfig,a,!c),Ne(d,(I=i.mintB.extensions)==null?void 0:I.feeConfig,a,!c)],P=Be.getLiquidityFromTokenAmounts(p,f,y,b.amount.sub((T=b.fee)!=null?T:Te),g.amount.sub((k=g.fee)!=null?k:Te));return Be.getAmountsOutFromLiquidity({poolInfo:i,tickLower:e,tickUpper:t,liquidity:P,slippage:r,add:s,epochInfo:a,amountAddFee:!c})}var uu={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function em(i){return U(_({},i),{type:"Concentrated",programId:i.programId.toString(),id:i.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:i.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:i.ammConfig.tradeFeeRate,openTime:i.startTime.toString(),tvl:0,day:uu,week:uu,month:uu,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:U(_({},i.ammConfig),{id:i.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var be=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),r=o.div(n);return o.mod(n).eq(Te)||(r=r.add(tn)),r}static mulDivFloor(e,t,n){if(n.eq(Te))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Te))throw new Error("division by 0");return e.mul(t).add(n.sub(tn)).div(n)}static x64ToDecimal(e,t){return new M(e.toString()).div(M.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new we(e.mul(M.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(ns).sub(t).mod(ns)}};function At(i,e){return cu(i.mul(e),64,256)}function Dy(i,e,t){let n=i.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function cu(i,e,t){let n=i.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ue=class{static sqrtPriceX64ToPrice(e,t,n){return be.x64ToDecimal(e).pow(2).mul(M.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return be.decimalToX64(e.mul(M.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(Te))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Te))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(Te))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Te))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(Te))return e;let r=t.shln(qi);if(o){let s=r,a=r.add(n.mul(e));return a.gte(s)?be.mulDivCeil(s,e,a):be.mulDivRoundingUp(s,tn,s.div(e).add(n))}else{let s=n.mul(e);if(!r.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=r.sub(s);return be.mulDivCeil(r,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let r=n.shln(qi);if(o)return e.add(r.div(t));{let s=be.mulDivRoundingUp(r,tn,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<St||e>vt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new we("18445821805675395072"):new we("18446744073709551616");return(t&2)!=0&&(n=At(n,new we("18444899583751176192"))),(t&4)!=0&&(n=At(n,new we("18443055278223355904"))),(t&8)!=0&&(n=At(n,new we("18439367220385607680"))),(t&16)!=0&&(n=At(n,new we("18431993317065453568"))),(t&32)!=0&&(n=At(n,new we("18417254355718170624"))),(t&64)!=0&&(n=At(n,new we("18387811781193609216"))),(t&128)!=0&&(n=At(n,new we("18329067761203558400"))),(t&256)!=0&&(n=At(n,new we("18212142134806163456"))),(t&512)!=0&&(n=At(n,new we("17980523815641700352"))),(t&1024)!=0&&(n=At(n,new we("17526086738831433728"))),(t&2048)!=0&&(n=At(n,new we("16651378430235570176"))),(t&4096)!=0&&(n=At(n,new we("15030750278694412288"))),(t&8192)!=0&&(n=At(n,new we("12247334978884435968"))),(t&16384)!=0&&(n=At(n,new we("8131365268886854656"))),(t&32768)!=0&&(n=At(n,new we("3584323654725218816"))),(t&65536)!=0&&(n=At(n,new we("696457651848324352"))),(t&131072)!=0&&(n=At(n,new we("26294789957507116"))),(t&262144)!=0&&(n=At(n,new we("37481735321082"))),e>0&&(n=Dl.div(n)),n}static getTickFromPrice(e,t,n){return ue.getTickFromSqrtPriceX64(ue.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(_t)||e.lt(Ft))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new we(t-64),o=Dy(n,32,128),r=new we("8000000000000000","hex"),s=0,a=new we(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;r.gt(new we(0))&&s<Wl;){c=c.mul(c);let f=c.shrn(127);c=c.shrn(63+f.toNumber()),a=a.add(r.mul(f)),r=r.shrn(1),s+=1}let u=a.shrn(32),m=o.add(u).mul(new we(ql)),d=cu(m.sub(new we(Ul)),64,128).toNumber(),p=cu(m.add(new we(Gl)),64,128).toNumber();return d==p?d:ue.getSqrtPriceX64FromTick(p).lte(e)?p:d}},So=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=ue.getTickFromSqrtPriceX64(ue.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let r=So.getTickWithPriceAndTickspacing(e,t,n,o),s=ue.getSqrtPriceX64FromTick(r);return ue.sqrtPriceX64ToPrice(s,n,o)}},Be=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Te))throw new Error("sqrtPriceX64A must greater than 0");let r=n.ushln(qi),s=t.sub(e);return o?be.mulDivRoundingUp(be.mulDivCeil(r,s,t),tn,e):be.mulDivFloor(r,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Te))throw new Error("sqrtPriceX64A must greater than 0");return o?be.mulDivCeil(n,t.sub(e),pt):be.mulDivFloor(n,t.sub(e),pt)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let r=n.mul(e).mul(t),s=t.sub(e),a=r.div(s);return o?be.mulDivRoundingUp(a,tn,Wi):a.shrn(qi)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),be.mulDivFloor(n,Wi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return Be.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=Be.getLiquidityFromTokenAmountA(e,n,o,!1),a=Be.getLiquidityFromTokenAmountB(t,e,r);return s.lt(a)?s:a}else return Be.getLiquidityFromTokenAmountB(t,n,r)}static getAmountsFromLiquidity(e,t,n,o,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:Be.getTokenAmountAFromLiquidity(t,n,o,r),amountB:new we(0)};if(e.lt(n)){let s=Be.getTokenAmountAFromLiquidity(e,n,o,r),a=Be.getTokenAmountBFromLiquidity(t,e,o,r);return{amountA:s,amountB:a}}else return{amountA:new we(0),amountB:Be.getTokenAmountBFromLiquidity(t,n,o,r)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,r,s,a){let{amountA:c,amountB:u}=Be.getAmountsFromLiquidity(e,t,n,o,s),l=r?1+a:1-a,m=new we(new M(c.toString()).mul(l).toFixed(0)),d=new we(new M(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:r,add:s,epochInfo:a,amountAddFee:c}){var P,h,I,T;let u=ue.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),l=ue.getSqrtPriceX64FromTick(t),m=ue.getSqrtPriceX64FromTick(n),d=s?1+r:1-r,p=Be.getAmountsFromLiquidity(u,l,m,o,s),[f,y]=[Ne(p.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,c),Ne(p.amountB,(h=e.mintB.extensions)==null?void 0:h.feeConfig,a,c)],[b,g]=[Ne(new we(new M(p.amountA.toString()).mul(d).toFixed(0)),(I=e.mintA.extensions)==null?void 0:I.feeConfig,a,c),Ne(new we(new M(p.amountB.toString()).mul(d).toFixed(0)),(T=e.mintB.extensions)==null?void 0:T.feeConfig,a,c)];return{liquidity:o,amountA:f,amountB:y,amountSlippageA:b,amountSlippageB:g,expirationTime:gn(f.expirationTime,y.expirationTime)}}},Bo=class{static swapCompute(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y=!1){if(d.eq(Te))throw new Error("amountSpecified must not be 0");if(f||(f=s?Ft.add(tn):_t.sub(tn)),s){if(f.lt(Ft))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(f.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(f.gt(_t))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(f.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(Te),g={amountSpecifiedRemaining:d,amountCalculated:Te,sqrtPriceX64:m,tick:u>p?Math.min(p+Se.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new we(0)},P=p,h=n[p],I=0,T=!s&&h.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Te)&&!g.sqrtPriceX64.eq(f);){I>10;let k={};k.sqrtPriceStartX64=g.sqrtPriceX64;let S=ee.nextInitTick(h,g.tick,l,s,T),x=S||null,K=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let C=ve.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:r},P,s);if(!C.isExist){if(y)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}P=C.nextStartIndex;let{publicKey:L}=Ie(e,t,P);K=L,h=n[P];try{x=ee.firstInitializedTick(h,s)}catch{throw Error("not found next tick info")}}k.tickNext=x.tick,k.initialized=x.liquidityGross.gtn(0),p!==P&&K&&(g.accounts.push(K),p=P),k.tickNext<St?k.tickNext=St:k.tickNext>vt&&(k.tickNext=vt),k.sqrtPriceNextX64=ue.getSqrtPriceX64FromTick(k.tickNext);let B;if(s&&k.sqrtPriceNextX64.lt(f)||!s&&k.sqrtPriceNextX64.gt(f)?B=f:B=k.sqrtPriceNextX64,[g.sqrtPriceX64,k.amountIn,k.amountOut,k.feeAmount]=Bo.swapStepCompute(g.sqrtPriceX64,B,g.liquidity,g.amountSpecifiedRemaining,a,s),g.feeAmount=g.feeAmount.add(k.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(k.amountIn.add(k.feeAmount)),g.amountCalculated=g.amountCalculated.sub(k.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(k.amountOut),g.amountCalculated=g.amountCalculated.add(k.amountIn.add(k.feeAmount))),g.sqrtPriceX64.eq(k.sqrtPriceNextX64)){if(k.initialized){let C=x.liquidityNet;s&&(C=C.mul(Fn)),g.liquidity=Be.addDelta(g.liquidity,C)}T=k.tickNext!=g.tick&&!s&&h.startTickIndex===k.tickNext,g.tick=s?k.tickNext-1:k.tickNext}else if(g.sqrtPriceX64!=k.sqrtPriceStartX64){let C=ue.getTickFromSqrtPriceX64(g.sqrtPriceX64);T=C!=g.tick&&!s&&h.startTickIndex===C,g.tick=C}++I}try{let{nextStartIndex:k,isExist:S}=Se.nextInitializedTickArray(g.tick,l,s,o,r);S&&p!==k&&(g.accounts.push(Ie(e,t,k).publicKey),p=k)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Te,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,r,s){let a={sqrtPriceX64Next:new we(0),amountIn:new we(0),amountOut:new we(0),feeAmount:new we(0)},c=o.gte(Te);if(c){let l=be.mulDivFloor(o,rs.sub(new we(r.toString())),rs);a.amountIn=s?Be.getTokenAmountAFromLiquidity(t,e,n,!0):Be.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(a.amountIn)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ue.getNextSqrtPriceX64FromInput(e,n,l,s)}else a.amountOut=s?Be.getTokenAmountBFromLiquidity(t,e,n,!1):Be.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(Fn).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ue.getNextSqrtPriceX64FromOutput(e,n,o.mul(Fn),s);let u=t.eq(a.sqrtPriceX64Next);return s?(u&&c||(a.amountIn=Be.getTokenAmountAFromLiquidity(a.sqrtPriceX64Next,e,n,!0)),u&&!c||(a.amountOut=Be.getTokenAmountBFromLiquidity(a.sqrtPriceX64Next,e,n,!1))):(a.amountIn=u&&c?a.amountIn:Be.getTokenAmountBFromLiquidity(e,a.sqrtPriceX64Next,n,!0),a.amountOut=u&&!c?a.amountOut:Be.getTokenAmountAFromLiquidity(e,a.sqrtPriceX64Next,n,!1)),!c&&a.amountOut.gt(o.mul(Fn))&&(a.amountOut=o.mul(Fn)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=o.sub(a.amountIn):a.feeAmount=be.mulDivCeil(a.amountIn,new we(r),rs.sub(new we(r))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var ft=60,Io=512,ee=class{static getTickArrayAddressByTick(e,t,n,o){let r=ee.getTickArrayStartIndexByTick(n,o),{publicKey:s}=Ie(e,t,r);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=ee.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=ft)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=Se.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*Se.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*ft,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*ft,r=Math.floor(t/o)+512,s=Math.abs(r);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*ft:e+t*ft}static mergeTickArrayBitmap(e){let t=new Wy(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,r){let s=Math.floor(o/(n*ft));return[...ee.searchLowBitFromStart(e,t,s-1,r,n),...ee.searchHightBitFromStart(e,t,s,r,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return ee.searchHightBitFromStart(e,t,-7680,Io,n)}static getAllInitializedTickArrayInfo(e,t,n,o,r){let s=[],a=ee.getAllInitializedTickArrayStartIndex(n,o,r);for(let c of a){let{publicKey:u}=Ie(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>ee.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=Se.tickCount(r);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>ee.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=Se.tickCount(r);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<St||e>vt}static nextInitTick(e,t,n,o,r){if(Se.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(r||(a=a+1);a<ft;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=ft-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<ft;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=ue.getSqrtPriceX64FromTick(t),r=ue.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(r),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),r=So.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ue.getSqrtPriceX64FromTick(r),a=ue.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new M(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=ue.getSqrtPriceX64FromTick(t),r=ue.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(r),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),r=So.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ue.getSqrtPriceX64FromTick(r),a=ue.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new M(1).div(a)}}};var nm=E([Re(8),D("bump"),en("index"),F(""),kt("protocolFeeRate"),kt("tradeFeeRate"),en("tickSpacing"),j(A(),8,"")]),qy=E([kt("blockTimestamp"),Ho("tickCumulative"),j(A(),4)]),om=E([Re(8),Ye("initialized"),A("recentEpoch"),en("observationIndex"),F("poolId"),j(qy,100,"observations"),j(A(),4)]),Uy=E([D("rewardState"),A("openTime"),A("endTime"),A("lastUpdateTime"),re("emissionsPerSecondX64"),A("rewardTotalEmissioned"),A("rewardClaimed"),F("tokenMint"),F("tokenVault"),F("creator"),re("rewardGrowthGlobalX64")]),xo=E([Re(8),D("bump"),F("ammConfig"),F("creator"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),en("tickSpacing"),re("liquidity"),re("sqrtPriceX64"),ze("tickCurrent"),kt(),re("feeGrowthGlobalX64A"),re("feeGrowthGlobalX64B"),A("protocolFeesTokenA"),A("protocolFeesTokenB"),re("swapInAmountTokenA"),re("swapOutAmountTokenB"),re("swapInAmountTokenB"),re("swapOutAmountTokenA"),D("status"),j(D(),7,""),j(Uy,3,"rewardInfos"),j(A(),16,"tickArrayBitmap"),A("totalFeesTokenA"),A("totalFeesClaimedTokenA"),A("totalFeesTokenB"),A("totalFeesClaimedTokenB"),A("fundFeesTokenA"),A("fundFeesTokenB"),A("startTime"),j(A(),15*4-3,"padding")]),Gy=E([re("growthInsideLastX64"),A("rewardAmountOwed")]),ei=E([Re(8),D("bump"),F("nftMint"),F("poolId"),ze("tickLower"),ze("tickUpper"),re("liquidity"),re("feeGrowthInsideLastX64A"),re("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j(Gy,3,"rewardInfos"),j(A(),8,"")]),$B=E([Re(8),D("bump"),F("poolId"),ze("tickLowerIndex"),ze("tickUpperIndex"),re("liquidity"),re("feeGrowthInsideLastX64A"),re("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j(re(),3,"rewardGrowthInside"),j(A(),8,"")]),Xy=E([ze("tick"),bl("liquidityNet"),re("liquidityGross"),re("feeGrowthOutsideX64A"),re("feeGrowthOutsideX64B"),j(re(),3,"rewardGrowthsOutsideX64"),j(kt(),13,"")]),zi=E([Re(8),F("poolId"),ze("startTickIndex"),j(Xy,ft,"ticks"),D("initializedTickCount"),j(D(),115,"")]),im=E([Re(329),j(F(),100,"whitelistMints")]),tm=E([Re(8),F("poolId"),j(j(A(),8),au,"positiveTickArrayBitmap"),j(j(A(),8),au,"negativeTickArrayBitmap")]),JB=E([A(),D("bump"),F("owner"),F("poolId"),F("positionId"),F("nftAccount"),j(A(),8)]),rm=E([Re(8),D("bump"),F("lockOwner"),F("poolId"),F("positionId"),F("nftAccount"),F("lockNftMint"),A("recentEpoch"),j(A(),8)]);om.span;var sm=ke("Raydium_Clmm"),on={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],openPositionWithTokenEx:[77,255,174,82,125,29,201,46],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},am=[188,37,179,131,82,150,84,73],um=[16,72,250,198,14,162,212,19],Ke=class{static createPoolInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f){let y=E([re("sqrtPriceX64"),A("zero")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},...(f==null?void 0:f.map(h=>({pubkey:h,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,zero:Te},g);let P=Buffer.from([...on.createPool,...g]);return new Tt({keys:b,programId:e,data:P})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:r,ammConfigId:s,initialPriceX64:a,extendMintAccount:c}=e,[u,l]=[new H(o.address),new H(r.address)],{publicKey:m}=Ql(t,s,u,l),{publicKey:d}=Zl(t,m),{publicKey:p}=iu(t,m,u),{publicKey:f}=iu(t,m,l),y=ot(t,m).publicKey,b=[this.createPoolInstruction(t,m,n,s,d,u,p,new H(o.programId||Fe),l,f,new H(r.programId||Fe),y,a,c)];return{signers:[],instructions:b,instructionTypes:[z.CreateAccount,z.ClmmCreatePool],address:{poolId:m,observationId:d,exBitmapAccount:y,mintAVault:p,mintBVault:f},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I,T,k,S,x,K,B){let C=E([ze("tickLowerIndex"),ze("tickUpperIndex"),ze("tickArrayLowerStartIndex"),ze("tickArrayUpperStartIndex"),re("liquidity"),A("amountMaxA"),A("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),L=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:Hi,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...L],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:h,tickArrayLowerStartIndex:I,tickArrayUpperStartIndex:T,liquidity:k,amountMaxA:S,amountMaxB:x,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},O);let R=Buffer.from([...on.openPosition,...O]);return new Tt({keys:N,programId:e,data:R})}static openPositionFromLiquidityInstruction22(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I,T,k,S,x,K){let B=E([ze("tickLowerIndex"),ze("tickUpperIndex"),ze("tickArrayLowerStartIndex"),ze("tickArrayUpperStartIndex"),re("liquidity"),A("amountMaxA"),A("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],L=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:Hi,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(B.span);B.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:k,amountMaxB:S,withMetadata:x==="create",baseFlag:!1,optionBaseFlag:0},N);let O=Buffer.from([...on.openPositionWithTokenEx,...N]);return new Tt({keys:L,programId:e,data:O})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new H(e.programId),new H(e.id)],y;if(l)y=new H((await l(1))[0]);else{let K=us.generate();d.push(K),y=K.publicKey}let b=ee.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=ee.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:P}=Ie(p,f,b),{publicKey:h}=Ie(p,f,g),{publicKey:I}=m?J(n.wallet,y,$e):J(n.wallet,y,Fe),{publicKey:T}=_n(y),{publicKey:k}=Et(p,y),{publicKey:S}=wn(p,f,o,r),x=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,y,I,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,r,b,g,s,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,y,I,T,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,r,b,g,s,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(p,f).publicKey:void 0);return{signers:d,instructions:[x],instructionTypes:[z.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:P,tickArrayUpper:h,positionNftAccount:I,metadataAccount:T,personalPosition:k,protocolPosition:S}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new H(e.programId),new H(e.id)],y;if(l)y=new H((await l(1))[0]);else{let K=us.generate();d.push(K),y=K.publicKey}let b=ee.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=ee.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:P}=Ie(p,f,b),{publicKey:h}=Ie(p,f,g),{publicKey:I}=m?J(n.wallet,y,$e):J(n.wallet,y,Fe),{publicKey:T}=_n(y),{publicKey:k}=Et(p,y),{publicKey:S}=wn(p,f,o,r),x=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,y,I,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,r,b,g,u,s,a,c,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,y,I,T,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,r,b,g,u,s,a,c,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(p,f).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:P,tickArrayUpper:h,positionNftAccount:I,metadataAccount:T,personalPosition:k,protocolPosition:S},instructions:[x],signers:d,instructionTypes:[z.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I,T,k,S,x,K,B){let C=E([ze("tickLowerIndex"),ze("tickUpperIndex"),ze("tickArrayLowerStartIndex"),ze("tickArrayUpperStartIndex"),re("liquidity"),A("amountMaxA"),A("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),L=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:Hi,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...L],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:h,tickArrayLowerStartIndex:I,tickArrayUpperStartIndex:T,liquidity:new lu(0),amountMaxA:S==="MintA"?x:K,amountMaxB:S==="MintA"?K:x,withMetadata:k==="create",baseFlag:S==="MintA",optionBaseFlag:1},O);let R=Buffer.from([...on.openPosition,...O]);return new Tt({keys:N,programId:e,data:R})}static openPositionFromBaseInstruction22(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I,T,k,S,x,K){let B=E([ze("tickLowerIndex"),ze("tickUpperIndex"),ze("tickArrayLowerStartIndex"),ze("tickArrayUpperStartIndex"),re("liquidity"),A("amountMaxA"),A("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],L=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:Hi,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(B.span);B.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:new lu(0),amountMaxA:k==="MintA"?S:x,amountMaxB:k==="MintA"?x:S,withMetadata:T==="create",baseFlag:k==="MintA",optionBaseFlag:1},N);let O=Buffer.from([...on.openPositionWithTokenEx,...N]);return new Tt({keys:L,programId:e,data:O})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d,p=[];if(l)d=new H((await l(1))[0]);else{let K=us.generate();p.push(K),d=K.publicKey}let[f,y]=[new H(e.programId),new H(e.id)],b=ee.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=ee.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:P}=Ie(f,y,b),{publicKey:h}=Ie(f,y,g),{publicKey:I}=m?J(n.wallet,d,$e):J(n.wallet,d,Fe),{publicKey:T}=_n(d),{publicKey:k}=Et(f,d),{publicKey:S}=wn(f,y,o,r),x=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,y,n.wallet,d,I,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,r,b,g,s,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(f,y).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,y,n.wallet,d,I,T,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,r,b,g,s,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(f,y).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:P,tickArrayUpper:h,positionNftAccount:I,metadataAccount:T,personalPosition:k,protocolPosition:S},instructions:[x],signers:p,instructionTypes:[z.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,r,s){let a=E([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:s?$e:Fe,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...on.closePosition,...u]);return new Tt({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:r}){let s=new H(e.programId),a=r?J(n.wallet,o.nftMint,$e).publicKey:J(n.wallet,o.nftMint,Fe).publicKey,{publicKey:c}=Et(s,o.nftMint),u=[];return u.push(this.closePositionInstruction(s,n.wallet,o.nftMint,a,c,r)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[z.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P){let h=E([re("liquidity"),A("amountMaxA"),A("amountMaxB"),D("optionBaseFlag"),Ye("baseFlag")]),I=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...I],k=Buffer.alloc(h.span);h.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},k);let S=Buffer.from([...on.increaseLiquidity,...k]);return new Tt({keys:T,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:r,amountMaxA:s,amountMaxB:a,nft2022:c}){let[u,l]=[new H(e.programId),new H(e.id)],m=ee.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=ee.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ie(u,l,m),{publicKey:f}=Ie(u,l,d),{publicKey:y}=c?J(o.wallet,n.nftMint,$e):J(o.wallet,n.nftMint,Fe),{publicKey:b}=Et(u,n.nftMint),{publicKey:g}=wn(u,l,n.tickLower,n.tickUpper),P=this.increasePositionFromLiquidityInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),r,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},signers:[],instructions:[P],instructionTypes:[z.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:r,baseAmount:s,otherAmountMax:a,nft2022:c}){let[u,l]=[new H(e.programId),new H(e.id)],m=ee.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=ee.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ie(u,l,m),{publicKey:f}=Ie(u,l,d),{publicKey:y}=c?J(o.wallet,n.nftMint,$e):J(o.wallet,n.nftMint,Fe),{publicKey:b}=Et(u,n.nftMint),{publicKey:g}=wn(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),r,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(u,l).publicKey:void 0)],signers:[],instructionTypes:[z.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P){let h=E([re("liquidity"),A("amountMaxA"),A("amountMaxB"),D("optionBaseFlag"),Ye("baseFlag")]),I=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...I],k=Buffer.alloc(h.span);h.encode({liquidity:new lu(0),amountMaxA:y==="MintA"?b:g,amountMaxB:y==="MintA"?g:b,baseFlag:y==="MintA",optionBaseFlag:1},k);let S=Buffer.from([...on.increaseLiquidity,...k]);return new Tt({keys:T,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([re("liquidity"),A("amountMinA"),A("amountMinB")]),T=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...y.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,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:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:Nr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],S=Buffer.alloc(I.span);I.encode({liquidity:b,amountMinA:g,amountMinB:P},S);let x=Buffer.from([...on.decreaseLiquidity,...S]);return new Tt({keys:k,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:r,amountMinA:s,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new H(e.programId),new H(e.id)],d=ee.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=ee.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=Ie(l,m,d),{publicKey:y}=Ie(l,m,p),{publicKey:b}=u?J(o.wallet,n.nftMint,$e):J(o.wallet,n.nftMint,c),{publicKey:g}=Et(l,n.nftMint),{publicKey:P}=wn(l,m,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new H(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new H(e.rewardDefaultInfos[k].mint.address)});let I=[],T=this.decreaseLiquidityInstruction(l,o.wallet,b,g,m,P,f,y,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),h,r,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?ot(l,m).publicKey:void 0);return I.push(T),{address:{tickArrayLower:f,tickArrayUpper:y,positionNftAccount:b,personalPosition:g,protocolPosition:P},signers:[],instructions:I,instructionTypes:[z.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g){let P=E([A("amount"),A("otherAmountThreshold"),re("sqrtPriceLimitX64"),Ye("isBaseInput")]),h=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,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:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:Nr,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(P.span);P.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},T);let k=Buffer.from([...on.swap,...T]);return new Tt({keys:I,programId:e,data:k})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:r,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new H(e.programId),new H(e.id)],[d,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintA.address===r.toString(),g=[this.swapInstruction(l,o.wallet,m,new H(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?f:y,b?y:f,u,n,s,a,c,!0,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[z.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:r,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new H(e.programId),new H(e.id)],[d,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintA.address===r.toBase58(),g=[this.swapInstruction(l,o.wallet,m,new H(e.config.id),b?o.tokenAccountB:o.tokenAccountA,b?o.tokenAccountA:o.tokenAccountB,b?p:d,b?d:p,b?y:f,b?f:y,u,n,s,a,c,!1,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[z.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,r,s,a,c,u,l,m,d){let p=E([A("openTime"),A("endTime"),re("emissionsPerSecondX64")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:te(l),endTime:te(m),emissionsPerSecondX64:d},y);let b=Buffer.from([...on.initReward,...y]);return new Tt({keys:f,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[r,s]=[new H(e.programId),new H(e.id)],a=jl(r,s,o.mint).publicKey,c=Gi(r).publicKey,u=[this.initRewardInstruction(r,n.wallet,s,c,new H(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[z.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,r,s,a,c,u,l,m,d){let p=E([D("rewardIndex"),re("emissionsPerSecondX64"),A("openTime"),A("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],y=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:te(l),endTime:te(m)},y);let b=Buffer.from([...on.setRewardEmissions,...y]);return new Tt({keys:f,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[r,s]=[new H(e.programId),new H(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new H(t.rewardInfos[d].vault),u=new H(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&sm.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Gi(r).publicKey,m=[this.setRewardInstruction(r,n.wallet,s,l,new H(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[z.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,r,s,a){let c=E([D("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:Nr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...on.collectReward,...l]);return new Tt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[r,s]=[new H(e.programId),new H(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new H(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&sm.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(r,n.wallet,s,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[z.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:r,nftMint:s,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new H((await c(1))[0]);else{let g=us.generate();u.push(g),l=g.publicKey}let m=a?J(r,s,$e).publicKey:J(r,s,Fe).publicKey,{publicKey:d}=Et(n,s),p=Jo(e,l).publicKey,f=J(r,l,Fe).publicKey,y=_n(l).publicKey,b=Ke.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:r,lockOwner:r,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:s,authPositionNftAccount:J(t,s,a?$e:Fe).publicKey,positionNftProgram:a?$e:Fe});return{address:{positionId:d,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:m,metadataAccount:y},instructions:[b],signers:u,instructionTypes:[z.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:r,positionNftAccount:s,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:l,lockPositionId:m,lockNftMint:d,lockNftAccount:p,metadataAccount:f,withMetadata:y}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:r,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:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:Hi,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1}],g=E([Ye("withMetadata")]),P=Buffer.alloc(g.span);g.encode({withMetadata:y},P);let h=Buffer.from([...am,...P]);return new Tt({keys:b,programId:e,data:h})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:r}){let{publicKey:s}=J(o,r,Fe),{publicKey:a}=Et(n,r),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:ru(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1}];return new Tt({keys:c,programId:e,data:Buffer.from(am)})}static harvestLockPositionInstruction(e){let[t,n]=[new H(e.poolKeys.programId),new H(e.poolKeys.id)],o=ee.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),r=ee.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=Ie(t,n,o),{publicKey:a}=Ie(t,n,r),{publicKey:c}=J(e.owner,e.ownerPosition.nftMint,Fe),{publicKey:u}=Et(t,e.ownerPosition.nftMint),{publicKey:l}=wn(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new H(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new H(e.poolKeys.rewardInfos[f].mint.address)});let d=[...m.map(f=>[{pubkey:f.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:ru(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new H(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new H(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new Tt({keys:p,programId:e.programId,data:Buffer.from(um)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:r,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:f,tickArrayUpper:y,userVaultA:b,userVaultB:g,mintA:P,mintB:h,rewardAccounts:I,exTickArrayBitmap:T}){let k=[...T?[{pubkey:T,isSigner:!1,isWritable:!0}]:[],...I.map(x=>[{pubkey:x.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.rewardMint,isSigner:!1,isWritable:!1}]).flat()],S=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},{pubkey:h,isSigner:!1,isWritable:!1},...k];return new Tt({keys:S,programId:e,data:Buffer.from(um)})}};var cm=E([kt("mintAuthorityOption"),F("mintAuthority"),A("supply"),D("decimals"),D("isInitialized"),kt("freezeAuthorityOption"),F("freezeAuthority")]);import{PublicKey as zy}from"@solana/web3.js";import{MintLayout as lm,TOKEN_PROGRAM_ID as Yy}from"@solana/spl-token";var xx=async({connection:i,mint:e})=>{let t=await i.getAccountInfo(new zy(e));return!t||t.data.length!==lm.span?void 0:lm.decode(t.data)},Sx=({mint:i,decimals:e,programId:t=Yy,logoURI:n="",priority:o=3})=>{let r=i.toBase58().substring(0,6);return{address:i.toBase58(),decimals:e,symbol:r,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:r,tags:[],priority:o}},cs=i=>new Oe({mint:i.address,decimals:i.decimals,symbol:i.symbol,name:i.name}),Qi=o=>{var r=o,{amount:i,isRaw:e,name:t}=r,n=Qe(r,["amount","isRaw","name"]);return new Ce(new Oe({mint:It(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),i,e,t)};function Kx(i){return i.address===Tn.address?yt:i}function Cx(i){return i.address===yt.address?Tn:i}var Kt=o=>{var r=o,{address:i,programId:e,decimals:t}=r,n=Qe(r,["address","programId","decimals"]);return _({chainId:101,address:It(i).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},ao=i=>i?U(_({},i),{transferFeeConfigAuthority:i.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:i.withdrawWithheldAuthority.toBase58(),withheldAmount:i.withheldAmount.toString(),olderTransferFee:U(_({},i.olderTransferFee),{epoch:i.olderTransferFee.epoch.toString(),maximumFee:i.olderTransferFee.maximumFee.toString()}),newerTransferFee:U(_({},i.newerTransferFee),{epoch:i.newerTransferFee.epoch.toString(),maximumFee:i.newerTransferFee.maximumFee.toString()})}):void 0;import mm from"bn.js";var mu=new mm(25),ls=new mm(1e4),Hy={4:3,5:3};import{PublicKey as Ee,SystemProgram as fm,SYSVAR_RENT_PUBKEY as jy,TransactionInstruction as Dn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Zy,TOKEN_PROGRAM_ID as ti}from"@solana/spl-token";var du=E([D("instruction"),A("amountIn"),A("minAmountOut")]),pu=E([D("instruction"),A("maxAmountIn"),A("amountOut")]),Dx=E([D("instruction"),D("nonce")]),fu=E([D("instruction"),D("nonce"),A("startTime")]),Ko=E([A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalValue"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),re("swapBaseInAmount"),re("swapQuoteOutAmount"),A("swapBase2QuoteFee"),re("swapQuoteInAmount"),re("swapBaseOutAmount"),A("swapQuote2BaseFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("withdrawQueue"),F("lpVault"),F("owner"),A("lpReserve"),j(A(),3,"padding")]),Qy=E([A("accountType"),A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalsValue"),A("abortTradeFactor"),A("priceTickMultiplier"),A("priceTick"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),re("swapBaseInAmount"),re("swapQuoteOutAmount"),re("swapQuoteInAmount"),re("swapBaseOutAmount"),A("swapQuote2BaseFee"),A("swapBase2QuoteFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("modelDataAccount"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("owner"),j(A(),64,"padding")]),yu=E([D("instruction"),A("baseAmountIn"),A("quoteAmountIn"),A("fixedSide"),A("otherAmountMin")]),bu=E([D("instruction"),A("lpAmount"),A("baseAmountMin"),A("quoteAmountMin")]),Wx={4:Ko,5:Qy},dm=E([A("fee")]);var pm=ke("Raydium_liquidity_instruction");function ym(i){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:r,fixedSide:s,otherAmountMin:a,modelDataPubKey:c=eo}=i,u=Buffer.alloc(yu.span);yu.encode({instruction:3,baseAmountIn:te(o),quoteAmountIn:te(r),otherAmountMin:te(a),fixedSide:s==="base"?at:Fc},u);let l=[w({pubkey:ti,isWritable:!1}),w({pubkey:new Ee(e.id)}),w({pubkey:new Ee(t.authority),isWritable:!1}),w({pubkey:new Ee(t.openOrders),isWritable:!1}),w({pubkey:new Ee(t.targetOrders)}),w({pubkey:new Ee(e.lpMint.address)}),w({pubkey:new Ee(t.vault.A)}),w({pubkey:new Ee(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(w({pubkey:c})),l.push(w({pubkey:new Ee(e.marketId),isWritable:!1}),w({pubkey:n.baseTokenAccount}),w({pubkey:n.quoteTokenAccount}),w({pubkey:n.lpTokenAccount}),w({pubkey:n.owner,isWritable:!1,isSigner:!0}),w({pubkey:new Ee(t.marketEventQueue),isWritable:!1})),new Dn({programId:new Ee(e.programId),keys:l,data:u})}function gu(i){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:r,quoteAmountMin:s,modelDataPubKey:a=eo}=i,c=Ge(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(bu.span);bu.encode({instruction:4,lpAmount:te(o),baseAmountMin:te(r),quoteAmountMin:te(s)},l);let m=[w({pubkey:ti,isWritable:!1}),w({pubkey:c.id}),w({pubkey:c.authority,isWritable:!1}),w({pubkey:c.openOrders}),w({pubkey:c.targetOrders}),w({pubkey:c.mintLp.address}),w({pubkey:c.vault.A}),w({pubkey:c.vault.B})];return u===5?m.push(w({pubkey:a})):(m.push(w({pubkey:c.id})),m.push(w({pubkey:c.id}))),m.push(w({pubkey:c.marketProgramId,isWritable:!1}),w({pubkey:c.marketId}),w({pubkey:c.marketBaseVault}),w({pubkey:c.marketQuoteVault}),w({pubkey:c.marketAuthority,isWritable:!1}),w({pubkey:n.lpTokenAccount}),w({pubkey:n.baseTokenAccount}),w({pubkey:n.quoteTokenAccount}),w({pubkey:n.owner,isWritable:!1,isSigner:!0}),w({pubkey:c.marketEventQueue}),w({pubkey:c.marketBids}),w({pubkey:c.marketAsks})),new Dn({programId:c.programId,keys:m,data:l})}return new Dn({programId:c.programId,keys:[]})}function Pu({programId:i,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:r,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:f,userCoinVault:y,userPcVault:b,userLpVault:g,nonce:P,openTime:h,coinAmount:I,pcAmount:T,ammConfigId:k,feeDestinationId:S}){let x=E([D("instruction"),D("nonce"),A("openTime"),A("pcAmount"),A("coinAmount")]),K=[{pubkey:ti,isSigner:!1,isWritable:!1},{pubkey:Zy,isSigner:!1,isWritable:!1},{pubkey:fm.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,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:k,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],B=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:P,openTime:h,coinAmount:I,pcAmount:T},B),{instruction:new Dn({keys:K,programId:i,data:B}),instructionType:z.AmmV4CreatePool}}function $x(i){let e=E([D("instruction"),D("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[w({pubkey:new Ee(i.id),isWritable:!1}),w({pubkey:new Ee(i.authority),isWritable:!1}),w({pubkey:new Ee(i.openOrders),isWritable:!1}),w({pubkey:new Ee(i.vault.A),isWritable:!1}),w({pubkey:new Ee(i.vault.B),isWritable:!1}),w({pubkey:new Ee(i.mintLp.address),isWritable:!1}),w({pubkey:new Ee(i.marketId),isWritable:!1}),w({pubkey:new Ee(i.marketEventQueue),isWritable:!1})];return new Dn({programId:new Ee(i.programId),keys:n,data:t})}function $y({poolKeys:i,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=eo},r){let s=Ge(i),a=Buffer.alloc(du.span);du.encode({instruction:9,amountIn:te(t),minAmountOut:te(n)},a);let c=[w({pubkey:ti,isWritable:!1}),w({pubkey:s.id}),w({pubkey:s.authority,isWritable:!1}),w({pubkey:s.openOrders})];return r===4&&c.push(w({pubkey:s.targetOrders})),c.push(w({pubkey:s.vault.A}),w({pubkey:s.vault.B})),r===5&&c.push(w({pubkey:o})),c.push(w({pubkey:s.marketProgramId,isWritable:!1}),w({pubkey:s.marketId}),w({pubkey:s.marketBids}),w({pubkey:s.marketAsks}),w({pubkey:s.marketEventQueue}),w({pubkey:s.marketBaseVault}),w({pubkey:s.marketQuoteVault}),w({pubkey:s.marketAuthority,isWritable:!1}),w({pubkey:e.tokenAccountIn}),w({pubkey:e.tokenAccountOut}),w({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Dn({programId:s.programId,keys:c,data:a})}function Jy({poolKeys:i,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=eo},r){let s=Ge(i),a=Buffer.alloc(pu.span);pu.encode({instruction:11,maxAmountIn:te(t),amountOut:te(n)},a);let c=[w({pubkey:ti,isWritable:!1}),w({pubkey:s.id}),w({pubkey:s.authority,isWritable:!1}),w({pubkey:s.openOrders}),w({pubkey:s.targetOrders}),w({pubkey:s.vault.A}),w({pubkey:s.vault.B})];return r===5&&c.push(w({pubkey:o})),c.push(w({pubkey:s.marketProgramId,isWritable:!1}),w({pubkey:s.marketId}),w({pubkey:s.marketBids}),w({pubkey:s.marketAsks}),w({pubkey:s.marketEventQueue}),w({pubkey:s.marketBaseVault}),w({pubkey:s.marketQuoteVault}),w({pubkey:s.marketAuthority,isWritable:!1}),w({pubkey:e.tokenAccountIn}),w({pubkey:e.tokenAccountOut}),w({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Dn({programId:s.programId,keys:c,data:a})}function ms(i){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:r,fixedSide:s}=i;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return $y(U(_({},a),{amountIn:o,minAmountOut:r}),t);if(s==="out")return Jy(U(_({},a),{maxAmountIn:o,amountOut:r}),t);pm.logWithError("invalid params","params",i)}throw pm.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function Jx({poolKeys:i,userKeys:e,startTime:t}){let n=Buffer.alloc(fu.span);fu.encode({instruction:0,nonce:5,startTime:te(t)},n);let o=Ge(i),r=[w({pubkey:ti,isWritable:!1}),w({pubkey:fm.programId,isWritable:!1}),w({pubkey:jy,isWritable:!1}),w({pubkey:o.id}),w({pubkey:o.authority,isWritable:!1}),w({pubkey:o.openOrders}),w({pubkey:o.mintLp.address}),w({pubkey:o.mintA.address,isWritable:!1}),w({pubkey:o.mintB.address,isWritable:!1}),w({pubkey:o.vault.A,isWritable:!1}),w({pubkey:o.vault.B,isWritable:!1}),w({pubkey:o.id}),w({pubkey:o.targetOrders}),w({pubkey:e.lpTokenAccount}),w({pubkey:o.id,isWritable:!1}),w({pubkey:o.marketProgramId,isWritable:!1}),w({pubkey:o.marketId,isWritable:!1}),w({pubkey:e.payer,isSigner:!0})];return new Dn({programId:o.programId,keys:r,data:n})}function bm({poolKeys:i}){let e=E([D("instruction"),D("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[w({pubkey:new Ee(i.id),isWritable:!1}),w({pubkey:new Ee(i.authority),isWritable:!1}),w({pubkey:new Ee(i.openOrders),isWritable:!1}),w({pubkey:new Ee(i.vault.A),isWritable:!1}),w({pubkey:new Ee(i.vault.B),isWritable:!1}),w({pubkey:new Ee(i.mintLp.address),isWritable:!1}),w({pubkey:new Ee(i.marketId),isWritable:!1}),w({pubkey:new Ee(i.marketEventQueue),isWritable:!1})];return{instruction:new Dn({programId:new Ee(i.programId),keys:n,data:t})}}var Ro=5e4,eb=E([A("x"),A("y"),A("price")]),tb=E([A("accountType"),A("status"),A("multiplier"),A("validDataCount"),j(eb,Ro,"DataElement")]);function nb(i,e){return[0,Ro-2]}function ob(i){return[0,Ro-2]}function ib(i){return[0,Ro-2]}function rb(i,e,t){let[n,o]=nb(e,t),r=n,s=o,a=0,c=e*i.multiplier/t;for(;r<=s;){if(a=Math.floor((s+r)/2),a===0||a>=Ro-2)return[a,a,!1];let u=i.DataElement[a].x*i.multiplier/i.DataElement[a].y,l=i.DataElement[a-1].x*i.multiplier/i.DataElement[a-1].y,m=i.DataElement[a+1].x*i.multiplier/i.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];r=a+1}}return[a,a,!1]}function Au(i,e,t){let[n,o,r]=rb(i,e,t);if(!r)return 0;if(n===o){let s=i.DataElement[n].x;return e*i.multiplier/s}else{let s=i.DataElement[n].x,a=i.DataElement[n].y,c=i.DataElement[o].x,u=i.DataElement[o].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*i.multiplier*l/p}}function Co(i,e,t){return e*i.multiplier/t}function gm(i,e,t){return e*t/i.multiplier}function sb(i,e){let[t,n]=ob(e),o=t,r=n,s=0,a=e;for(;o<r;){if(s=Math.floor((r+o)/2),s<=0||s>Ro-2)return[s,s,!1];let c=i.DataElement[s].x,u=i.DataElement[s-1].x,l=i.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)r=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];o=s+1}}return[s,s,!1]}function ab(i,e){let[t,n]=ib(e),o=t,r=n,s=0,a=e;for(;o<=r;){if(s=Math.floor((r+o)/2),s<=0||s>=Ro-2)return[s,s,!1];let c=i.DataElement[s].y,u=i.DataElement[s-1].y,l=i.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)o=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];r=s-1}}return[s,s,!1]}function Pm(i,e,t,n){let o=n?e+t:e-t,[r,s,a]=sb(i,o);if(!a)return[0,0,!1,a];if(r===s)return[i.DataElement[s].price,i.DataElement[s].y,!1,a];{let c=i.DataElement[r].x,u=i.DataElement[s].x,l=i.DataElement[r].price,m=i.DataElement[s].price,d=i.DataElement[r].y,p=i.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let f,y;return n?(f=l+(m-l)*(e-c)/(u-c),y=d-(o-c)*i.multiplier/m):(f=l+(m-l)*(e-c)/(u-c),y=p+(u-o)*i.multiplier/l),[f,y,!1,a]}}}function ub(i,e,t,n){let o=n?e-t:e+t,[r,s,a]=ab(i,o);if(!a)return[0,0,!1,a];if(r===s)return[i.DataElement[s].price,i.DataElement[s].x,!1,a];{let c=i.DataElement[r].x,u=i.DataElement[s].x,l=i.DataElement[r].price,m=i.DataElement[s].price,d=i.DataElement[r].y,p=i.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let f,y;return n?(f=l+(m-l)*(d-e)/(d-p),y=c+m*(d-o)/i.multiplier):(f=l+(m-l)*(d-e)/(d-p),y=u-l*(o-p)/i.multiplier),[f,y,!1,a]}}}function cb(i,e){let t=Pm(i,e,0,!1);return t[3]?t[0]:0}function Am(i,e,t,n){let o=Au(i,e,t),r=Co(i,e,o),s=Co(i,t,o),a=Co(i,n,o),c=!0,[u,l,m,d]=Pm(i,r,a,c);if(!d)return 0;if(m)return n*i.multiplier/u;{let p=s-l;return gm(i,p,o)}}function wm(i,e,t,n){let o=Au(i,e,t),r=Co(i,e,o),s=Co(i,t,o),a=Co(i,n,o),c=!1,[u,l,m,d]=ub(i,s,a,c);if(!d)return 0;if(m)return n*u/i.multiplier;{let p=r-l;return gm(i,p,o)}}function lb(i){let e=tb.decode(i);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 km(i,e,t,n){let o=cb(i,Co(i,e,Au(i,e,t)))/i.multiplier;return n?o:1/o}var ni=class{constructor({connection:e,modelDataPubKey:t=eo}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e,this.modelDataPubKey=t}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(this.modelDataPubKey);e&&(this._layoutData=lb(e==null?void 0:e.data))}}};import{PublicKey as Zi}from"@solana/web3.js";import ji from"bn.js";import{TOKEN_PROGRAM_ID as pb}from"@solana/spl-token";import{PublicKey as mb}from"@solana/web3.js";var db=ke("Raydium_liquidity_serum");function hm({programId:i,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let r=t.concat(Buffer.from([n]),Buffer.alloc(7));o=mb.createProgramAddressSync(r,i)}catch(r){if(r instanceof TypeError)throw r;n++;continue}return{publicKey:o,nonce:n}}throw db.logWithError("unable to find a viable program address nonce","params",{programId:i,marketId:e}),new Error("unable to find a viable program address nonce")}function ds({programId:i}){let{publicKey:e}=ie([Buffer.from("amm_config_account_seed","utf-8")],i);return e}function Lo({name:i,programId:e,marketId:t}){let{publicKey:n}=ie([e.toBuffer(),t.toBuffer(),Buffer.from(i,"utf-8")],e);return n}function fb({programId:i,marketId:e}){let{publicKey:t}=ie([i.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],i);return t}function hu({programId:i}){return ie([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],i)}function Tu({version:i,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:r,quoteDecimals:s,programId:a,marketProgramId:c}){let u=Lo({name:"amm_associated_seed",programId:a,marketId:t}),l=Lo({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=hu({programId:a}),p=Lo({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=Lo({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=Lo({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=fb({programId:a,marketId:t}),g=Lo({name:"target_associated_seed",programId:a,marketId:t}),P=Lo({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:h}=hm({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:r,quoteDecimals:s,lpDecimals:r,version:i,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:f,lpVault:y,openOrders:b,targetOrders:g,withdrawQueue:P,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:h,lookupTableAccount:Zi.default,configId:ds({programId:a})}}var wu;async function xS({connection:i,poolKeysList:e,config:t,modelDataPubKey:n}){return e.find(r=>r.modelDataAccount)&&(wu||(wu=new ni({connection:i,modelDataPubKey:n}),await wu.initStableModelLayout())),await Promise.all(e.map(async r=>{if(r.modelDataAccount){let s=bm({poolKeys:r});return(await zc(i,[s.instruction],"GetPoolData")).map(u=>{let l=Yc(u,"GetPoolData"),m=new ji(Nn(l,"status")),d=Number(Nn(l,"coin_decimals")),p=Number(Nn(l,"pc_decimals")),f=Number(Nn(l,"lp_decimals")),y=new ji(Nn(l,"pool_coin_amount")),b=new ji(Nn(l,"pool_pc_amount")),g=new ji(Nn(l,"pool_lp_supply")),P="0";try{P=Nn(l,"pool_open_time")}catch{}return{status:m,baseDecimals:d,quoteDecimals:p,lpDecimals:f,baseReserve:y,quoteReserve:b,lpSupply:g,startTime:new ji(P)}})[0]}else{let[s,a,c,u]=await i.getMultipleAccountsInfo([new Zi(r.id),new Zi(r.vault.A),new Zi(r.vault.B),new Zi(r.mintLp.address)]);if(s===null)throw Error("fetch pool error");if(a===null)throw Error("fetch vaultAccA error");if(c===null)throw Error("fetch vaultAccB error");if(u===null)throw Error("fetch mintAccLp error");let l=Ko.decode(s.data),m=An.decode(a.data),d=An.decode(c.data),p=cm.decode(u.data);return{status:l.status,baseDecimals:l.baseDecimal.toNumber(),quoteDecimals:l.quoteDecimal.toNumber(),lpDecimals:p.decimals,baseReserve:m.amount.sub(l.baseNeedTakePnl),quoteReserve:d.amount.sub(l.quoteNeedTakePnl),lpSupply:l.lpReserve,startTime:l.poolOpenTime}}}))}var ku={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},ps=i=>{let e={},t=pb.toBase58();return Object.keys(i).map(n=>{let o=i[n],[r,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:Kt({address:r,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:Kt({address:s,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new M(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new M(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new M(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:ku,week:ku,month:ku,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:ds({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new M(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:Kt({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0}}),e};import Je from"bn.js";import{PublicKey as $i}from"@solana/web3.js";import Ji from"bn.js";import{TOKEN_PROGRAM_ID as xm}from"@solana/spl-token";import{SystemProgram as No,SYSVAR_RENT_PUBKEY as bb,Transaction as Tm,TransactionInstruction as gb}from"@solana/web3.js";import{createInitializeAccountInstruction as Im,TOKEN_PROGRAM_ID as Bm}from"@solana/spl-token";function yb(i="accountFlags"){let e=new Jr(i);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Iu=E([Re(5),yb("accountFlags"),F("ownAddress"),A("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),F("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Re(7)]);function Pb({programId:i,marketInfo:e}){let t=E([D("version"),kt("instruction"),A("baseLotSize"),A("quoteLotSize"),en("feeRateBps"),A("vaultSignerNonce"),A("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:bb,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new gb({keys:n,programId:i,data:o})}async function fs({connection:i,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Tm,o=await i.getMinimumBalanceForRentExemption(165);n.add(No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:Bm}),No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:Bm}),Im(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Im(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await i.getMinimumBalanceForRentExemption(Iu.span),space:Iu.span,programId:t.programId}));let r=new Tm;return r.add(No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await i.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await i.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await i.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await i.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Pb({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[z.CreateAccount,z.CreateAccount,z.InitAccount,z.InitAccount]},{transaction:r,signer:[],instructionTypes:[z.CreateAccount,z.CreateAccount,z.CreateAccount,z.CreateAccount,z.CreateAccount,z.InitMarket]}]}var oi=class extends Xe{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:r,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:m,computeBudgetConfig:d,txTipConfig:p,feePayer:f}){let y=this.scope.ownerPubKey,b=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,g=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-market`}),P=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-request`}),h=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-event`}),I=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-bids`}),T=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-asks`}),k=nt({fromPublicKey:y,programId:xm,assignSeed:b&&`${b}-baseVault`}),S=nt({fromPublicKey:y,programId:xm,assignSeed:b&&`${b}-quoteVault`}),x=0,K=new Ji(100);function B(){let Y=new Ji(0);for(;;)try{return{vaultOwner:$i.createProgramAddressSync([g.publicKey.toBuffer(),Y.toArrayLike(Buffer,"le",8)],r),vaultSignerNonce:Y}}catch{if(Y.iaddn(1),Y.gt(new Ji(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:L}=B(),N=new Ji(Math.round(10**e.decimals*n)),O=new Ji(Math.round(n*10**t.decimals*o));if(N.eq(at))throw Error("lot size is too small");if(O.eq(at))throw Error("tick size or lot size is too small");let R=await fs({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:r,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:k,quoteVault:S,vaultOwner:C,requestQueue:P,eventQueue:h,bids:I,asks:T,feeRateBps:x,quoteDustThreshold:K,vaultSignerNonce:L,baseLotSize:N,quoteLotSize:O,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),v=this.createTxBuilder(f);v.addInstruction({instructions:R[0].transaction.instructions,signers:R[0].signer});for await(let Y of R.slice(1,R.length))v.addInstruction({instructions:Y.transaction.instructions,signers:Y.signer,instructionTypes:Y.instructionTypes});return m===0?v.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:h.publicKey,bids:I.publicKey,asks:T.publicKey,baseVault:k.publicKey,quoteVault:S.publicKey,baseMint:new $i(e.mint),quoteMint:new $i(t.mint)}}):v.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:h.publicKey,bids:I.publicKey,asks:T.publicKey,baseVault:k.publicKey,quoteVault:S.publicKey,baseMint:new $i(e.mint),quoteMint:new $i(t.mint)}})}};var er=class extends Xe{constructor(t){super(t);this.stableLayout=new ni({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:On.MODEL_DATA_PUBKEY})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:r}){let s=new Je(new M(n).mul(10**t[r?"mintA":"mintB"].decimals).toFixed(0)),a=cs(t[r?"mintB":"mintA"]),[c,u]=[new Je(new M(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Je(new M(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Je(new M(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",r?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",r?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=r?"base":"quote";this.logDebug("input side:",m);let d=at;s.isZero()||(d=m==="base"?vr(s.mul(u),c):vr(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=vr(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new et(new Je(1)).add(o),y=new et(new Je(1)).sub(o),b=f.mul(d).quotient,g=y.mul(d).quotient,P=new Ce(a,d),h=new Ce(a,b),I=new Ce(a,g);return this.logDebug("anotherAmount:",P.toFixed(),"maxAnotherAmount:",h.toFixed()),{anotherAmount:P,maxAnotherAmount:h,minAnotherAmount:I,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:r,amountInB:s,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",s),(r.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:s.toFixed()});let{account:f}=this.scope,{bypassAssociatedCheck:y,checkCreateATAOwner:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,P]=[r.token,s.token],h=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),I=await f.getCreatedTokenAccount({mint:P.mint,associatedOnly:!1});!h&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let T=await f.getCreatedTokenAccount({mint:new ut(n.lpMint.address)}),k=[g,P],S=[h,I],x=[r.raw,s.raw],K=r.token.mint.toBase58()===n.mintA.address?"base":"quote",B="base";["quote","base"].includes(K)||this.logAndCreateError("invalid fixedSide","fixedSide",c),K==="quote"?(k.reverse(),S.reverse(),x.reverse(),B=c==="a"?"quote":"base"):K==="base"&&(B=c==="a"?"base":"quote");let[C,L]=k,[N,O]=S,[R,v]=x,Y=o!=null?o:await this.getAmmPoolKeys(n.id),Q=this.createTxBuilder(p),ne=await f.handleTokenAccount({side:"in",amount:R,mint:C.mint,tokenAccount:N,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:de}=ne,ce=Qe(ne,["tokenAccount"]);Q.addInstruction(ce);let Le=await f.handleTokenAccount({side:"in",amount:v,mint:L.mint,tokenAccount:O,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:le}=Le,Ae=Qe(Le,["tokenAccount"]);Q.addInstruction(Ae);let _e=await f.handleTokenAccount({side:"out",amount:0,mint:new ut(n.lpMint.address),tokenAccount:T,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:fe}=_e,oe=Qe(_e,["tokenAccount"]);return Q.addInstruction(oe),Q.addInstruction({instructions:[ym({poolInfo:n,poolKeys:Y,userKeys:{baseTokenAccount:de,quoteTokenAccount:le,lpTokenAccount:fe,owner:this.scope.ownerPubKey},baseAmountIn:R,quoteAmountIn:v,otherAmountMin:a.raw,fixedSide:B})],instructionTypes:[n.pooltype.includes("StablePool")?z.AmmV5AddLiquidity:z.AmmV4AddLiquidity],lookupTableAddress:Y.lookupTableAccount?[Y.lookupTableAccount]:[]}),Q.addCustomComputeBudget(m),Q.addTipInstruction(d),l===0?await Q.buildV0():Q.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,lpAmount:r,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=t,p=o!=null?o:await this.getAmmPoolKeys(n.id),[f,y,b]=[new ut(n.mintA.address),new ut(n.mintB.address),new ut(n.lpMint.address)];this.logDebug("lpAmount:",r),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),r.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",r.toString());let{account:g}=this.scope,P=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});P||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let h=await g.getCreatedTokenAccount({mint:f}),I=await g.getCreatedTokenAccount({mint:y}),T=this.createTxBuilder(d),{bypassAssociatedCheck:k,checkCreateATAOwner:S}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),L=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:h,bypassAssociatedCheck:k,checkCreateATAOwner:S}),{tokenAccount:x}=L,K=Qe(L,["tokenAccount"]);T.addInstruction(K);let N=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:I,bypassAssociatedCheck:k,checkCreateATAOwner:S}),{tokenAccount:B}=N,C=Qe(N,["tokenAccount"]);return T.addInstruction(C),T.addInstruction({instructions:[gu({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:P,baseTokenAccount:x,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:r,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?z.AmmV5RemoveLiquidity:z.AmmV4RemoveLiquidity]}),T.addCustomComputeBudget(l),T.addTipInstruction(m),u===0?await T.buildV0():T.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:r,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=uo,checkCreateATAOwner:p=!0,getEphemeralSigners:f,txVersion:y,feePayer:b}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let g=this.createTxBuilder(b),P={};for(let Y of this.scope.account.tokenAccountRawInfos)(P[Y.accountInfo.mint.toString()]===void 0||J(this.scope.ownerPubKey,Y.accountInfo.mint,uo).publicKey.equals(Y.pubkey))&&(P[Y.accountInfo.mint.toString()]=Y.pubkey);let h=P[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let I=o.add(a!=null?a:new Je(0)),T=t.mintA.address===Oe.WSOL.mint.toString(),k=t.mintB.address===Oe.WSOL.mint.toString(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:uo,mint:new ut(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(x||{}),S===void 0)throw new Error("base token account not found");let{account:K,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:uo,mint:new ut(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(B||{}),K===void 0)throw new Error("quote token account not found");if(P[t.mintA.address]=S,P[t.mintB.address]=K,s!==void 0&&!(a!=null&&a.isZero())){let Y=un[s.programId],Q=xt({programId:new ut(s.programId),poolId:new ut(s.id),owner:this.scope.ownerPubKey,version:Y}),de,ce=await this.scope.connection.getAccountInfo(Q);if(ce&&(de=Zo(Y).decode(ce.data)),Y!==6&&!de){let{instruction:_e,instructionType:he}=Fi({id:new ut(s.id),programId:new ut(s.programId),version:Y,ledger:Q,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[_e],instructionTypes:[he]})}let le=[];for(let _e of s.rewardInfos){let he=_e.mint.address===Oe.WSOL.mint.toString();if(P[_e.mint.address])le.push(P[_e.mint.address]);else{let{account:qt,instructionParams:Zt}=await this.scope.account.getOrCreateTokenAccount({mint:new ut(_e.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!he,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});qt||this.logAndCreateError("farm reward account not found:",_e.mint.address),Zt&&g.addInstruction(Zt),le.push(qt)}}let Ae=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],fe={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:Ae,lpAccount:h,rewardAccounts:le},oe=un[s.programId],ne=oe===6?_i(fe):oe===5?Ei(fe):Vi(fe),Le={3:z.FarmV3Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};g.addInstruction({instructions:[ne],instructionTypes:[Le[oe]]})}let C=await this.getAmmPoolKeys(t.id),L=gu({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:h,baseTokenAccount:S,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:I,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?z.AmmV5RemoveLiquidity:z.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[N,O]=t.mintA.address===n.mintA.address?[S,K]:[K,S],R=await this.scope.clmm.getClmmPoolKeys(n.id),v=await Ke.openPositionFromBaseInstructions(U(_({poolInfo:n,poolKeys:R,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:N,tokenAccountB:O},withMetadata:"create"},r),{base:c,getEphemeralSigners:f}));return g.addInstruction({instructions:[...v.instructions],signers:v.signers,instructionTypes:[...v.instructionTypes],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),y===0?g.sizeCheckBuildV0({computeBudgetConfig:u}):g.sizeCheckBuild({computeBudgetConfig:u})}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:r,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g}){var O;let P=u.feePayer||((O=this.scope.owner)==null?void 0:O.publicKey),h=u.useSOLBalance&&o.mint.equals(ys),I=u.useSOLBalance&&r.mint.equals(ys),T=this.createTxBuilder(g),{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:P,amount:s}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});T.addInstruction(S||{});let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:I?{payer:P,amount:a}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:l,checkCreateATAOwner:m});if(T.addInstruction(K||{}),k===void 0||x===void 0)throw Error("you don't has some token account");let B=Tu({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:r.mint,baseDecimals:o.decimals,quoteDecimals:r.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:B.id,ammAuthority:B.authority,ammOpenOrders:B.openOrders,lpMint:B.lpMint,coinMint:B.baseMint,pcMint:B.quoteMint,coinVault:B.baseVault,pcVault:B.quoteVault,withdrawQueue:B.withdrawQueue,ammTargetOrders:B.targetOrders,poolTempLp:B.lpVault,marketProgramId:B.marketProgramId,marketId:B.marketId,ammConfigId:B.configId,feeDestinationId:f},{instruction:L,instructionType:N}=Pu(U(_({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:x,userLpVault:J(this.scope.ownerPubKey,B.lpMint,d).publicKey,nonce:B.nonce,openTime:c,coinAmount:s,pcAmount:a}));return T.addInstruction({instructions:[L],instructionTypes:[N]}),T.addCustomComputeBudget(y),T.addTipInstruction(b),T.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=wi,marketProgram:n=ca,feeDestinationId:o=la,tokenProgram:r,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:y=!1,lotSize:b=1,tickSize:g=.01,txVersion:P,computeBudgetConfig:h,txTipConfig:I,feePayer:T}){var bo,vo,Fo;let k=this.scope.ownerPubKey,S=m.feePayer||((bo=this.scope.owner)==null?void 0:bo.publicKey),x=m.useSOLBalance&&s.mint.equals(ys),K=m.useSOLBalance&&a.mint.equals(ys),B=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=nt({fromPublicKey:k,programId:n,assignSeed:B&&`${B}-market`}),L=nt({fromPublicKey:k,programId:n,assignSeed:B&&`${B}-request`}),N=nt({fromPublicKey:k,programId:n,assignSeed:B&&`${B}-event`}),O=nt({fromPublicKey:k,programId:n,assignSeed:B&&`${B}-bids`}),R=nt({fromPublicKey:k,programId:n,assignSeed:B&&`${B}-asks`}),v=nt({fromPublicKey:k,programId:uo,assignSeed:B&&`${B}-baseVault`}),Y=nt({fromPublicKey:k,programId:uo,assignSeed:B&&`${B}-quoteVault`}),Q=0,de=new Je(100);function ce(){let Jt=new Je(0);for(;;)try{return{vaultOwner:ut.createProgramAddressSync([C.publicKey.toBuffer(),Jt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Jt}}catch{if(Jt.iaddn(1),Jt.gt(new Je(25555)))throw Error("find vault owner error")}}let{vaultOwner:le,vaultSignerNonce:Ae}=ce(),fe=new Je(Math.round(10**s.decimals*b)),oe=new Je(Math.round(b*10**a.decimals*g));if(fe.eq(at))throw Error("lot size is too small");if(oe.eq(at))throw Error("tick size or lot size is too small");let ne=await fs({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:le,baseMint:s.mint,quoteMint:a.mint,id:C,baseVault:v,quoteVault:Y,requestQueue:L,eventQueue:N,bids:O,asks:R,feeRateBps:Q,quoteDustThreshold:de,vaultSignerNonce:Ae,baseLotSize:fe,quoteLotSize:oe,lowestFeeMarket:d}}),Le=this.createTxBuilder(T);Le.addInstruction({instructions:ne[0].transaction.instructions,signers:ne[0].signer});for await(let Jt of ne.slice(1,ne.length))Le.addInstruction({instructions:Jt.transaction.instructions,signers:Jt.signer,instructionTypes:Jt.instructionTypes});let{account:_e,instructionParams:he}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:x?{payer:S,amount:c}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:f,checkCreateATAOwner:y,assignSeed:x&&B?`${B}-wsol`:void 0});Le.addInstruction(he||{});let{account:qt,instructionParams:Zt}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:K?{payer:S,amount:u}:void 0,notUseTokenAccount:K,skipCloseAccount:!K,associatedOnly:K?!1:f,checkCreateATAOwner:y,assignSeed:K&&B?`${B}-wsol`:void 0});if(Le.addInstruction(Zt||{}),_e===void 0)throw Error("you don't has base token account");if(qt===void 0)throw Error("you don't has quote token account");let it=Tu({version:4,marketVersion:3,marketId:C.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),$t={programId:t,ammId:it.id,ammAuthority:it.authority,ammOpenOrders:it.openOrders,lpMint:it.lpMint,coinMint:it.baseMint,pcMint:it.quoteMint,coinVault:it.baseVault,pcVault:it.quoteVault,withdrawQueue:it.withdrawQueue,ammTargetOrders:it.targetOrders,poolTempLp:it.lpVault,marketProgramId:it.marketProgramId,marketId:it.marketId,ammConfigId:it.configId,feeDestinationId:o},{instruction:vs,instructionType:Fs}=Pu(U(_({},$t),{userWallet:this.scope.ownerPubKey,userCoinVault:_e,userPcVault:qt,userLpVault:J(this.scope.ownerPubKey,it.lpMint,r).publicKey,nonce:it.nonce,openTime:l,coinAmount:c,pcAmount:u}));Le.addInstruction({instructions:[vs],instructionTypes:[Fs]});let Mo=x||K?[((vo=he==null?void 0:he.instructions)==null?void 0:vo[0])||((Fo=Zt==null?void 0:Zt.instructions)==null?void 0:Fo[0])].filter(Jt=>!!Jt):void 0;return P===0?Le.sizeCheckBuildV0({computeBudgetConfig:h,splitIns:Mo,address:_({requestQueue:L.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:Y.publicKey,baseMint:new ut(s.mint),quoteMint:new ut(a.mint)},$t)}):Le.sizeCheckBuild({computeBudgetConfig:h,splitIns:Mo,address:_({requestQueue:L.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:Y.publicKey,baseMint:new ut(s.mint),quoteMint:new ut(a.mint)},$t)})}async getCreatePoolFee({programId:t}){let n=ds({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return dm.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:r,slippage:s}){let[a,c]=[o.toString(),r.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[f,y]=m,[b,g]=d,P=t.version===4,h;if(P)h=new M(y.toString()).div(10**g).div(new M(f.toString()).div(10**b));else{let N=km(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?h=new M(1e6).div(N*1e6):h=new M(N*1e6).div(1e6)}let I=n,T=new Je(0),k=new Je(0);if(!I.isZero())if(P){k=bn(I.mul(mu),ls);let N=I.sub(k),O=f.add(N);T=y.mul(N).div(O)}else{k=I.mul(new Je(2)).div(new Je(1e4));let N=I.sub(k);p==="quote"?T=new Je(Am(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber())):T=new Je(wm(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber()))}let S=new Je(new M(T.toString()).mul(1-s).toFixed(0)),x=T,K=S,B=new M(T.toString()).div(new M(I.sub(k).toString()).toFixed(0));!I.isZero()&&!T.isZero()&&(B=new M(T.toString()).div(10**g).div(new M(I.sub(k).toString()).div(10**b)));let C=h.sub(B).div(h).mul(100);return{amountOut:x,minAmountOut:K,currentPrice:h,executionPrice:B,priceImpact:C,fee:k}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:r,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=o.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new M(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[f,y]=d,b=new M(y.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new M(f.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Je(0),P=n;if(!P.isZero()){P.gt(y)&&(P=y.sub(new Je(1)));let K=y.sub(P);g=f.mul(P).div(K).mul(ls).div(ls.sub(mu))}let h=new Je(new M(g.toString()).mul(1+s).toFixed(0)),I=g,T=h;this.logDebug("amountIn:",new M(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new M(T.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let k=null;!g.isZero()&&!P.isZero()&&(k=new M(P.toString()).div(10**m.decimals).div(new M(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${k.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(k).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(I.toString()),x=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:I,maxAmountIn:T,currentPrice:b,executionPrice:k,priceImpact:x}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:r,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){let p=this.createTxBuilder(d),{associatedOnly:f=!0,inputUseSolBalance:y=!0,outputUseSolBalance:b=!0}=u||{},[g,P]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],h=y&&g.address===$.toBase58(),I=b&&P.address===$.toBase58(),{account:T,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:uo,mint:new ut(g.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:f});p.addInstruction(k||{}),T||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:T,inputTokenUseSolBalance:h,associatedOnly:f});let{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:uo,mint:new ut(P.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:f});p.addInstruction(x||{}),S===void 0&&this.logAndCreateError("output token account not found",{token:P.symbol||P.address,tokenAccountOut:S,outputTokenUseSolBalance:I,associatedOnly:f});let K=n||await this.getAmmPoolKeys(t.id),B=4;return t.pooltype.includes("StablePool")&&(B=5),p.addInstruction({instructions:[ms({version:B,poolKeys:K,userKeys:{tokenAccountIn:T,tokenAccountOut:S,owner:this.scope.ownerPubKey},amountIn:o,amountOut:r,fixedSide:a})],instructionTypes:[B===4?z.AmmV4SwapBaseIn:z.AmmV5SwapBaseIn]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await We(this.scope.connection,t.map(l=>({pubkey:new ut(l)})),n),r={},s=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Ko.decode(m.accountInfo.data);r[String(t[l])]=U(_({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await We(this.scope.connection,s.map(l=>({pubkey:new ut(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 Je(Ab.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(r)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=U(_({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new M(p.toString()).div(new M(10).pow(m.quoteDecimal.toString())).div(new M(d.toString()).div(new M(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=ps({[t]:n}),r=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:r,poolKeys:s[0]}}};import{PublicKey as Z}from"@solana/web3.js";import Vt from"bn.js";import{AccountLayout as Sm,createAssociatedTokenAccountIdempotentInstruction as Km,TOKEN_2022_PROGRAM_ID as co,TOKEN_PROGRAM_ID as tr}from"@solana/spl-token";var nr=class extends Xe{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var S;let{programId:t,owner:n=((S=this.scope.owner)==null?void 0:S.publicKey)||Z.default,mint1:o,mint2:r,ammConfig:s,initialPrice:a,computeBudgetConfig:c,forerunCreate:u,getObserveState:l,txVersion:m,txTipConfig:d,feePayer:p}=e,f=this.createTxBuilder(p),[y,b,g]=new Vt(new Z(o.address).toBuffer()).gt(new Vt(new Z(r.address).toBuffer()))?[r,o,new M(1).div(a)]:[o,r,a],P=ue.priceToSqrtPriceX64(g,y.decimals,b.decimals),h=[],I=[];y.programId===co.toBase58()&&I.push(su(t,new Z(y.address)).publicKey),b.programId===co.toBase58()&&I.push(su(t,new Z(b.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(I)).forEach((x,K)=>{x&&h.push(I[K])});let k=await Ke.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:b,ammConfigId:s.id,initialPriceX64:P,forerunCreate:!l&&u,extendMintAccount:h});return f.addInstruction(k),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:U(_({},k.address),{observationId:k.address.observationId.toBase58(),exBitmapAccount:k.address.exBitmapAccount.toBase58(),programId:t.toString(),id:k.address.poolId.toString(),mintA:y,mintB:b,openTime:"0",vault:{A:k.address.mintAVault.toString(),B:k.address.mintBVault.toString()},rewardInfos:[],config:{id: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:_({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:k.address.poolId.toString(),mintA:y,mintB:b,feeRate:s.tradeFeeRate,openTime:"0",programId:t.toString(),price:g.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:[]},burnPercent:0},Xl),forerunCreate:u}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:d="create",getEphemeralSigners:p,computeBudgetConfig:f,txTipConfig:y,txVersion:b,feePayer:g}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let P=this.createTxBuilder(g),h=null,I=null,T=n.useSOLBalance&&e.mintA.address===$.toString(),k=n.useSOLBalance&&e.mintB.address===$.toString(),[S,x]=s==="MintA"?[a,c]:[c,a],{account:K,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:T||S.isZero()?{payer:this.scope.ownerPubKey,amount:S}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:l,checkCreateATAOwner:m});K&&(h=K),P.addInstruction(B||{});let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:l,checkCreateATAOwner:m});C&&(I=C),P.addInstruction(L||{}),(!h||!I)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:h==null?void 0:h.toBase58(),ownerTokenAccountB:I==null?void 0:I.toBase58()});let N=t||await this.getClmmPoolKeys(e.id),O=await Ke.openPositionFromBaseInstructions({poolInfo:e,poolKeys:N,ownerInfo:U(_({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:I}),tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return P.addInstruction(O),P.addCustomComputeBudget(f),P.addTipInstruction(y),P.versionBuild({txVersion:b,extInfo:_({},O.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:r,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,txTipConfig:f,getEphemeralSigners:y,nft2022:b,feePayer:g}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let P=this.createTxBuilder(g),h=null,I=null,T=n.useSOLBalance&&e.mintA.address===$.toBase58(),k=n.useSOLBalance&&e.mintB.address===$.toBase58(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:T||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:u,checkCreateATAOwner:l});S&&(h=S),P.addInstruction(x||{});let{account:K,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:u,checkCreateATAOwner:l});K&&(I=K),P.addInstruction(B||{}),(h===void 0||I===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),L=await Ke.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:I},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:r,withMetadata:m,getEphemeralSigners:y,nft2022:b});return P.addInstruction(L),P.addCustomComputeBudget(p),P.addTipInstruction(f),P.versionBuild({txVersion:d,extInfo:{address:L.address}})}async increasePositionFromLiquidity(e){var B;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:r,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e,y=this.createTxBuilder(f),b,g,P=c.useSOLBalance&&t.mintA.address===$.toString(),h=c.useSOLBalance&&t.mintB.address===$.toString(),{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Z(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:P||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!P,associatedOnly:P?!1:u,checkCreateATAOwner:l});I&&(b=I),y.addInstruction(T||{});let{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:u,checkCreateATAOwner:l});k&&(g=k),y.addInstruction(S||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=n!=null?n:await this.getClmmPoolKeys(t.id),K=Ke.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:x,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},liquidity:a,amountMaxA:r,amountMaxB:s,nft2022:(B=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:B.owner.equals(co)});return y.addInstruction(K),y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:K.address}})}async increasePositionFromBase(e){var K;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:r,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=this.createTxBuilder(p),y,b,g=a.useSOLBalance&&t.mintA.address===$.toString(),P=a.useSOLBalance&&t.mintB.address===$.toString(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Z(t.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:g||(o==="MintA"?r:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:s}:void 0,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});h&&(y=h),f.addInstruction(I||{});let{account:T,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||(o==="MintA"?s:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:r}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});T&&(b=T),f.addInstruction(k||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=await this.getClmmPoolKeys(t.id),x=Ke.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:S,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:o,baseAmount:r,otherAmountMax:s,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(co)});return f.addInstruction(x),f.addCustomComputeBudget(l),f.addTipInstruction(m),f.versionBuild({txVersion:d,extInfo:{address:x.address}})}async decreaseLiquidity(e){var N;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:r,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let y=this.createTxBuilder(f),b=r.useSOLBalance&&t.mintA.address===$.toString(),g=r.useSOLBalance&&t.mintB.address===$.toString(),P,h,{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Z(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});P=I,T&&y.addInstruction(T);let{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Z(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});h=k,S&&y.addInstruction(S);let x=[];for(let O of t.rewardDefaultInfos){let R=r.useSOLBalance&&O.mint.address===$.toString(),v;if(O.mint.address===t.mintA.address)v=P;else if(O.mint.address===t.mintB.address)v=h;else{let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(O.mint.programId),mint:new Z(O.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:l});v=Y,Q&&y.addInstruction(Q)}x.push(v)}!P&&!h&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let K=n!=null?n:await this.getClmmPoolKeys(t.id),B=(N=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:N.owner.equals(co),C=await Ke.decreaseLiquidityInstructions({poolInfo:t,poolKeys:K,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:h,rewardAccounts:x},liquidity:c,amountMinA:s,amountMinB:a,nft2022:B});y.addInstruction({instructions:C.instructions,instructionTypes:[z.ClmmDecreasePosition]});let L=_({},C.address);if(r.closePosition){let O=await Ke.closePositionInstructions({poolInfo:t,poolKeys:K,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:B});y.addInstruction({endInstructions:O.instructions,endInstructionTypes:O.instructionTypes}),L=_(_({},L),O.address)}return y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:L}})}async lockPosition(e){var f;let{programId:t=qo,authProgramId:n=ki,poolProgramId:o=Jn,ownerPosition:r,payer:s,computeBudgetConfig:a,txTipConfig:c,txVersion:u,getEphemeralSigners:l,feePayer:m}=e,d=this.createTxBuilder(m),p=await Ke.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:r.nftMint,getEphemeralSigners:l,nft2022:(f=await this.scope.connection.getAccountInfo(r.nftMint))==null?void 0:f.owner.equals(co)});return d.addInstruction(p),d.addCustomComputeBudget(a),d.addTipInstruction(c),d.versionBuild({txVersion:u,extInfo:p.address})}async harvestLockPosition(e){let{programId:t=qo,authProgramId:n=ki,clmmProgram:o=Jn,poolKeys:r,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=r||await this.getClmmPoolKeys(s.poolId.toString()),y=this.createTxBuilder(p),b=await this.scope.connection.getAccountInfo(s.positionId);b||this.logger.logWithError("position not found",s.positionId);let g=ei.decode(b.data),P=a.useSOLBalance&&f.mintA.address===$.toString(),h=a.useSOLBalance&&f.mintB.address===$.toString(),I,T,{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new Z(f.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});I=k,S&&y.addInstruction(S);let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new Z(f.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,associatedOnly:h?!1:c,checkCreateATAOwner:u});T=x,K&&y.addInstruction(K);let B={},C=[];for(let le of f.rewardInfos){let Ae=a.useSOLBalance&&le.mint.address===$.toString(),fe=B[le.mint.address];if(!fe){let{account:oe,instructionParams:ne}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(le.mint.programId),mint:new Z(le.mint.address),notUseTokenAccount:Ae,owner:this.scope.ownerPubKey,skipCloseAccount:!Ae,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:Ae?!1:c});fe=oe,ne&&y.addInstruction(ne)}B[le.mint.address]=fe,C.push(fe)}let L=Jo(t,s.lockNftMint).publicKey,N=J(this.scope.ownerPubKey,s.lockNftMint,tr).publicKey,O=ee.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),R=ee.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:v}=Ie(new Z(f.programId),s.poolId,O),{publicKey:Y}=Ie(new Z(f.programId),s.poolId,R),{publicKey:Q}=wn(new Z(f.programId),s.poolId,g.tickLower,g.tickUpper),de=[];for(let le=0;le<f.rewardInfos.length;le++)de.push({poolRewardVault:new Z(f.rewardInfos[le].vault),ownerRewardVault:C[le],rewardMint:new Z(f.rewardInfos[le].mint.address)});let ce=await Ke.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:L,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:N,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:Q,vaultA:new Z(f.vault.A),vaultB:new Z(f.vault.B),tickArrayLower:v,tickArrayUpper:Y,userVaultA:I,userVaultB:T,mintA:new Z(f.mintA.address),mintB:new Z(f.mintB.address),rewardAccounts:de,exTickArrayBitmap:ot(o,s.poolId).publicKey});return y.addInstruction({instructions:[ce],instructionTypes:[z.ClmmHarvestLockPosition]}),y.addCustomComputeBudget(l),y.addTipInstruction(m),y.versionBuild({txVersion:d})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o,computeBudgetConfig:r,txTipConfig:s,feePayer:a}){var m;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let c=this.createTxBuilder(a),u=t!=null?t:await this.getClmmPoolKeys(e.id),l=Ke.closePositionInstructions({poolInfo:e,poolKeys:u,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(m=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:m.owner.equals(co)});return c.addCustomComputeBudget(r),c.addTipInstruction(s),c.addInstruction(l).versionBuild({txVersion:o,extInfo:{address:l.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a,feePayer:c}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(c),l=t.useSOLBalance&&n.mint.address.toString()===$.toString(),m=n.perSecond.mul(n.endTime-n.openTime),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(n.mint.address),mint:new Z(n.mint.address),notUseTokenAccount:!!l,skipCloseAccount:!l,owner:this.scope.ownerPubKey,createInfo:l?{payer:t.feePayer||this.scope.ownerPubKey,amount:new Vt(new M(m.toFixed(0)).gte(m)?m.toFixed(0):m.add(1).toFixed(0))}:void 0,associatedOnly:l?!1:o,checkCreateATAOwner:r});p&&u.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Ke.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{programId:new Z(n.mint.programId),mint:new Z(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:be.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){for(let p of o)p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let m=this.createTxBuilder(l),d={};for(let p of o){let f=n.useSOLBalance&&p.mint.address===$.toString(),y=p.perSecond.mul(p.endTime-p.openTime),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(p.mint.programId),mint:new Z(p.mint.address),notUseTokenAccount:!!f,skipCloseAccount:!f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new Vt(new M(y.toFixed(0)).gte(y)?y.toFixed(0):y.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:r,checkCreateATAOwner:s});g&&m.addInstruction(g),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let P=t!=null?t:await this.getClmmPoolKeys(e.id),h=Ke.initRewardInstructions({poolInfo:e,poolKeys:P,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{programId:new Z(p.mint.programId),mint:new Z(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:be.decimalToX64(p.perSecond)}});d=_(_({},d),h.address),m.addInstruction(h)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txTipConfig:a,txVersion:c,feePayer:u}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let l=this.createTxBuilder(u),m=t.useSOLBalance&&n.mint.equals($),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new Vt(new M(n.perSecond.mul(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.mul(n.endTime-n.openTime))?n.perSecond.mul(n.endTime-n.openTime).toFixed(0):n.perSecond.mul(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:m?!1:o,checkCreateATAOwner:r});p&&l.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Ke.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:be.decimalToX64(n.perSecond)}});return l.addInstruction(y),l.addCustomComputeBudget(s),l.addTipInstruction(a),l.versionBuild({txVersion:c,extInfo:{address:y.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){let m=this.createTxBuilder(l),d={};for(let p of o){p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let f=n.useSOLBalance&&p.mint.address===$.toString(),{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(p.mint.programId),mint:new Z(p.mint.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new Vt(new M(p.perSecond.mul(p.endTime-p.openTime).toFixed(0)).gte(p.perSecond.mul(p.endTime-p.openTime))?p.perSecond.mul(p.endTime-p.openTime).toFixed(0):p.perSecond.mul(p.endTime-p.openTime).add(1).toFixed(0))}:void 0,associatedOnly:f?!1:r,checkCreateATAOwner:s});b&&m.addInstruction(b),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let g=t!=null?t:await this.getClmmPoolKeys(e.id),P=Ke.setRewardInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{mint:new Z(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:be.decimalToX64(p.perSecond)}});m.addInstruction(P),d=_(_({},d),P.address)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txTipConfig:a,txVersion:c,feePayer:u}){let l=e.rewardDefaultInfos.find(g=>g.mint.address===n.toString());l||this.logAndCreateError("reward mint error","not found reward mint",n);let m=this.createTxBuilder(u),d=t.useSOLBalance&&n.equals($),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(l.mint.programId),mint:n,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:o,checkCreateATAOwner:r});f&&m.addInstruction(f),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),b=Ke.collectRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:n});return m.addInstruction(b),m.addCustomComputeBudget(s),m.addTipInstruction(a),m.versionBuild({txVersion:c,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l={};for(let m of n){let d=e.rewardDefaultInfos.find(P=>P.mint.address===m.toString());if(!d){this.logAndCreateError("reward mint error","not found reward mint",m);continue}let p=t.useSOLBalance&&m.equals($),{account:f,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(d.mint.programId),mint:m,notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:r});f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),y&&u.addInstruction(y);let b=await this.getClmmPoolKeys(e.id),g=Ke.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:m});u.addInstruction(g),l=_(_({},l),g.address)}return u.addCustomComputeBudget(s),u.addTipInstruction(a),u.build({address:l})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintA.address,P=c.useSOLBalance&&e.mintA.address===$.toBase58(),h=c.useSOLBalance&&e.mintB.address===$.toBase58(),I;!s||s.equals(new M(0))?I=g?Ft.add(new Vt(1)):_t.sub(new Vt(1)):I=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let T;if(!T){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Z(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});T=x,K&&b.addInstruction(K)}let k;if(!k){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Z(e.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,skipCloseAccount:!h,createInfo:h||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:h?!1:l,checkCreateATAOwner:m});k=x,K&&b.addInstruction(K)}(!T||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:T,ownerTokenAccountB:k,mintAUseSOLBalance:P,mintBUseSOLBalance:h,associatedOnly:l});let S=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Ke.makeSwapBaseInInstructions({poolInfo:e,poolKeys:S,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:T,tokenAccountB:k},inputMint:new Z(n),amountIn:o,amountOutMin:r,sqrtPriceLimitX64:I,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintB.address,P=c.useSOLBalance&&e.mintA.address===$.toBase58(),h=c.useSOLBalance&&e.mintB.address===$.toBase58(),I;!s||s.equals(new M(0))?I=n.toString()===e.mintB.address?Ft.add(new Vt(1)):_t.sub(new Vt(1)):I=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let T;if(!T){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Z(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?r:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});T=x,K&&b.addInstruction(K)}let k;if(!k){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Z(e.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,skipCloseAccount:!h,createInfo:h||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:r}:void 0,associatedOnly:h?!1:l,checkCreateATAOwner:m});k=x,K&&b.addInstruction(K)}(!T||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:T,ownerTokenAccountB:k,mintAUseSOLBalance:P,mintBUseSOLBalance:h,associatedOnly:l});let S=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Ke.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:S,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:T,tokenAccountB:k},outputMint:new Z(n),amountOut:o,amountInMax:r,sqrtPriceLimitX64:I,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u,feePayer:l,lockProgram:m=qo,lockAuth:d=ki,clmmProgram:p=Jn}){var h,I;let f={};for(let T of this.scope.account.tokenAccountRawInfos)r?J(this.scope.ownerPubKey,T.accountInfo.mint,a).publicKey.equals(T.pubkey)&&(f[T.accountInfo.mint.toString()]=T.pubkey):f[T.accountInfo.mint.toString()]=T.pubkey;let y=Object.values(t).flat().map(T=>T.nftMint),b=await We(this.scope.connection,y.map(T=>({pubkey:T}))),g={};b.forEach(T=>{var k,S;g[T.pubkey.toBase58()]=(S=(k=T==null?void 0:T.accountInfo)==null?void 0:k.owner)!=null?S:null});let P=this.createTxBuilder(l);for(let T of Object.values(e)){if(t[T.id]===void 0||!t[T.id].find(O=>!O.liquidity.isZero()||O.rewardInfos.find(R=>!R.rewardAmountOwed.isZero())))continue;let k=T,S=o.useSOLBalance&&k.mintA.address===$.toString(),x=o.useSOLBalance&&k.mintB.address===$.toString(),K=f[k.mintA.address];if(!K)if(S){let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintA.programId,mint:new Z(k.mintA.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:r,checkCreateATAOwner:s});K=O,R&&P.addInstruction(R)}else{let O=new Z(k.mintA.address);K=this.scope.account.getAssociatedTokenAccount(O,new Z(k.mintA.programId)),P.addInstruction({instructions:[Km(this.scope.ownerPubKey,K,this.scope.ownerPubKey,O,new Z(k.mintA.programId))]})}let B=f[k.mintB.address];if(!B)if(x){let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintB.programId,mint:new Z(k.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:r,checkCreateATAOwner:s});B=O,R&&P.addInstruction(R)}else{let O=new Z(k.mintB.address);B=this.scope.account.getAssociatedTokenAccount(O,new Z(k.mintB.programId)),P.addInstruction({instructions:[Km(this.scope.ownerPubKey,B,this.scope.ownerPubKey,O,new Z(k.mintB.programId))]})}f[k.mintA.address]=K,f[k.mintB.address]=B;let C=[];for(let O of k.rewardDefaultInfos){let R=o.useSOLBalance&&O.mint.address===$.toString(),v=f[O.mint.address];if(!v){let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(O.mint.programId),mint:new Z(O.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,skipCloseAccount:!R,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:R?!1:r});v=Y,Q&&P.addInstruction(Q)}f[O.mint.address]=v,C.push(v)}let L=await this.getClmmPoolKeys(k.id),N=[];for(let O=0;O<L.rewardInfos.length;O++)N.push({poolRewardVault:new Z(L.rewardInfos[O].vault),ownerRewardVault:C[O],rewardMint:new Z(L.rewardInfos[O].mint.address)});for(let O of t[T.id]){let R=(h=n==null?void 0:n[T.id])==null?void 0:h[O.nftMint.toBase58()];if(R){let v=J(this.scope.ownerPubKey,R.lockNftMint,tr).publicKey,Y=ee.getTickArrayStartIndexByTick(O.tickLower,L.config.tickSpacing),Q=ee.getTickArrayStartIndexByTick(O.tickUpper,L.config.tickSpacing),{publicKey:de}=Ie(new Z(L.programId),R.poolId,Y),{publicKey:ce}=Ie(new Z(L.programId),R.poolId,Q),{publicKey:le}=wn(new Z(L.programId),R.poolId,O.tickLower,O.tickUpper),Ae=Jo(m,R.lockNftMint).publicKey,fe=Ke.harvestLockPositionInstructionV2({programId:m,auth:d,lockPositionId:Ae,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:R.lockNftMint,lockNftAccount:v,positionNftAccount:R.nftAccount,positionId:R.positionId,poolId:R.poolId,protocolPosition:le,vaultA:new Z(L.vault.A),vaultB:new Z(L.vault.B),tickArrayLower:de,tickArrayUpper:ce,userVaultA:K,userVaultB:B,mintA:new Z(L.mintA.address),mintB:new Z(L.mintB.address),rewardAccounts:N,exTickArrayBitmap:ot(p,R.poolId).publicKey});P.addInstruction({instructions:[fe],instructionTypes:[z.ClmmHarvestLockPosition],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]})}else{let v=Ke.decreaseLiquidityInstructions({poolInfo:k,poolKeys:L,ownerPosition:O,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:B,rewardAccounts:C},liquidity:new Vt(0),amountMinA:new Vt(0),amountMinB:new Vt(0),nft2022:(I=g[O.nftMint.toBase58()])==null?void 0:I.equals(co)});P.addInstruction(v)}}}return c===0?P.sizeCheckBuildV0({computeBudgetConfig:u}):P.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Gi(e).publicKey);return t?im.decode(t.data).whitelistMints.filter(o=>!o.equals(Z.default)):[]}async getOwnerPositionInfo({programId:e=Jn}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new Vt(1))).map(s=>Et(new Z(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),r=[];return o.forEach(s=>{if(!s)return;let a=ei.decode(s.data);r.push(a)}),r}async getOwnerLockedPositionInfo({programId:e=qo}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new Vt(1))).map(c=>Jo(new Z(e),c.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),r=[];o.forEach(c=>{if(!c)return;let u=rm.decode(c.data);r.push(u)});let s=await this.scope.connection.getMultipleAccountsInfo(r.map(c=>c.positionId)),a=[];return s.forEach(c=>{if(!c)return;let u=ei.decode(c.data);a.push(u)}),r.map((c,u)=>({position:a[u],lockInfo:c}))}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await We(this.scope.connection,e.map(r=>({pubkey:new Z(r)})),t),o={};for(let r=0;r<e.length;r++){let s=n[r];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[r]));let a=xo.decode(s.accountInfo.data),c=ue.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[r])]=U(_({},a),{currentPrice:c,programId:s.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),o=await We(this.scope.connection,Array.from(n).map(c=>({pubkey:new Z(c)}))),r={};o.forEach(c=>{!c.accountInfo||(r[c.pubkey.toBase58()]=nm.decode(c.accountInfo.data))});let s=await ve.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,f;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:Kt({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||tr.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?ao((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:Kt({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||tr.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?ao((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[c].currentPrice,config:U(_({},r[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await ve.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await _o({connection:this.scope.connection,mints:Array.from(n).map(m=>new Z(m))}),{computeClmmPoolInfo:r,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await We(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=em(r[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Sm.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Sm.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=U(_({},r[e]),{exBitmapAccount:r[e].exBitmapAccount.toBase58(),observationId:r[e].observationId.toBase58(),id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:c.config,rewardInfos:r[e].rewardInfos.filter(m=>!m.tokenVault.equals(Z.default)).map(m=>({mint:Kt({address:m.tokenMint.toBase58(),programId:tr.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:r[e],tickData:s}}};import{PublicKey as G}from"@solana/web3.js";import{AccountLayout as _b,NATIVE_MINT as ri,TOKEN_PROGRAM_ID as Dt,createAssociatedTokenAccountIdempotentInstruction as si}from"@solana/spl-token";import Rm from"bn.js";import bs from"bn.js";function Bu(i,e){if(e.isZero())throw Error("divisor is zero");return i.mod(e)}function wb(i,e){if(e.isZero())throw Error("rhs is zero");let t=i.div(e);return Bu(i,e).gt(or)&&(t=t.add(new bs(1))),[t,e]}var or=new bs(0),ir=class{static swapBaseInputWithoutFees(e,t,n){let o=e.mul(n),r=t.add(e);return o.div(r)}static swapBaseOutputWithoutFees(e,t,n){let o=t.mul(e),r=n.sub(e),[s]=wb(o,r);return s}static lpTokensToTradingTokens(e,t,n,o,r){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(r===0)return{tokenAmount0:s,tokenAmount1:a};if(r===1)return Bu(e.mul(n),t).gt(or)&&s.gt(or)&&(s=s.add(new bs(1))),Bu(e.mul(o),t).gt(or)&&a.gt(or)&&(a=a.add(new bs(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import kb from"bn.js";var Yt=class{static tradingFee(e,t){return gi(e,t,Gt)}static protocolFee(e,t){return Fr(e,t,Gt)}static fundFee(e,t){return Fr(e,t,Gt)}static creatorFee(e,t){return gi(e,t,Gt)}static splitCreatorFee(e,t,n){return Fr(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(Gt),o=Gt.sub(t);return n.add(o).sub(new kb(1)).div(o)}};var Cm=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Cm||{}),hb=(t=>(t[t.ZeroForOne=0]="ZeroForOne",t[t.OneForZero=1]="OneForZero",t))(hb||{}),Tb=(t=>(t[t.OneForZero=0]="OneForZero",t[t.ZeroForOne=1]="ZeroForOne",t))(Tb||{}),rr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swapBaseInput(e,t,n,o,r,s,a,c){let u=new Rm(0),l=Yt.tradingFee(e,o),m;c?(u=Yt.creatorFee(e,r),m=e.sub(l).sub(u)):m=e.sub(l);let d=Yt.protocolFee(l,s),p=Yt.protocolFee(l,a),f=ir.swapBaseInputWithoutFees(m,t,n),y;return c?y=f:(u=Yt.creatorFee(f,r),y=f.sub(u)),{newInputVaultAmount:t.add(m),newOutputVaultAmount:n.sub(f),inputAmount:e,outputAmount:y,tradeFee:l,protocolFee:d,fundFee:p,creatorFee:u}}static swapBaseOutput(e,t,n,o,r,s,a,c){let u,l=new Rm(0),m;if(c)m=e;else{let b=Yt.calculatePreFeeAmount(e,r);l=b.sub(e),m=b}let d=ir.swapBaseOutputWithoutFees(m,t,n),p;if(c){let b=Yt.calculatePreFeeAmount(d,o.add(r)),g=b.sub(d);l=Yt.splitCreatorFee(g,o,r),u=g.sub(l),p=b}else{let b=Yt.calculatePreFeeAmount(d,o);u=b.sub(d),p=b}let f=Yt.protocolFee(u,s),y=Yt.fundFee(u,a);return{newInputVaultAmount:t.add(d),newOutputVaultAmount:e.sub(m),inputAmount:p,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import Ze from"bn.js";import{PublicKey as ur,TransactionInstruction as qn,Keypair as Mb,SystemProgram as Ku}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as gs,TOKEN_2022_PROGRAM_ID as Cu,TOKEN_PROGRAM_ID as Wn}from"@solana/spl-token";var Ib=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Bb=Buffer.from("amm_config","utf8"),xb=Buffer.from("pool","utf8"),Sb=Buffer.from("pool_lp_mint","utf8"),Kb=Buffer.from("pool_vault","utf8"),Cb=Buffer.from("observation","utf8"),Rb=Buffer.from("permission","utf8");function ii(i){return ie([Ib],i)}function TC(i,e){return ie([Bb,Nb(e)],i)}function xu(i,e,t,n){return ie([xb,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function Lb(i,e){return ie([Sb,e.toBuffer()],i)}function Lm(i,e,t){return ie([Kb,e.toBuffer(),t.toBuffer()],i)}function sr(i,e){return ie([Cb,e.toBuffer()],i)}function Nb(i){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,i,!1),new Uint8Array(e)}function Su({poolId:i,programId:e,configId:t,mintA:n,mintB:o}){let r=ii(e).publicKey,s=i||xu(e,t,n,o).publicKey,a=Lb(e,s).publicKey,c=Lm(e,s,n).publicKey,u=Lm(e,s,o).publicKey,l=sr(e,s).publicKey;return{poolId:s,configId:t,authority:r,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Ob=Buffer.from("locked_liquidity","utf8");function ar(i,e){return ie([Ob,e.toBuffer()],i)}function Nm(i,e){return ie([Rb,e.toBuffer()],i)}var vb=ke("Raydium_cpmm"),Un={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133],createPermissionPda:Buffer.from([135,136,2,216,137,169,181,202]),closePermissionPda:Buffer.from([156,84,32,118,69,135,70,123]),initializeWithPermission:Buffer.from([63,55,254,65,49,178,89,121]),collectCreatorFee:Buffer.from([20,22,86,123,198,28,219,132])};function Om(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([A("amountMaxA"),A("amountMaxB"),A("openTime")]),T=xu(i,t,r,s).publicKey,k=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!o.equals(T),isWritable:!0},{pubkey:r,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:Wn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],S=Buffer.alloc(I.span);return I.encode({amountMaxA:g,amountMaxB:P,openTime:h},S),new qn({keys:k,programId:i,data:Buffer.from([...Un.initialize,...S])})}function Mm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f){let y=E([A("lpAmount"),A("amountMaxA"),A("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Wn,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(y.span);return vb.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new qn({keys:b,programId:i,data:Buffer.from([...Un.deposit,...g])})}function vm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f){let y=E([A("lpAmount"),A("amountMinA"),A("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Wn,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:In,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new qn({keys:b,programId:i,data:Buffer.from([...Un.withdraw,...g])})}function Ps(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y){let b=E([A("amountIn"),A("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,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}],P=Buffer.alloc(b.span);return b.encode({amountIn:f,amounOutMin:y},P),new qn({keys:g,programId:i,data:Buffer.from([...Un.swapBaseInput,...P])})}function Fm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y){let b=E([A("amountInMax"),A("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,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}],P=Buffer.alloc(b.span);return b.encode({amountInMax:f,amountOut:y},P),new qn({keys:g,programId:i,data:Buffer.from([...Un.swapBaseOutput,...P])})}async function _m(i){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:o,getEphemeralSigners:r}=i,s=[],[a,c]=[new ur(t.id),new ur(t.lpMint.address)],u;if(r)u=new ur((await r(1))[0]);else{let g=Mb.generate();s.push(g),u=g.publicKey}let{publicKey:l}=J(o,u,Wn),{publicKey:m}=_n(u),{publicKey:d}=ar(i.lockProgram,u),{publicKey:p}=J(e.wallet,c,Wn),{publicKey:f}=J(i.lockAuthProgram,c,Wn),y=Fb({programId:i.lockProgram,auth:i.lockAuthProgram,payer:e.feePayer,liquidityOwner:e.wallet,nftOwner:o,nftMint:u,nftAccount:l,poolId:a,lockPda:d,mintLp:c,userLpVault:p,lockLpVault:f,poolVaultA:new ur(n.vault.A),poolVaultB:new ur(n.vault.B),metadataAccount:m,lpAmount:i.lpAmount,withMetadata:(b=i.withMetadata)!=null?b:!0});return{address:{nftMint:u,nftAccount:l,metadataAccount:m,lockPda:d,userLpVault:p,lockLpVault:f},instructions:[y],signers:s,instructionTypes:[z.CpmmLockLp],lookupTableAddress:[]}}function Fb({programId:i,auth:e,payer:t,liquidityOwner:n,nftOwner:o,nftMint:r,nftAccount:s,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:f,lpAmount:y,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{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:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Ku.programId,isSigner:!1,isWritable:!1},{pubkey:Wn,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1}],P=E([A("lpAmount"),Ye("withMetadata")]),h=Buffer.alloc(P.span);P.encode({lpAmount:y,withMetadata:b},h);let I=Buffer.from([...Un.lockCpLiquidity,...h]);return new qn({keys:g,programId:i,data:I})}function Ru({programId:i,nftOwner:e,auth:t,nftAccount:n,lockPda:o,poolId:r,mintLp:s,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:f,cpmmProgram:y,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:y!=null?y:to,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:ma,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Wn,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:In,isSigner:!1,isWritable:!1}],P=E([A("lpFeeAmount")]),h=Buffer.alloc(P.span);P.encode({lpFeeAmount:f},h);let I=Buffer.from([...Un.collectCpFee,...h]);return new qn({keys:g,programId:i,data:I})}function Lu(i,e,t,n,o,r,s,a,c,u,l,m,d){let p=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:Ku.programId,isSigner:!1,isWritable:!1}];return new qn({keys:p,programId:i,data:Un.collectCreatorFee})}function Em(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I,T,k){let S=E([A("amountA"),A("amountB"),A("openTime"),D("feeOn")]),x=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:P,isSigner:!1,isWritable:!0},{pubkey:Wn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:Ku.programId,isSigner:!1,isWritable:!1}],K=Buffer.alloc(S.span);return S.encode({amountA:h,amountB:I,openTime:T,feeOn:k},K),new qn({keys:x,programId:i,data:Buffer.from([...Un.initializeWithPermission,...K])})}var Vm=E([Re(8),D("bump"),Ye("disableCreatePool"),en("index"),A("tradeFeeRate"),A("protocolFeeRate"),A("fundFeeRate"),A("createPoolFee"),F("protocolOwner"),F("fundOwner"),A("creatorFeeRate"),j(A(),15)]),As=E([Re(8),F("configId"),F("poolCreator"),F("vaultA"),F("vaultB"),F("mintLp"),F("mintA"),F("mintB"),F("mintProgramA"),F("mintProgramB"),F("observationId"),D("bump"),D("status"),D("lpDecimals"),D("mintDecimalA"),D("mintDecimalB"),A("lpAmount"),A("protocolFeesMintA"),A("protocolFeesMintB"),A("fundFeesMintA"),A("fundFeesMintB"),A("openTime"),A("epoch"),D("feeOn"),Ye("enableCreatorFee"),j(D(),6),A("creatorFeesMintA"),A("creatorFeesMintB"),j(A(),28)]),FC=E([Re(8),F("configId"),j(A(),30)]);var Dm=(n=>(n[n.BothToken=0]="BothToken",n[n.OnlyTokenA=1]="OnlyTokenA",n[n.OnlyTokenB=2]="OnlyTokenB",n))(Dm||{});var cr=class extends Xe{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 G(m)}))),o={},r=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=As.decode(d.accountInfo.data);o[String(e[m])]=U(_({},p),{programId:d.accountInfo.owner}),r.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...r],d=await We(this.scope.connection,m.map(p=>({pubkey:new G(p)})));for(let p=0;p<m.length;p++){let f=d[p].accountInfo;if(f===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Vm.decode(f.data)}}let c={},u=await We(this.scope.connection,s.map(m=>({pubkey:new G(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 Ze(_b.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA).sub(d.creatorFeesMintA),f=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB).sub(d.creatorFeesMintB);l[m]=U(_({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new M(f.toString()).div(new M(10).pow(d.mintDecimalB)).div(new M(p.toString()).div(new M(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var c,u,l,m;let r=e[o],[s,a]=[r.mintA.toBase58(),r.mintB.toBase58()];return U(_({},n),{[o]:U(_({},r),{id:new G(o),configInfo:r.configInfo,version:7,authority:ii(r.programId).publicKey,mintA:Kt({address:s,decimals:r.mintDecimalA,programId:r.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?ao((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:Kt({address:a,decimals:r.mintDecimalB,programId:r.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?ao((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await _o({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=Kt({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?ao(n[t.mintA.toBase58()].feeConfig):void 0}}),r=Kt({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?ao(n[t.mintB.toBase58()].feeConfig):void 0}}),s=Kt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Dt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:r,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new M(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new M(t.vaultBAmount.toString()).div(10**r.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:r,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:ii(t.programId).publicKey.toBase58(),mintLp:s,config:a,observationId:sr(t.programId,new G(e)).publicKey.toBase58()},rpcData:t}}async createPool(f){var y=f,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=y,p=Qe(y,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer"]);var v,Y,Q;let b=r.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),g=new Ze(new G(p.mintA.address).toBuffer()).lte(new Ze(new G(p.mintB.address).toBuffer())),[P,h]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[I,T]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],k=r.useSOLBalance&&P.address===ri.toBase58(),S=r.useSOLBalance&&h.address===ri.toBase58(),[x,K]=[new G(P.address),new G(h.address)],B=this.createTxBuilder(d),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:x,tokenProgram:P.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:b,amount:I}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:s,checkCreateATAOwner:a});B.addInstruction(L||{});let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:new G(h.address),tokenProgram:h.programId,owner:this.scope.ownerPubKey,createInfo:S?{payer:b,amount:T}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:s,checkCreateATAOwner:a});if(B.addInstruction(O||{}),C===void 0||N===void 0)throw Error("you don't has some token account");let R=Su({poolId:e,programId:t,configId:new G(u.id),mintA:x,mintB:K});return B.addInstruction({instructions:[Om(t,this.scope.ownerPubKey,new G(u.id),R.authority,R.poolId,x,K,R.lpMint,C,N,J(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new G((Y=P.programId)!=null?Y:Dt),new G((Q=h.programId)!=null?Q:Dt),R.observationId,I,T,o)],instructionTypes:[z.CpmmCreatePool]}),B.addCustomComputeBudget(l),B.addTipInstruction(m),B.versionBuild({txVersion:c,extInfo:{address:U(_({},R),{mintA:P,mintB:h,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:r,slippage:s,computeResult:a,computeBudgetConfig:c,txTipConfig:u,config:l,txVersion:m,feePayer:d}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:p}=this.scope,{bypassAssociatedCheck:f,checkCreateATAOwner:y}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:P,anotherAmount:h}=a||this.computePairAmount({poolInfo:U(_({},t),{lpAmount:new M(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new et(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(o.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),I=h.amount,T=t.mintA.address===ri.toString(),k=t.mintB.address===ri.toString(),S=this.createTxBuilder(d),[x,K]=[new G(t.mintA.address),new G(t.mintB.address)],{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:T||(r?o:I).isZero()?{payer:this.scope.ownerPubKey,amount:r?o:I}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!1,checkCreateATAOwner:y});S.addInstruction(C||{});let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(r?I:o).isZero()?{payer:this.scope.ownerPubKey,amount:r?I:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:y});S.addInstruction(N||{}),!B&&!L&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let O=await p.getCreatedTokenAccount({mint:new G(t.lpMint.address)}),de=await p.handleTokenAccount({side:"out",amount:0,mint:new G(t.lpMint.address),tokenAccount:O,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:R}=de,v=Qe(de,["tokenAccount"]);S.addInstruction(v);let Y=n!=null?n:await this.getCpmmPoolKeys(t.id),Q=new et(new Ze(1)).sub(s);return S.addInstruction({instructions:[Mm(new G(t.programId),this.scope.ownerPubKey,new G(Y.authority),new G(t.id),R,B,L,new G(Y.vault.A),new G(Y.vault.B),x,K,new G(t.lpMint.address),a?a==null?void 0:a.liquidity:Q.mul(g).quotient,r?P.amount:I,r?I:P.amount)],instructionTypes:[z.CpmmAddLiquidity],lookupTableAddress:Y.lookupTableAccount?[Y.lookupTableAccount]:[]}),S.addCustomComputeBudget(c),S.addTipInstruction(u),S.versionBuild({txVersion:m})}async withdrawLiquidity(e){var v,Y;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:r,computeBudgetConfig:s,txTipConfig:a,txVersion:c,feePayer:u,closeWsol:l=!0}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let m=new et(new Ze(1)).sub(r),d=await this.getRpcPoolInfo(t.id),[p,f]=[m.mul(o.mul(d.baseReserve).div(d.lpAmount)).quotient,m.mul(o.mul(d.quoteReserve).div(d.lpAmount)).quotient],y=await this.scope.fetchEpochInfo(),[b,g]=[Ne(p,t.mintA.extensions.feeConfig,y,!1),Ne(f,t.mintB.extensions.feeConfig,y,!1)],{account:P}=this.scope,h=this.createTxBuilder(u),[I,T]=[new G(t.mintA.address),new G(t.mintB.address)],k=I.equals($),S=T.equals($),x,K,{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(k&&l),associatedOnly:!k,checkCreateATAOwner:!1});x=B,C&&h.addInstruction(C);let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(S&&l),associatedOnly:!S,checkCreateATAOwner:!1});K=L,N&&h.addInstruction(N),(!x||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",P.tokenAccounts);let O=await P.getCreatedTokenAccount({mint:new G(t.lpMint.address)});O||this.logAndCreateError("cannot found lp token account","tokenAccounts",P.tokenAccounts);let R=n!=null?n:await this.getCpmmPoolKeys(t.id);return h.addInstruction({instructions:[vm(new G(t.programId),this.scope.ownerPubKey,new G(R.authority),new G(t.id),O,x,K,new G(R.vault.A),new G(R.vault.B),I,T,new G(t.lpMint.address),o,p.sub((v=b.fee)!=null?v:new Ze(0)),f.sub((Y=g.fee)!=null?Y:new Ze(0)))],instructionTypes:[z.CpmmWithdrawLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),h.addCustomComputeBudget(s),h.addTipInstruction(a),h.versionBuild({txVersion:c})}async swap(e){var C,L,N,O,R,v;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:r,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,{bypassAssociatedCheck:f,checkCreateATAOwner:y,associatedOnly:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[P,h]=[new G(t.mintA.address),new G(t.mintB.address)];r?a.inputAmount=a.inputAmount.mul(new Ze((1+c)*1e4)).div(new Ze(1e4)):a.outputAmount=a.outputAmount.mul(new Ze((1-c)*1e4)).div(new Ze(1e4));let I=t.mintA.address===$.toBase58(),T=t.mintB.address===$.toBase58(),{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:P,tokenProgram:new G((C=t.mintA.programId)!=null?C:Dt),owner:this.scope.ownerPubKey,createInfo:I||!o?{payer:this.scope.ownerPubKey,amount:o?a.inputAmount:0}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:b,checkCreateATAOwner:y});S&&g.addInstruction(S);let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:h,tokenProgram:new G((L=t.mintB.programId)!=null?L:Dt),owner:this.scope.ownerPubKey,createInfo:T||o?{payer:this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:b,checkCreateATAOwner:y});K&&g.addInstruction(K),(!k||!x)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:k,mintBTokenAcc:x,mintAUseSOLBalance:I,mintBUseSOLBalance:T,associatedOnly:b});let B=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[r?Fm(new G(t.programId),this.scope.ownerPubKey,new G(B.authority),new G(B.config.id),new G(t.id),o?k:x,o?x:k,new G(B.vault[o?"A":"B"]),new G(B.vault[o?"B":"A"]),new G((R=t[o?"mintA":"mintB"].programId)!=null?R:Dt),new G((v=t[o?"mintB":"mintA"].programId)!=null?v:Dt),o?P:h,o?h:P,sr(new G(t.programId),new G(t.id)).publicKey,a.inputAmount,a.outputAmount):Ps(new G(t.programId),this.scope.ownerPubKey,new G(B.authority),new G(B.config.id),new G(t.id),o?k:x,o?x:k,new G(B.vault[o?"A":"B"]),new G(B.vault[o?"B":"A"]),new G((N=t[o?"mintA":"mintB"].programId)!=null?N:Dt),new G((O=t[o?"mintB":"mintA"].programId)!=null?O:Dt),o?P:h,o?h:P,sr(new G(t.programId),new G(t.id)).publicKey,s,a.outputAmount)],instructionTypes:[r?z.CpmmSwapBaseOut:z.ClmmSwapBaseIn]}),g.addCustomComputeBudget(l),g.addTipInstruction(m),g.versionBuild({txVersion:d})}async lockLp(e){var d,p,f,y,b;let{poolInfo:t,lpAmount:n,computeBudgetConfig:o,txTipConfig:r,txVersion:s,feePayer:a,feeNftOwner:c}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let u=this.createTxBuilder(a),l=(d=e.poolKeys)!=null?d:await this.getCpmmPoolKeys(t.id),m=await _m({poolInfo:t,poolKeys:l,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(p=e.feePayer)!=null?p:this.scope.ownerPubKey},feeNftOwner:c!=null?c:this.scope.ownerPubKey,lockProgram:(f=e.programId)!=null?f:hi,lockAuthProgram:(y=e.authProgram)!=null?y:Ti,lpAmount:n,withMetadata:(b=e.withMetadata)!=null?b:!0,getEphemeralSigners:e.getEphemeralSigners});return u.addInstruction(m),u.addCustomComputeBudget(o),u.addTipInstruction(r),u.versionBuild({txVersion:s,extInfo:m.address})}async harvestLockLp(e){var L;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:r=hi,authProgram:s=Ti,cpmmProgram:a,computeBudgetConfig:c,txTipConfig:u,txVersion:l,closeWsol:m=!0}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let d=e.feePayer||this.scope.ownerPubKey,p=this.createTxBuilder(d),[f,y]=[new G(t.mintA.address),new G(t.mintB.address)],b=f.equals($),g=y.equals($),P,h,{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(b&&m),associatedOnly:!b,checkCreateATAOwner:!1});P=I,T&&p.addInstruction(T);let{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&m),associatedOnly:!g,checkCreateATAOwner:!1});h=k,S&&p.addInstruction(S),(!P||!h)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:P,tokenAccountB:h});let x=(L=e.poolKeys)!=null?L:await this.getCpmmPoolKeys(t.id),{publicKey:K}=J(d,o,Dt),{publicKey:B}=ar(r,o),{publicKey:C}=J(s,new G(t.lpMint.address),Dt);return p.addInstruction({instructions:[Ru({programId:r,nftOwner:this.scope.ownerPubKey,auth:s,nftMint:o,nftAccount:K,lockPda:B,poolId:new G(t.id),mintLp:new G(x.mintLp.address),userVaultA:P,userVaultB:h,poolVaultA:new G(x.vault.A),poolVaultB:new G(x.vault.B),mintA:f,mintB:y,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[z.CpmmCollectLockFee]}),p.addCustomComputeBudget(c),p.addTipInstruction(u),p.versionBuild({txVersion:l})}async harvestMultiLockLp(e){var d;let{lockInfo:t,programId:n=hi,authProgram:o=Ti,cpmmProgram:r,computeBudgetConfig:s,txVersion:a,closeWsol:c=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u),m={};for(let p of t){let{poolInfo:f,lpFeeAmount:y,nftMint:b}=p;if(y.isZero())continue;let[g,P]=[new G(f.mintA.address),new G(f.mintB.address)],h=g.equals($),I=P.equals($),T=m[f.mintA.address],k=m[f.mintB.address];if(!T)if(h){let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new G(f.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});T=C,L&&l.addInstruction(L),m[f.mintA.address]=C}else{let C=new G(f.mintA.address);T=this.scope.account.getAssociatedTokenAccount(C,new G(f.mintA.programId)),l.addInstruction({instructions:[si(this.scope.ownerPubKey,T,this.scope.ownerPubKey,C,new G(f.mintA.programId))]}),m[f.mintA.address]=T}if(!k)if(I){let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new G(f.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});k=C,L&&l.addInstruction(L),m[f.mintB.address]=C}else{let C=new G(f.mintB.address);k=this.scope.account.getAssociatedTokenAccount(C,new G(f.mintB.programId)),l.addInstruction({instructions:[si(this.scope.ownerPubKey,k,this.scope.ownerPubKey,C,new G(f.mintB.programId))]}),m[f.mintB.address]=k}(!T||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:T,tokenAccountB:k});let S=(d=p.poolKeys)!=null?d:await this.getCpmmPoolKeys(f.id),{publicKey:x}=J(u,b,Dt),{publicKey:K}=ar(n,b),{publicKey:B}=J(o,new G(f.lpMint.address),Dt);l.addInstruction({instructions:[Ru({programId:n,nftOwner:this.scope.ownerPubKey,auth:o,nftMint:b,nftAccount:x,lockPda:K,poolId:new G(f.id),mintLp:new G(S.mintLp.address),userVaultA:T,userVaultB:k,poolVaultA:new G(S.vault.A),poolVaultB:new G(S.vault.B),mintA:g,mintB:P,lockLpVault:B,lpFeeAmount:y,cpmmProgram:r==null?void 0:r.programId,cpmmAuthProgram:r==null?void 0:r.authProgram})],instructionTypes:[z.CpmmCollectLockFee]})}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:s}):l.sizeCheckBuild({computeBudgetConfig:s})}async createPoolWithPermission(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,feeOn:p}=b,f=Qe(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var Y,Q,de;console.log("***this method only available for wallet with permissions***");let g=r.feePayer||((Y=this.scope.owner)==null?void 0:Y.publicKey),P=new Ze(new G(f.mintA.address).toBuffer()).lte(new Ze(new G(f.mintB.address).toBuffer())),[h,I]=P?[f.mintA,f.mintB]:[f.mintB,f.mintA],[T,k]=P?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],S=r.useSOLBalance&&h.address===ri.toBase58(),x=r.useSOLBalance&&I.address===ri.toBase58(),[K,B]=[new G(h.address),new G(I.address)],C=this.createTxBuilder(d),{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:K,tokenProgram:h.programId,owner:this.scope.ownerPubKey,createInfo:S?{payer:g,amount:T}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:s,checkCreateATAOwner:a});C.addInstruction(N||{});let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new G(I.address),tokenProgram:I.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:k}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:s,checkCreateATAOwner:a});if(C.addInstruction(R||{}),L===void 0||O===void 0)throw Error("you don't has some token account");let v=Su({poolId:e,programId:t,configId:new G(u.id),mintA:K,mintB:B});return C.addInstruction({instructions:[Em(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new G(u.id),v.authority,v.poolId,K,B,v.lpMint,L,O,J(this.scope.ownerPubKey,v.lpMint).publicKey,v.vaultA,v.vaultB,n,new G((Q=h.programId)!=null?Q:Dt),new G((de=I.programId)!=null?de:Dt),v.observationId,Nm(t,this.scope.ownerPubKey).publicKey,T,k,o,p)],instructionTypes:[z.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(m),C.versionBuild({txVersion:c,extInfo:{address:U(_({},v),{mintA:h,mintB:I,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=to,txVersion:o,computeBudgetConfig:r,txTipConfig:s,feePayer:a}){let c=a||this.scope.ownerPubKey,u=this.createTxBuilder(c),l=t!=null?t:await this.getCpmmPoolKeys(e.id),[m,d,p,f]=[new G(e.mintA.address),new G(e.mintB.address),new G(e.mintA.programId),new G(e.mintB.programId)],y=this.scope.account.getAssociatedTokenAccount(m,p),b=this.scope.account.getAssociatedTokenAccount(d,f);return u.addInstruction({instructions:[si(this.scope.ownerPubKey,y,this.scope.ownerPubKey,m,new G(e.mintA.programId)),si(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,new G(e.mintB.programId))]}),u.addInstruction({instructions:[Lu(n,this.scope.ownerPubKey,new G(l.authority),new G(l.id),new G(l.config.id),new G(l.vault.A),new G(l.vault.B),m,d,y,b,p,f)],instructionTypes:[]}),u.addCustomComputeBudget(r),u.addTipInstruction(s),u.versionBuild({txVersion:o})}async collectMultiCreatorFees({poolInfoList:e,programId:t=to,txVersion:n,computeBudgetConfig:o,feePayer:r}){let s=r||this.scope.ownerPubKey,a=this.createTxBuilder(s),c={},u=await this.scope.api.fetchPoolKeysById({idList:e.map(l=>l.id)});for(let l of e){let m=u.find(P=>P.id===l.id)||await this.getCpmmPoolKeys(l.id),[d,p,f,y]=[new G(l.mintA.address),new G(l.mintB.address),new G(l.mintA.programId),new G(l.mintB.programId)],b=c[l.mintA.address]||this.scope.account.getAssociatedTokenAccount(d,f),g=c[l.mintB.address]||this.scope.account.getAssociatedTokenAccount(p,y);c[l.mintA.address]||a.addInstruction({instructions:[si(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,f)]}),c[l.mintB.address]||a.addInstruction({instructions:[si(this.scope.ownerPubKey,g,this.scope.ownerPubKey,p,y)]}),c[l.mintA.address]=b,c[l.mintB.address]=g,a.addInstruction({instructions:[Lu(t,this.scope.ownerPubKey,new G(m.authority),new G(m.id),new G(m.config.id),new G(m.vault.A),new G(m.vault.B),d,p,b,g,f,y)],instructionTypes:[]})}return n===0?a.sizeCheckBuildV0({computeBudgetConfig:o}):a.sizeCheckBuild({computeBudgetConfig:o})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let r=n.toString()===e.mintB.address,s=e.feeOn===0||e.feeOn===2,a=r?rr.swapBaseInput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,s):rr.swapBaseOutput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,s),c=new M(a.outputAmount.toString()).div(a.inputAmount.toString()),u=a.outputAmount.mul(new Ze((1-o)*1e4)).div(new Ze(1e4));return{allTrade:a.inputAmount.eq(t),amountIn:t,amountOut:a.outputAmount,minAmountOut:u,executionPrice:c,fee:a.tradeFee,priceImpact:e.poolPrice.sub(c).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:r,epochInfo:s,baseIn:a}){var I,T,k,S,x,K,B,C,L;let c=1-Number(r.toSignificant())/100,u=new Ze(new M(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=Ne(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((I=l.fee)!=null?I:new Ze(0)),d=new Ze(new M(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(T=l.fee)==null?void 0:T.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${r.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=m.mul(d).div(p==="base"?t:n),y={amount:at,fee:void 0,expirationTime:void 0};if(!m.isZero()){let N=Eb(f,t,n,d);this.logDebug("lpAmountData:",{amountA:N.amountA.toString(),amountB:N.amountB.toString()}),y=Ne(N[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new et(new Ze(1)).add(r),g=new et(new Ze(1)).sub(r),P=Ne(b.mul(y.amount.sub((S=y.fee)!=null?S:new Ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),h=Ne(g.mul(y.amount.sub((x=y.fee)!=null?x:new Ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",y.amount.toString(),"anotherAmountFee:",(B=(K=y.fee)==null?void 0:K.toString())!=null?B:0,"maxAnotherAmount:",P.amount.toString(),"maxAnotherAmountFee:",(L=(C=P.fee)==null?void 0:C.toString())!=null?L:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:P,minAnotherAmount:h,liquidity:f}}};function Eb(i,e,t,n){let o=i.mul(e).div(n);!o.isZero()&&!i.mul(e).mod(n).isZero()&&(o=o.add(new Ze(1)));let r=i.mul(t).div(n);return!r.isZero()&&!i.mul(t).mod(n).isZero()&&(r=r.add(new Ze(1))),{amountA:o,amountB:r}}import{PublicKey as Ve,SystemProgram as $b}from"@solana/web3.js";import{createTransferInstruction as td,TOKEN_PROGRAM_ID as De,TOKEN_2022_PROGRAM_ID as ci,createAssociatedTokenAccountIdempotentInstruction as Yu,createSyncNativeInstruction as Jb}from"@solana/spl-token";import ct from"bn.js";var Wm={[qr.toBase58()]:3},qm={3:qr};var Nu=E([Re(5),Re(8),F("ownAddress"),A("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),F("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Re(7)]),Um={3:Nu};import{PublicKey as Gm}from"@solana/web3.js";var ws=ke("Serum"),ks=class{static getProgramId(e){let t=qm[e];return t||ws.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Wm[t];return n||ws.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Um[e];return t||ws.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,r;for(;o<100;){try{let s=n.concat(Buffer.from([o]),Buffer.alloc(7));r=Gm.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:r,nonce:o}}return ws.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Gm.default,nonce:o}}};import{PublicKey as V,SystemProgram as lr,TransactionInstruction as mr}from"@solana/web3.js";import xn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ou,TOKEN_2022_PROGRAM_ID as Mu,TOKEN_PROGRAM_ID as lo}from"@solana/spl-token";function s1(i,e,t,n,o,r,s,a,c,u,l,m){let d=E([D("instruction"),A("amountIn"),A("amountOut")]),p=[{pubkey:lr.programId,isSigner:!1,isWritable:!1},{pubkey:lo,isSigner:!1,isWritable:!1},{pubkey:new V(t.programId),isSigner:!1,isWritable:!1},{pubkey:new V(t.id),isSigner:!1,isWritable:!0},{pubkey:new V(n.id),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let y=Ge(t);p.push({pubkey:y.config.id,isSigner:!1,isWritable:!1},{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:y.mintA.address.equals(c)?y.vault.A:y.vault.B,isSigner:!1,isWritable:!0},{pubkey:y.mintA.address.equals(c)?y.vault.B:y.vault.A,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let y=Ge(t);p.push({pubkey:y.authority,isSigner:!1,isWritable:!1},{pubkey:y.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:new V("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:y.openOrders,isSigner:!1,isWritable:!0},{pubkey:y.vault.A,isSigner:!1,isWritable:!0},{pubkey:y.vault.B,isSigner:!1,isWritable:!0},{pubkey:y.marketId,isSigner:!1,isWritable:!0},{pubkey:y.marketBids,isSigner:!1,isWritable:!0},{pubkey:y.marketAsks,isSigner:!1,isWritable:!0},{pubkey:y.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0})}else{let y=Ge(t);p.push({pubkey:y.authority,isSigner:!1,isWritable:!1},{pubkey:y.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:y.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:y.openOrders,isSigner:!1,isWritable:!0},{pubkey:y.vault.A,isSigner:!1,isWritable:!0},{pubkey:y.vault.B,isSigner:!1,isWritable:!0},{pubkey:y.marketId,isSigner:!1,isWritable:!0},{pubkey:y.marketBids,isSigner:!1,isWritable:!0},{pubkey:y.marketAsks,isSigner:!1,isWritable:!0},{pubkey:y.marketEventQueue,isSigner:!1,isWritable:!0},...y.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:y.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:y.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0}])}let f=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},f),new mr({keys:p,programId:i,data:f})}function a1(i,e,t,n,o,r,s,a,c,u){let l=E([D("instruction")]),m=[{pubkey:lr.programId,isSigner:!1,isWritable:!1},{pubkey:lo,isSigner:!1,isWritable:!1},{pubkey:new V(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new V(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new V(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=Ge(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(f=>({pubkey:f,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=Ge(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 V("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=Ge(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 mr({keys:m,programId:i,data:d})}function Vb(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f){var k;let y=[],b=[w({pubkey:lo,isWritable:!1}),w({pubkey:Mu,isWritable:!1}),w({pubkey:Ou,isWritable:!1}),w({pubkey:lr.programId,isWritable:!1}),w({pubkey:e,isSigner:!0})];b.push(w({pubkey:t})),b.push(w({pubkey:o}));let g=[c,u],P=[l,m],h=[r,s,a];for(let S=0;S<g.length;S++){let x=g[S],K=h[S]===x.mintA.address;if(b.push(w({pubkey:new V(x.programId),isWritable:!1})),S===g.length-1?b.push(w({pubkey:o})):b.push(w({pubkey:n})),b.push(w({pubkey:new V(h[S])})),b.push(w({pubkey:new V(h[S+1])})),x.version===6){let B=P[S];b.push(w({pubkey:new V(B.config.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(K?B.vault.A:B.vault.B)})),b.push(w({pubkey:new V(K?B.vault.B:B.vault.A)})),b.push(w({pubkey:new V(x.observationId)})),b.push(w({pubkey:In})),b.push(w({pubkey:ot(new V(x.programId),new V(x.id)).publicKey})),y.push(vu(x.sqrtPriceX64.toString(),K));for(let C of(k=f[S])!=null?k:[])b.push(w({pubkey:new V(C)}))}else if(x.version===5){let B=P[S];b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.authority),isWritable:!1})),b.push(w({pubkey:new V(B.marketProgramId)})),b.push(w({pubkey:new V(B.marketAuthority)})),b.push(w({pubkey:Ur,isWritable:!1})),b.push(w({pubkey:new V(B.openOrders)})),b.push(w({pubkey:new V(B.vault.A)})),b.push(w({pubkey:new V(B.vault.B)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.marketId)})),b.push(w({pubkey:new V(B.marketBids)})),b.push(w({pubkey:new V(B.marketAsks)})),b.push(w({pubkey:new V(B.marketEventQueue)})),b.push(w({pubkey:new V(B.marketBaseVault)})),b.push(w({pubkey:new V(B.marketQuoteVault)}))}else if(x.version===4){let B=P[S],C=x.status!==1;b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.authority),isWritable:!1})),b.push(w({pubkey:new V(C?B.id:B.marketProgramId)})),b.push(w({pubkey:new V(C?B.id:B.marketAuthority)})),b.push(w({pubkey:new V(C?B.id:B.openOrders)})),b.push(w({pubkey:new V(B.vault.A)})),b.push(w({pubkey:new V(B.vault.B)})),b.push(w({pubkey:new V(C?B.id:B.marketId)})),b.push(w({pubkey:new V(C?B.id:B.marketBids)})),b.push(w({pubkey:new V(C?B.id:B.marketAsks)})),b.push(w({pubkey:new V(C?B.id:B.marketEventQueue)})),b.push(w({pubkey:new V(C?B.id:B.marketBaseVault)})),b.push(w({pubkey:new V(C?B.id:B.marketQuoteVault)}))}else if(x.version===7){let B=P[S];b.push(w({pubkey:new V(B.authority)})),b.push(w({pubkey:new V(B.config.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(K?B.vault.A:B.vault.B)})),b.push(w({pubkey:new V(K?B.vault.B:B.vault.A)})),b.push(w({pubkey:new V(x.observationId)}))}else throw Error("pool type error")}let I=E([D("insId"),A("amountIn"),A("amountOut"),j(re(),y.length,"clmmPriceLimit")]),T=Buffer.alloc(I.span);return I.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},T),new mr({keys:b,programId:i,data:T})}function vu(i,e){if(i)if(e){let t=new xn(i).div(new xn(25));return t.gt(os)?t:os}else{let t=new xn(i).mul(new xn(25));return t.lt(is)?t:is}else return e?os:is}function Xm({routeProgram:i,ownerInfo:e,inputMint:t,swapInfo:n}){var o,r,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ge(m),p=t.equals(d.mintA.address)?Ft.add(tn):_t.sub(tn);return Ke.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((r=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?r:new xn(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:[Ps(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 V(m[d?"mintA":"mintB"].address),new V(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?z.CpmmSwapBaseIn:z.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[ms({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 xn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?z.AmmV5SwapBaseIn:z.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],f=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Vb(i,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,f,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new xn(0)),n.remainingAccounts)],instructionTypes:[z.RouteSwap],lookupTableAddress:[p.lookupTableAccount,f.lookupTableAccount].filter(y=>y!==void 0),address:{}}}else throw Error("route type error")}function u1({programId:i,wallet:e,amount:t,inputAccount:n,outputAccount:o,routeInfo:r,poolKeys:s}){var d;if(r.success===!1)throw Error("route info error");let a=[],c=[w({pubkey:lo,isWritable:!1}),w({pubkey:Mu,isWritable:!1}),w({pubkey:Ou,isWritable:!1}),w({pubkey:lr.programId,isWritable:!1}),w({pubkey:e,isSigner:!0})],u={[r.data.inputMint]:n,[r.data.outputMint]:o};c.push(w({pubkey:u[r.data.inputMint]})),c.push(w({pubkey:u[r.data.outputMint]}));for(let p=0;p<s.length;p++){let f=r.data.routePlan[p],y=s[p],b=f.inputMint===y.mintA.address;if(c.push(w({pubkey:new V(y.programId),isWritable:!1})),p===s.length-1)c.push(w({pubkey:u[f.outputMint]}));else{let g=f.outputMint;if(u[g]===void 0){let P=J(e,new V(g),y.programId===Nt.CLMM_PROGRAM_ID.toBase58()||y.programId===Nt.CREATE_CPMM_POOL_PROGRAM.toBase58()?new V(b?y.mintB.programId:y.mintA.programId):lo).publicKey;u[g]=P}c.push(w({pubkey:u[g]}))}if(c.push(w({pubkey:new V(f.inputMint)})),c.push(w({pubkey:new V(f.outputMint)})),y.programId===Nt.CLMM_PROGRAM_ID.toBase58()){let g=y;c.push(w({pubkey:new V(g.config.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(b?g.vault.A:g.vault.B)})),c.push(w({pubkey:new V(b?g.vault.B:g.vault.A)})),c.push(w({pubkey:new V(g.observationId)})),c.push(w({pubkey:In,isWritable:!1})),c.push(w({pubkey:new V(g.exBitmapAccount)})),a.push(vu(f.lastPoolPriceX64,b));for(let P of(d=f.remainingAccounts)!=null?d:[])c.push(w({pubkey:new V(P)}))}else if(y.programId===Nt.AMM_STABLE.toBase58()){let g=y;c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.authority),isWritable:!1})),c.push(w({pubkey:new V(g.marketProgramId),isWritable:!1})),c.push(w({pubkey:new V(g.marketAuthority),isWritable:!1})),c.push(w({pubkey:Ur,isWritable:!1})),c.push(w({pubkey:new V(g.openOrders)})),c.push(w({pubkey:new V(g.vault.A)})),c.push(w({pubkey:new V(g.vault.B)})),c.push(w({pubkey:new V(g.marketId)})),c.push(w({pubkey:new V(g.marketBids)})),c.push(w({pubkey:new V(g.marketAsks)})),c.push(w({pubkey:new V(g.marketEventQueue)})),c.push(w({pubkey:new V(g.marketBaseVault)})),c.push(w({pubkey:new V(g.marketQuoteVault)}))}else if(y.programId===Nt.AMM_V4.toBase58()){let g=y;c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.authority),isWritable:!1})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.vault.A)})),c.push(w({pubkey:new V(g.vault.B)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)}))}else if(y.programId===Nt.CREATE_CPMM_POOL_PROGRAM.toBase58()){let g=y;c.push(w({pubkey:new V(g.authority)})),c.push(w({pubkey:new V(g.config.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(b?g.vault.A:g.vault.B)})),c.push(w({pubkey:new V(b?g.vault.B:g.vault.A)})),c.push(w({pubkey:new V(g.observationId)}))}else throw Error("pool type error")}let l=E([D("insId"),A("amountIn"),A("amountOut"),j(re(),a.length,"clmmPriceLimit")]),m=Buffer.alloc(l.span);return l.encode({insId:0,amountIn:t,amountOut:new xn(r.data.otherAmountThreshold),clmmPriceLimit:a},m),new mr({keys:c,programId:i,data:m})}function c1({programId:i,wallet:e,inputAccount:t,outputAccount:n,routeInfo:o,poolKeys:r}){var m;if(o.success===!1)throw Error("route info error");let s=[],a=[w({pubkey:lo,isWritable:!1}),w({pubkey:Mu,isWritable:!1}),w({pubkey:Ou,isWritable:!1}),w({pubkey:lr.programId,isWritable:!1}),w({pubkey:e,isSigner:!0})],c={[o.data.inputMint]:t,[o.data.outputMint]:n};for(let d=r.length-1;d>=0;d--){let p=o.data.routePlan[d],f=r[d],y=p.inputMint===f.mintA.address;if(a.push(w({pubkey:new V(f.programId)})),d===0)a.push(w({pubkey:c[p.inputMint]}));else{let b=p.inputMint;if(c[b]===void 0){let g=J(e,new V(b),f.programId===Nt.CLMM_PROGRAM_ID.toBase58()||f.programId===Nt.CREATE_CPMM_POOL_PROGRAM.toBase58()?new V(y?f.mintA.programId:f.mintB.programId):lo).publicKey;c[b]=g}a.push(w({pubkey:c[b]}))}if(d===r.length-1)a.push(w({pubkey:c[p.outputMint]}));else{let b=p.outputMint;if(c[b]===void 0){let g=J(e,new V(b),f.programId===Nt.CLMM_PROGRAM_ID.toBase58()||f.programId===Nt.CREATE_CPMM_POOL_PROGRAM.toBase58()?new V(y?f.mintB.programId:f.mintA.programId):lo).publicKey;c[b]=g}a.push(w({pubkey:c[b]}))}if(a.push(w({pubkey:new V(p.inputMint)})),a.push(w({pubkey:new V(p.outputMint)})),f.programId===Nt.CLMM_PROGRAM_ID.toBase58()){let b=f;a.push(w({pubkey:new V(b.config.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(y?b.vault.A:b.vault.B)})),a.push(w({pubkey:new V(y?b.vault.B:b.vault.A)})),a.push(w({pubkey:new V(b.observationId)})),a.push(w({pubkey:In,isWritable:!1})),a.push(w({pubkey:new V(b.exBitmapAccount)})),s.push(vu(p.lastPoolPriceX64,y));for(let g of(m=p.remainingAccounts)!=null?m:[])a.push(w({pubkey:new V(g)}))}else if(f.programId===Nt.AMM_STABLE.toBase58()){let b=f;a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.authority),isWritable:!1})),a.push(w({pubkey:new V(b.marketProgramId),isWritable:!1})),a.push(w({pubkey:new V(b.marketAuthority),isWritable:!1})),a.push(w({pubkey:Ur,isWritable:!1})),a.push(w({pubkey:new V(b.openOrders)})),a.push(w({pubkey:new V(b.vault.A)})),a.push(w({pubkey:new V(b.vault.B)})),a.push(w({pubkey:new V(b.marketId)})),a.push(w({pubkey:new V(b.marketBids)})),a.push(w({pubkey:new V(b.marketAsks)})),a.push(w({pubkey:new V(b.marketEventQueue)})),a.push(w({pubkey:new V(b.marketBaseVault)})),a.push(w({pubkey:new V(b.marketQuoteVault)}))}else if(f.programId===Nt.AMM_V4.toBase58()){let b=f;a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.authority),isWritable:!1})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.vault.A)})),a.push(w({pubkey:new V(b.vault.B)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)}))}else if(f.programId===Nt.CREATE_CPMM_POOL_PROGRAM.toBase58()){let b=f;a.push(w({pubkey:new V(b.authority)})),a.push(w({pubkey:new V(b.config.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(y?b.vault.A:b.vault.B)})),a.push(w({pubkey:new V(y?b.vault.B:b.vault.A)})),a.push(w({pubkey:new V(b.observationId)}))}else throw Error("pool type error")}let u=E([D("insId"),A("amountIn"),A("amountOut"),j(re(),s.length,"clmmPriceLimit")]),l=Buffer.alloc(u.span);return u.encode({insId:1,amountIn:new xn(o.data.otherAmountThreshold),amountOut:new xn(o.data.outputAmount),clmmPriceLimit:s},l),new mr({keys:a,programId:i,data:l})}import{ASSOCIATED_TOKEN_PROGRAM_ID as hs,TOKEN_2022_PROGRAM_ID as Qb,TOKEN_PROGRAM_ID as pr}from"@solana/spl-token";import{SystemProgram as Ht,TransactionInstruction as Ct}from"@solana/web3.js";import Xn from"bn.js";var mo=E([A(),A("epoch"),D("curveType"),en("index"),A("migrateFee"),A("tradeFeeRate"),A("maxShareFeeRate"),A("minSupplyA"),A("maxLockRate"),A("minSellRateA"),A("minMigrateRateA"),A("minFundRaisingB"),F("mintB"),F("protocolFeeOwner"),F("migrateFeeOwner"),F("migrateToAmmWallet"),F("migrateToCpmmWallet"),j(A(),16)]),Db=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),A("startTime"),A("totalAllocatedShare")]),kn=E([A(),A("epoch"),D("bump"),D("status"),D("mintDecimalsA"),D("mintDecimalsB"),D("migrateType"),A("supply"),A("totalSellA"),A("virtualA"),A("virtualB"),A("realA"),A("realB"),A("totalFundRaisingB"),A("protocolFee"),A("platformFee"),A("migrateFee"),Db.replicate("vestingSchedule"),F("configId"),F("platformId"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("creator"),D("mintProgramFlag"),D("cpmmCreatorFeeOn"),j(D(),62)]),d1=E([A(),A("epoch"),F("poolId"),F("beneficiary"),A("claimedAmount"),A("tokenShareAmount"),j(A(),8)]),Fu=E([D("migrateType"),D("migrateCpmmFeeOn"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod")]),Wb=E([A("epoch"),D("index"),F("configId"),Fu.replicate("bondingCurveParam"),j(A(),50)]),Gn=E([A(),A("epoch"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),j(D(),64,"name"),j(D(),256,"web"),j(D(),256,"img"),F("cpConfigId"),A("creatorFeeRate"),F("transferFeeExtensionAuth"),j(D(),180),gl(Wb,"platformCurve")]);var qb=Buffer.from("vault_auth_seed","utf8"),Ub=Buffer.from("global_config","utf8"),Gb=Buffer.from("pool_vesting","utf8"),Xb=Buffer.from("platform_config","utf8"),zb=Buffer.from("platform_fee_vault_auth_seed","utf8"),Yb=Buffer.from("creator_fee_vault_auth_seed","utf8");function rn(i){return ie([qb],i)}function g1(i,e,t,n){return ie([Ub,e.toBuffer(),Hb(t),ss(n)],i)}function ai(i,e,t){return ie([nu,e.toBuffer(),t.toBuffer()],i)}function _u(i,e,t){return ie([ou,e.toBuffer(),t.toBuffer()],i)}function po(i){return ie([Buffer.from("__event_authority","utf8")],i)}function Hb(i){let e=new ArrayBuffer(1);return new DataView(e).setUint8(0,i),new Uint8Array(e)}function Eu(i,e){return ie([Xb,e.toBuffer()],i)}function dr(i,e,t){return ie([Gb,e.toBuffer(),t.toBuffer()],i)}function Sn(i,e,t){return ie([e.toBuffer(),t.toBuffer()],i)}function Vu(i){return ie([zb],i)}function Kn(i,e,t){return ie([e.toBuffer(),t.toBuffer()],i)}function Du(i){return ie([Yb],i)}var Rt={initialize:Buffer.from([175,175,109,31,13,152,155,237]),initializeV2:Buffer.from([67,153,175,39,218,16,38,32]),buyExactIn:Buffer.from([250,234,13,123,213,156,19,236]),buyExactOut:Buffer.from([24,211,116,40,105,3,153,56]),sellExactIn:Buffer.from([149,39,222,155,211,124,152,26]),sellExactOut:Buffer.from([95,200,71,34,8,9,11,166]),createVestingAccount:Buffer.from([129,178,2,13,217,172,230,218]),claimVestedToken:Buffer.from([49,33,104,30,189,157,79,35]),createPlatformConfig:Buffer.from([176,90,196,175,253,113,220,20]),claimPlatformFee:Buffer.from([156,39,208,135,76,237,61,72]),updatePlaformConfig:Buffer.from([195,60,76,129,146,45,67,143]),initializeWithToken2022:Buffer.from([37,190,126,222,44,154,171,17]),claimPlatformFeeFromVault:Buffer.from([117,241,198,168,248,218,80,29]),claimCreatorFee:Buffer.from([26,97,138,203,132,171,141,252]),updatePlatformCurveParam:Buffer.from([138,144,138,250,220,128,4,57]),removePlatformCurveParam:Buffer.from([27,30,62,169,93,224,24,145])};function C1(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){throw new Error("*** launchlab initialize has been deprecated, please use initializeV2 instead! ***")}function Ym(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I){let T=E([D("decimals"),ht("name"),ht("symbol"),ht("uri")]),k=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),D("cpmmCreatorFeeOn")]),S=E([D("index"),A("supply"),A("totalFundRaisingB"),D("migrateType")]),x=E([D("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),D("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:pr,isSigner:!1,isWritable:!1},{pubkey:pr,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}],B=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),C=Buffer.alloc(k.span),L=Buffer.alloc(b.type==="ConstantCurve"?x.span:S.span);return T.encode({decimals:d,name:p,symbol:f,uri:y},B),b.type==="ConstantCurve"?x.encode(U(_({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="FixedCurve"?S.encode(U(_({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="LinearCurve"&&S.encode(U(_({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),L),k.encode({totalLockedAmount:g,cliffPeriod:P,unlockPeriod:h,cpmmCreatorFeeOn:I},C),new Ct({keys:K,programId:i,data:Buffer.from([...Rt.initializeV2,...B,...L,...C])})}function Hm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I){let T=E([D("decimals"),ht("name"),ht("symbol"),ht("uri")]),k=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),D("cpmmCreatorFeeOn"),D("transferFeeExtensionParamsOption"),E([en("transferFeeBasePoints"),A("maxinumFee")]).replicate("transferFeeExtensionParams")]),S=E([D("index"),A("supply"),A("totalFundRaisingB"),D("migrateType")]),x=E([D("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),D("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Qb,isSigner:!1,isWritable:!1},{pubkey:pr,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}],B=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),C=Buffer.alloc(k.span),L=Buffer.alloc(y.type==="ConstantCurve"?x.span:S.span);return T.encode({decimals:m,name:d,symbol:p,uri:f},B),y.type==="ConstantCurve"?x.encode(U(_({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="FixedCurve"?S.encode(U(_({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="LinearCurve"&&S.encode(U(_({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),L),k.encode({totalLockedAmount:b,cliffPeriod:g,unlockPeriod:P,cpmmCreatorFeeOn:h,transferFeeExtensionParamsOption:I?1:0,transferFeeExtensionParams:I!=null?I:{transferFeeBasePoints:0,maxinumFee:new Xn(0)}},C),new Ct({keys:K,programId:i,data:Buffer.from([...Rt.initializeWithToken2022,...B,...L,...C])})}function Ts(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([A("amountB"),A("minAmountA"),A("shareFeeRate")]),T=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}];h&&T.push({pubkey:h,isSigner:!1,isWritable:!0}),T.push({pubkey:Ht.programId,isSigner:!1,isWritable:!1}),T.push({pubkey:f,isSigner:!1,isWritable:!0}),T.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(I.span);return I.encode({amountB:b,minAmountA:g,shareFeeRate:P!=null?P:new Xn(0)},k),new Ct({keys:T,programId:i,data:Buffer.from([...Rt.buyExactIn,...k])})}function Qm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([A("amountA"),A("maxAmountB"),A("shareFeeRate")]),T=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}];h&&T.push({pubkey:h,isSigner:!1,isWritable:!0}),T.push({pubkey:Ht.programId,isSigner:!1,isWritable:!1}),T.push({pubkey:f,isSigner:!1,isWritable:!0}),T.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(I.span);return I.encode({amountA:b,maxAmountB:g,shareFeeRate:P!=null?P:new Xn(0)},k),new Ct({keys:T,programId:i,data:Buffer.from([...Rt.buyExactOut,...k])})}function Is(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([A("amountA"),A("minAmountB"),A("shareFeeRate")]),T=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}];h&&T.push({pubkey:h,isSigner:!1,isWritable:!0}),T.push({pubkey:Ht.programId,isSigner:!1,isWritable:!1}),T.push({pubkey:f,isSigner:!1,isWritable:!0}),T.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(I.span);return I.encode({amountA:b,minAmountB:g,shareFeeRate:P!=null?P:new Xn(0)},k),new Ct({keys:T,programId:i,data:Buffer.from([...Rt.sellExactIn,...k])})}function jm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([A("amountB"),A("maxAmountA"),A("shareFeeRate")]),T=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}];h&&T.push({pubkey:h,isSigner:!1,isWritable:!0}),T.push({pubkey:Ht.programId,isSigner:!1,isWritable:!1}),T.push({pubkey:f,isSigner:!1,isWritable:!0}),T.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(I.span);return I.encode({amountB:b,maxAmountA:g,shareFeeRate:P!=null?P:new Xn(0)},k),new Ct({keys:T,programId:i,data:Buffer.from([...Rt.sellExactOut,...k])})}function qu(i,e,t,n,o,r,s,a,c){let u=E([]),l=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:hs,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new Ct({keys:l,programId:i,data:Buffer.from([...Rt.claimVestedToken,...m])})}function Uu(i,e,t,n,o,r){let s=E([A("shareAmount")]),a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Ht.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({shareAmount:r},c),new Ct({keys:a,programId:i,data:Buffer.from([...Rt.createVestingAccount,...c])})}function Gu(i,e,t,n,o,r,s,a,c){let u=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Ht.programId,isSigner:!1,isWritable:!0},{pubkey:hs,isSigner:!1,isWritable:!0}];return new Ct({keys:u,programId:i,data:Rt.claimPlatformFee})}function Zm(i,e,t,n,o,r,s,a,c,u,l,m,d){let p=E([A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),ht("name"),ht("web"),ht("img"),A("creatorFeeRate")]),f=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],y=Buffer.alloc(8*5+Buffer.from(l,"utf-8").length+Buffer.from(m,"utf-8").length+Buffer.from(d,"utf-8").length+4*3);return p.encode({platformScale:a.platformScale,creatorScale:a.creatorScale,burnScale:a.burnScale,feeRate:c,name:l,web:m,img:d,creatorFeeRate:u},y),new Ct({keys:f,programId:i,data:Buffer.from([...Rt.createPlatformConfig,...y])})}function $m(i,e,t,n){let o=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],r;if(n.type==="updateClaimFeeWallet"){let s=E([D("index"),F("value")]);r=Buffer.alloc(s.span),s.encode({index:0,value:n.value},r)}else if(n.type==="updateLockNftWallet"){let s=E([D("index"),F("value")]);r=Buffer.alloc(s.span),s.encode({index:1,value:n.value},r)}else if(n.type==="migrateCpLockNftScale"){let s=E([D("index"),A("platformScale"),A("creatorScale"),A("burnScale")]);r=Buffer.alloc(s.span),s.encode(_({index:2},n.value),r)}else if(n.type==="updateFeeRate"){let s=E([D("index"),A("value")]);r=Buffer.alloc(s.span),s.encode({index:3,value:n.value},r)}else if(n.type==="updateImg"||n.type==="updateName"||n.type==="updateWeb"){let s=E([D("index"),ht("value")]);r=Buffer.alloc(Buffer.from(n.value,"utf-8").length+4+1*1),n.type==="updateName"?s.encode({index:4,value:n.value},r):n.type==="updateWeb"?s.encode({index:5,value:n.value},r):n.type==="updateImg"&&s.encode({index:6,value:n.value},r)}else if(n.type==="updateCpConfigId"){o.push({pubkey:n.value,isSigner:!1,isWritable:!1});let s=E([D("index")]);r=Buffer.alloc(s.span),s.encode({index:7},r)}else if(n.type==="updateAll"){o.push({pubkey:n.value.cpConfigId,isSigner:!1,isWritable:!1});let s=E([D("index"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),ht("name"),ht("web"),ht("img"),F("transferFeeExtensionAuth"),A("creatorFeeRate")]);r=Buffer.alloc(1+32+32+8*4+4*3+Buffer.from(n.value.name,"utf-8").length+Buffer.from(n.value.web,"utf-8").length+Buffer.from(n.value.img,"utf-8").length+32+8),s.encode({index:8,platformClaimFeeWallet:n.value.platformClaimFeeWallet,platformLockNftWallet:n.value.platformLockNftWallet,platformScale:n.value.migrateCpLockNftScale.platformScale,creatorScale:n.value.migrateCpLockNftScale.creatorScale,burnScale:n.value.migrateCpLockNftScale.burnScale,feeRate:n.value.feeRate,name:n.value.name,web:n.value.web,img:n.value.img,transferFeeExtensionAuth:n.value.transferFeeExtensionAuth,creatorFeeRate:n.value.creatorFeeRate},r)}else throw Error("updateInfo params type error");return new Ct({keys:o,programId:i,data:Buffer.from([...Rt.updatePlaformConfig,...r])})}function Xu(i,e,t,n,o,r,s,a){let c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:hs,isSigner:!1,isWritable:!1}];return new Ct({keys:c,programId:i,data:Rt.claimPlatformFeeFromVault})}function zu(i,e,t,n,o,r,s){let a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:hs,isSigner:!1,isWritable:!1}];return new Ct({keys:a,programId:i,data:Rt.claimCreatorFee})}var zm=255,Wu=new Xn("18446744073709551615");function R1(i,e,t,n,o,r){let s=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1}],a=Buffer.alloc(1*2+8*6+D().span);return D().encode(o,a),Fu.encode({migrateType:r.migrateType?r.migrateType:zm,migrateCpmmFeeOn:r.migrateCpmmFeeOn?r.migrateCpmmFeeOn:zm,supply:r.supply?r.supply:new Xn(0),totalSellA:r.totalSellA?r.totalSellA:new Xn(0),totalFundRaisingB:r.totalFundRaisingB?r.totalFundRaisingB:new Xn(0),totalLockedAmount:r.totalLockedAmount?r.totalLockedAmount:Wu,cliffPeriod:r.cliffPeriod?r.cliffPeriod:Wu,unlockPeriod:r.unlockPeriod?r.unlockPeriod:Wu},a,1),new Ct({keys:s,programId:i,data:Buffer.from([...Rt.updatePlatformCurveParam,...a])})}function L1(i,e,t,n){let o=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],r=Buffer.alloc(D().span);return D().encode(n,r),new Ct({keys:o,programId:i,data:Buffer.from([...Rt.removePlatformCurveParam,...r,1,2])})}var Jm=(t=>(t[t.OnlyTokenB=0]="OnlyTokenB",t[t.BothToken=1]="BothToken",t))(Jm||{});import Bs from"bn.js";var fo=class{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){throw Error()}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:s,decimalB:a}){throw Error()}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){throw Error()}static buyExactIn({poolInfo:e,amount:t}){throw Error()}static buyExactOut({poolInfo:e,amount:t}){throw Error()}static sellExactIn({poolInfo:e,amount:t}){throw Error()}static sellExactOut({poolInfo:e,amount:t}){throw Error()}};var xs=class extends fo{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.add(e.realB).toString()).div(e.virtualA.sub(e.realA).toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:s,decimalB:a}){return new M(o.sub(r).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),r=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB.add(r)).toString()).div(e.virtualA.sub(e.realA.add(o)).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){if(e.lte(n))throw Error("supply need gt total sell");let s=e.sub(n).sub(o);if(s.lte(new Bs(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(r);if(a.lte(new Bs(0)))throw Error("tfMinusMf <= 0");let c=a.mul(n).mul(n).div(s),u=a.mul(n).div(s).sub(t),l=c.div(u),m=t.mul(t).div(u);if(l.lt(new Bs(0))||m.lt(new Bs(0)))throw Error("invalid input 0");return{a:l,b:m,c:n}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static getAmountOut({amountIn:e,inputReserve:t,outputReserve:n}){let o=e.mul(n),r=t.add(e);return o.div(r)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let o=t.mul(e),r=n.sub(e);return ko(o,r)}};import ln from"bn.js";import Ss from"bn.js";var Ks=class extends fo{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:s,decimalB:a}){return new M(o.sub(r).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),r=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB).add(r).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){let s=e.sub(o);if(s.lte(new Ss(0)))throw Error("invalid input 1");let a=new Ss(2).mul(t).sub(r),u=t.mul(s).div(a);if(u.lt(new Ss(0))||t.lt(new Ss(0)))throw Error("invalid input 0");return{a:u,b:t,c:u}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualB,initOutput:e.virtualA})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualB,initOutput:e.virtualA})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualA,initOutput:e.virtualB})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualA,initOutput:e.virtualB})}static getAmountOut({amountIn:e,initInput:t,initOutput:n}){return n.mul(e).div(t)}static getAmountIn({amountOut:e,initInput:t,initOutput:n}){let o=t.mul(e);return ko(o,n)}};import Qt from"bn.js";import ui from"bn.js";var fr=class{static _multipler(e){return new M(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new M(e.toString()).div(this._Q64).mul(this._multipler(t)).div(this._multipler(n))}static getPriceX64({price:e,decimalA:t,decimalB:n}){let o=e.mul(this._multipler(n)).div(this._multipler(t));return new ui(o.mul(this._Q64).toFixed(0))}};fr._Q64=new M(new ui(1).shln(64).toString());function Q1({supply:i,totalFundRaisingB:e,totalLockedAmount:t,totalSellA:n,migrateType:o,decimalsA:r}){let s=i.sub(n).sub(t),a=new ui(new M(s.mul(e).toString()).sqrt().toFixed(0));if(o==="amm"){if(a.gt(new ui(10).pow(new ui(r))))return!0}else if(o==="cpmm"){if(a.gt(new ui(100)))return!0}else throw Error("migrate type error");return!1}var Cs=class extends fo{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualA.mul(e.realA).toString()).div(fr._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:s,decimalB:a}){return new M(o.sub(r).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),r=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB).add(r).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){let s=e.sub(o);if(s.lte(new Qt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new Qt(3)).sub(r),u=t.mul(new Qt(2)).mul(s).div(a),l=u.mul(u),m=t.mul(new Qt(2)).mul(pt).div(l);if(!m.gt(new Qt(0)))throw Error("a need gt 0");if(!Wi.gt(m))throw Error("a need lt u64 max");if(m.lt(new Qt(0))||u.lt(new Qt(0)))throw Error("invalid input 0");return{a:m,b:new Qt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new Qt(2).mul(n).mul(pt).div(e.virtualA);return new Qt(new M(o.toString()).sqrt().toFixed(0)).sub(e.realA)}static buyExactOut({poolInfo:e,amount:t}){let n=e.realA.add(t),o=n.mul(n);return ko(e.virtualA.mul(o),new Qt(2).mul(pt)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),r=ko(e.virtualA.mul(o),new Qt(2).mul(pt));return e.realB.sub(r)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new Qt(2).mul(n).mul(pt).div(e.virtualA),r=new Qt(new M(o.toString()).sqrt().toFixed(0));return e.realA.sub(r)}};var Wt=class{static getPoolCurvePointByPoolInfo({curveType:e,pointCount:t,poolInfo:n}){return this.getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n.supply,totalFundRaising:n.totalFundRaisingB,totalSell:n.totalSellA,totalLockedAmount:n.vestingSchedule.totalLockedAmount,migrateFee:n.migrateFee,decimalA:n.mintDecimalsA,decimalB:n.mintDecimalsB})}static getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n,totalFundRaising:o,totalSell:r,totalLockedAmount:s,migrateFee:a,decimalA:c,decimalB:u}){if(t<3)throw Error("point count < 3");let l=this.getCurve(e),m=l.getInitParam({supply:n,totalFundRaising:o,totalSell:r,totalLockedAmount:s,migrateFee:a}),d=l.getPoolInitPriceByInit(U(_({},m),{decimalA:c,decimalB:u})),p=o.div(new ln(t-1)),f=new ln(0),y=[{price:d,totalSellSupply:0}],{a:b,b:g}=m,P=f,h=f;for(let I=1;I<t;I++){let T=I!==t-1?p:o.sub(h),k=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:P,realB:h,totalFundRaisingB:o,totalSellA:r},amountB:T,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});P=P.add(k.amountA.amount),h=h.add(k.amountB);let S=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:P,realB:h},decimalA:c,decimalB:u,curveType:e});y.push({price:S,totalSellSupply:new M(P.toString()).div(10**c).toNumber()})}return y}static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n,curveType:o}){return this.getCurve(o).getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n})}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o,curveType:r}){return this.getCurve(r).getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o})}static getPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getEndPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getPoolEndPriceReal({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolEndPriceReal({poolInfo:e,decimalA:n,decimalB:o})}static checkParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,decimals:r,config:s,migrateType:a}){if(Number(r)!==6)throw Error("decimals = 6");if(e.mul(s.maxLockRate).div(Gt).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(s.minSupplyA.mul(new ln(10**r))))throw Error("supply lt min supply");let u=e.mul(s.minSellRateA).div(Gt);if(n.lt(u))throw Error("invalid input");if(t.lt(s.minFundRaisingB))throw Error("total fund raising lt min fund raising");let l=e.sub(n).sub(o),m=e.mul(s.minMigrateRateA).div(Gt);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(o),p=new ln(new M(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new ln(10).pow(new ln(r));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new ln(100);if(p.lte(f))throw Error("check migrate lp error")}else throw Error("migrate type error")}static buyExactIn({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a}),m=this.calculateFee({amount:t,feeRate:l}),d=t.sub(m),p=this.getCurve(r),f=p.buyExactIn({poolInfo:e,amount:d}),y=e.totalSellA.sub(e.realA),b,g,P;if(f.gt(y)){b=y;let I=p.buyExactOut({poolInfo:e,amount:b});g=this.calculatePreFee({postFeeAmount:I,feeRate:l}),P=g.sub(I)}else b=f,g=t,P=m;let h=this.splitFee({totalFee:P,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a});return{amountA:da(b,c,u),amountB:g,splitFee:h}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=e.totalSellA.sub(e.realA),m=pa(t,c,u),d=m.fee?m.amount.add(m.fee):m.amount;t.gt(l)&&(d=l);let f=this.getCurve(r).buyExactOut({poolInfo:e,amount:d}),y=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a}),b=this.calculatePreFee({postFeeAmount:f,feeRate:y}),g=b.sub(f),P=this.splitFee({totalFee:g,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:b,splitFee:P}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.getCurve(r),m=da(t,c,u),d=m.fee?m.amount.sub(m.fee):m.amount,p=l.sellExactIn({poolInfo:e,amount:d}),f=this.calculateFee({amount:p,feeRate:this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a})}),y=this.splitFee({totalFee:f,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:p.sub(f),splitFee:y}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a}),m=this.calculatePreFee({postFeeAmount:t,feeRate:l});if(e.realB.lt(m))throw Error("Insufficient liquidity");let d=m.sub(t),f=Wt.getCurve(r).sellExactOut({poolInfo:e,amount:m});if(f.gt(e.realA))throw Error();let y=this.splitFee({totalFee:d,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a});return{amountA:pa(f,c,u),amountB:t,splitFee:y}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:r}){let s=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:r}),a=s.isZero()?new ln(0):e.mul(n).div(s),c=s.isZero()?new ln(0):e.mul(o).div(s),u=s.isZero()?new ln(0):e.mul(r).div(s),l=e.sub(a).sub(c).sub(u);return{platformFee:a,shareFee:c,protocolFee:l,creatorFee:u}}static calculateFee({amount:e,feeRate:t}){return gi(e,t,Gt)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Gt),o=Gt.sub(t);return n.add(o).sub(new ln(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new ln(1e6)))throw Error("total fee rate gt 1_000_000");return e.add(t).add(n).add(o)}static getCurve(e){switch(e){case 0:return xs;case 1:return Ks;case 2:return Cs}throw Error("find curve error")}};import{NATIVE_MINT as zn,TOKEN_2022_PROGRAM_ID as Oo,TOKEN_PROGRAM_ID as Ue,createAssociatedTokenAccountIdempotentInstruction as jt,createSyncNativeInstruction as jb,getTransferFeeConfig as Rs,unpackMint as Ls}from"@solana/spl-token";import me from"bn.js";import{PublicKey as ed,SystemProgram as Zb}from"@solana/web3.js";var Ns={initPriceX64:new me("515752397214619"),supply:new me(1e15),totalSellA:new me(7931e11),totalFundRaisingB:new me(85e9),totalFundRaisingBUSD:new me(125e8),totalLockedAmount:new me("0"),cliffPeriod:new me("0"),unlockPeriod:new me("0"),decimals:6,virtualA:new me("1073471847374405"),virtualB:new me("30050573465"),realA:new me(0),realB:new me(0),protocolFee:new me(0),platformId:new ed("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new me(0),cliffPeriod:new me(0),unlockPeriod:new me(0),startTime:new me(0),totalAllocatedShare:new me(0)}},yo=new me(1e4),jR=new Set(["USDCoctVLVnvTXBEuP9s8hntucdJokbo17RwHuNXemT","USD1ttGY1N17NEEHLmELoaybftRBUSErhqYiQzvEmuB"]),yr=class extends Xe{constructor(e){super(e)}async createLaunchpad(L){var N=L,{programId:e=mt,authProgramId:t,platformId:n=Ns.platformId,mintA:o,decimals:r=6,mintBDecimals:s=9,name:a,symbol:c,uri:u,migrateType:l,configId:m,configInfo:d,platformFeeRate:p,txVersion:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g,buyAmount:P,minMintAAmount:h,slippage:I,associatedOnly:T=!0,checkCreateATAOwner:k=!1,extraSigners:S,token2022:x,transferFeeExtensionParams:K,creatorFeeOn:B=0}=N,C=Qe(N,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","platformFeeRate","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn"]);var Jt,wr,tc,nc,oc,ic,rc,sc,ac,uc,cc;let O=this.createTxBuilder(g);t=t!=null?t:rn(e).publicKey,x=!!K,x&&(l="cpmm");let R=d;if(!R&&m){let sn=await this.scope.connection.getAccountInfo(m);sn&&(R=mo.decode(sn.data))}R||this.logAndCreateError("config not found");let v=R.mintB,Y=R.curveType,{publicKey:Q}=ai(e,o,v),{publicKey:de}=_u(e,Q,o),{publicKey:ce}=_u(e,Q,v),{publicKey:le}=_n(o);this.logDebug(`create token: ${o.toBase58()}, mintB: ${v.toBase58()}, decimals A:${r}/B:${s}, config:${m.toBase58()}`),c.length>10&&this.logAndCreateError("Symbol length should shorter than 11"),u||this.logAndCreateError("uri should not empty");let fe=(await this.scope.api.fetchLaunchConfigs()).find(sn=>sn.key.pubKey===m.toBase58()),oe=(Jt=C==null?void 0:C.supply)!=null?Jt:new me(fe.defaultParams.supplyInit),ne=(wr=C==null?void 0:C.totalSellA)!=null?wr:new me(fe.defaultParams.totalSellA),Le=(tc=C==null?void 0:C.totalFundRaisingB)!=null?tc:new me(fe.defaultParams.totalFundRaisingB),_e=(nc=C==null?void 0:C.totalLockedAmount)!=null?nc:new me(0),he=p;if(!p){let sn=await this.scope.connection.getAccountInfo(n);sn||this.logAndCreateError("platform id not found:",n.toString()),he=Gn.decode(sn.data).feeRate}let Zt=Wt.getCurve(R.curveType).getInitParam({supply:oe,totalFundRaising:Le,totalSell:ne,totalLockedAmount:_e,migrateFee:R.migrateFee}),it;try{it=await this.scope.token.getTokenInfo(v)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let $t={epoch:new me(896),bump:254,status:0,mintDecimalsA:r,mintDecimalsB:(oc=it==null?void 0:it.decimals)!=null?oc:s,supply:oe,totalSellA:ne,mintA:new ed(o),mintB:v,virtualA:Zt.a,virtualB:Zt.b,realA:Ns.realA,realB:Ns.realB,migrateFee:R.migrateFee,migrateType:l==="amm"?0:1,protocolFee:Ns.protocolFee,platformFee:he,platformId:n,configId:m,vaultA:de,vaultB:ce,creator:this.scope.ownerPubKey,totalFundRaisingB:Le,vestingSchedule:{totalLockedAmount:_e,cliffPeriod:new me(0),unlockPeriod:new me(0),startTime:new me(0),totalAllocatedShare:new me(0)},mintProgramFlag:x?1:0,cpmmCreatorFeeOn:B},vs=Wt.getCurve(R.curveType),{c:Fs}=vs.getInitParam({supply:$t.supply,totalFundRaising:$t.totalFundRaisingB,totalLockedAmount:_e,totalSell:R.curveType===0?$t.totalSellA:new me(0),migrateFee:R.migrateFee});try{Wt.checkParam({supply:$t.supply,totalFundRaising:$t.totalFundRaisingB,totalSell:Fs,totalLockedAmount:_e,decimals:$t.mintDecimalsA,config:R,migrateType:l}),this.logDebug("check init params success")}catch(sn){this.logAndCreateError(`check create mint params failed, ${sn.message}`)}O.addInstruction({instructions:[x?Hm(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Q,o,v,de,ce,r,a,c,u||"https://",{type:Y===0?"ConstantCurve":Y===1?"FixedCurve":Y===2?"LinearCurve":"ConstantCurve",totalSellA:ne,migrateType:l,supply:oe,totalFundRaisingB:Le},_e,(ic=C==null?void 0:C.cliffPeriod)!=null?ic:new me(0),(rc=C==null?void 0:C.unlockPeriod)!=null?rc:new me(0),B,K):Ym(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Q,o,v,de,ce,le,r,a,c,u||"https://",{type:Y===0?"ConstantCurve":Y===1?"FixedCurve":Y===2?"LinearCurve":"ConstantCurve",totalSellA:ne,migrateType:l,supply:oe,totalFundRaisingB:Le},_e,(sc=C==null?void 0:C.cliffPeriod)!=null?sc:new me(0),(ac=C==null?void 0:C.unlockPeriod)!=null?ac:new me(0),B)]});let Mo=x?await this.scope.connection.getEpochInfo():void 0,bo=K?{epoch:BigInt((Mo==null?void 0:Mo.epoch)||0),maximumFee:BigInt((uc=K==null?void 0:K.maxinumFee.toString())!=null?uc:0),transferFeeBasisPoints:(cc=K==null?void 0:K.transferFeeBasePoints)!=null?cc:0}:void 0,vo={amountA:{amount:new me(0),fee:void 0,expirationTime:void 0},amountB:new me(0),splitFee:{platformFee:new me(0),shareFee:new me(0),protocolFee:new me(0),creatorFee:new me(0)}},Fo;if(S!=null&&S.length&&O.addInstruction({signers:S}),!C.createOnly){let{builder:sn,extInfo:id}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:x?Oo:void 0,mintA:o,mintB:v,poolInfo:$t,buyAmount:P,minMintAAmount:h,shareFeeRate:C.shareFeeRate,shareFeeReceiver:C.shareFeeReceiver,configInfo:R,platformFeeRate:he,slippage:I,associatedOnly:T,checkCreateATAOwner:k,skipCheckMintA:!bo,transferFeeConfigA:bo?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:bo,newerTransferFee:bo}:void 0,fromCreate:!0});O.addInstruction(_({},sn.AllTxData)),vo=_({},id),Fo=(this.scope.cluster==="devnet"||f===1)&&C.shareFeeReceiver?[sn.allInstructions[0]]:void 0}return O.addTipInstruction(b),f===0?O.sizeCheckBuildV0({computeBudgetConfig:y,swapInfo:vo,splitIns:Fo,address:U(_({},$t),{poolId:Q})}):O.sizeCheckBuild({computeBudgetConfig:y,swapInfo:vo,splitIns:Fo,address:U(_({},$t),{poolId:Q})})}async buyToken({programId:e=mt,authProgramId:t,mintA:n,mintAProgram:o=Ue,mintB:r=zn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,buyAmount:p,minMintAAmount:f,slippage:y,shareFeeRate:b=new me(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:h=!1,fromCreate:I=!1,transferFeeConfigA:T,skipCheckMintA:k=!1}){var ne,Le,_e;p.lte(new me(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let S=this.createTxBuilder(d),{publicKey:x}=ai(e,n,r);t=t!=null?t:rn(e).publicKey;let K=T;if(!k)if(K)o=Oo;else{let he=await this.scope.connection.getAccountInfo(n);if(he&&he.owner.equals(Oo)){o=he.owner;let qt=Ls(n,he,o);K=Rs(qt)||void 0}}let B=this.scope.account.getAssociatedTokenAccount(n,o),C=r.equals(zn),L=I&&C,N=L?this.scope.account.getAssociatedTokenAccount(r,Ue):null,O=C;if(S.addInstruction({instructions:[jt(this.scope.ownerPubKey,B,this.scope.ownerPubKey,n,o),...L?[jt(this.scope.ownerPubKey,N,this.scope.ownerPubKey,r,Ue),Zb.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N,lamports:BigInt(p.toString())}),jb(N)]:[]]}),!L){let{account:he,instructionParams:qt}=await this.scope.account.getOrCreateTokenAccount({mint:r,owner:this.scope.ownerPubKey,createInfo:O?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!O,notUseTokenAccount:O,associatedOnly:O?!1:P,checkCreateATAOwner:h});he&&(N=he),S.addInstruction(qt||{})}N===void 0&&this.logAndCreateError(`cannot found mintB(${r.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let R=s;if(!R){let he=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});he||this.logAndCreateError("cannot found pool:",x.toBase58()),R=kn.decode(he.data)}let v=a,Y=await We(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(he=>({pubkey:he})));if(!v){let he=Y.find(qt=>qt.pubkey.equals(R.configId));(!he||!he.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=mo.decode(he.accountInfo.data)}let Q=Y.find(he=>he.pubkey.equals(R.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let de=Gn.decode(Q.accountInfo.data);c=c||de.feeRate;let ce=Wt.buyExactIn({poolInfo:R,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:de.creatorFeeRate,transferFeeConfigA:K,slot:await this.scope.connection.getSlot()}),le=new M(ce.amountA.amount.toString()).sub((Le=(ne=ce.amountA.fee)==null?void 0:ne.toString())!=null?Le:0),Ae=y?new M(yo.sub(y).toNumber()/yo.toNumber()).clampedTo(0,1):new M(1),fe=f!=null?f:y?new me(le.mul(Ae).toFixed(0)):ce.amountA.amount.sub((_e=ce.amountA.fee)!=null?_e:new me(0));ce.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${ce.amountA.toString()}, input ${r.toBase58()} amount: ${ce.amountB.toString()}`);let oe=g?J(g,r,Ue).publicKey:void 0;return oe&&S.addInstruction({instructions:[jt(this.scope.ownerPubKey,oe,g,r)]}),S.addInstruction({instructions:[Ts(e,this.scope.ownerPubKey,t,R.configId,R.platformId,x,B,N,R.vaultA,R.vaultB,n,r,o,Ue,Sn(e,R.platformId,r).publicKey,Kn(e,R.creator,r).publicKey,ce.amountB.lt(p)?ce.amountB:p,fe,b,oe)]}),S.addCustomComputeBudget(l),S.addTipInstruction(m),S.versionBuild({txVersion:u,extInfo:U(_({},ce),{decimalOutAmount:le,minDecimalOutAmount:new M(fe.toString())})})}async buyTokenExactOut({programId:e=mt,authProgramId:t,mintA:n,mintAProgram:o=Ue,mintB:r=zn,poolInfo:s,configInfo:a,transferFeeConfigA:c,platformFeeRate:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p,maxBuyAmount:f,outAmount:y,slippage:b,shareFeeRate:g=new me(0),shareFeeReceiver:P,associatedOnly:h=!0,checkCreateATAOwner:I=!1,skipCheckMintA:T=!1}){y.lte(new me(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let k=this.createTxBuilder(p),{publicKey:S}=ai(e,n,r);t=t!=null?t:rn(e).publicKey;let x=s;if(!x){let oe=await this.scope.connection.getAccountInfo(S,{commitment:"processed"});oe||this.logAndCreateError("cannot found pool:",S.toBase58()),x=kn.decode(oe.data)}let K=a,B=await We(this.scope.connection,[K?void 0:x.configId,x.platformId].filter(Boolean).map(oe=>({pubkey:oe})));if(!K){let oe=B.find(ne=>ne.pubkey.equals(x.configId));(!oe||!oe.accountInfo)&&this.logAndCreateError("config not found: ",x.configId.toBase58()),K=mo.decode(oe.accountInfo.data)}let C=B.find(oe=>oe.pubkey.equals(x.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",x.configId.toBase58());let L=Gn.decode(C.accountInfo.data);u=u||L.feeRate;let N=c;if(!T)if(N)o=Oo;else{let oe=await this.scope.connection.getAccountInfo(n);if(oe&&oe.owner.equals(Oo)){o=oe.owner;let ne=Ls(n,oe,o);N=Rs(ne)||void 0}}let O=Wt.buyExactOut({poolInfo:x,amountA:y,protocolFeeRate:K.tradeFeeRate,platformFeeRate:u,curveType:K.curveType,shareFeeRate:g,creatorFeeRate:L.creatorFeeRate,transferFeeConfigA:N,slot:await this.scope.connection.getSlot()}),R=new M(O.amountB.toString()),v=b?new M(yo.add(b).toNumber()/yo.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new M(1),Y=(f!=null?f:b)?new me(R.mul(v).toFixed(0)):O.amountB,Q=this.scope.account.getAssociatedTokenAccount(n,o),de=null,ce=r.equals(zn);k.addInstruction({instructions:[jt(this.scope.ownerPubKey,Q,this.scope.ownerPubKey,n,o)]});let{account:le,instructionParams:Ae}=await this.scope.account.getOrCreateTokenAccount({mint:r,owner:this.scope.ownerPubKey,createInfo:ce?{payer:this.scope.ownerPubKey,amount:O.amountB}:void 0,skipCloseAccount:!ce,notUseTokenAccount:ce,associatedOnly:ce?!1:h,checkCreateATAOwner:I});le&&(de=le),k.addInstruction(Ae||{}),de===void 0&&this.logAndCreateError(`cannot found mintB(${r.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let fe=P?J(P,r,Ue).publicKey:void 0;return fe&&k.addInstruction({instructions:[jt(this.scope.ownerPubKey,fe,P,r)]}),k.addInstruction({instructions:[Qm(e,this.scope.ownerPubKey,t,x.configId,x.platformId,S,Q,de,x.vaultA,x.vaultB,n,r,o,Ue,Sn(e,x.platformId,r).publicKey,Kn(e,x.creator,r).publicKey,y,Y,g,fe)]}),k.addCustomComputeBudget(m),k.addTipInstruction(d),k.versionBuild({txVersion:l,extInfo:{maxSpentAmount:Y,outAmount:y}})}async sellToken({programId:e=mt,authProgramId:t,mintAProgram:n=Ue,mintA:o,mintB:r=zn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,sellAmount:p,minAmountB:f,slippage:y,shareFeeRate:b=new me(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:h=!1,skipCheckMintA:I=!1}){t=t!=null?t:rn(e).publicKey;let T=this.createTxBuilder(d);p.lte(new me(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:k}=ai(e,o,r),S;if(!I){let ne=await this.scope.connection.getAccountInfo(o);if(ne&&ne.owner.equals(Oo)){n=ne.owner;let Le=Ls(o,ne,n);S=Rs(Le)||void 0}}let x=null,K=null,B=r.equals(zn),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:h});C&&(x=C),T.addInstruction(L||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:r,owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:B?!1:P,checkCreateATAOwner:h});N&&(K=N),T.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=s;if(!R){let ne=await this.scope.connection.getAccountInfo(k,{commitment:"processed"});ne||this.logAndCreateError("cannot found pool",k.toBase58()),R=kn.decode(ne.data)}let v=a,Y=await We(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(ne=>({pubkey:ne})));if(!v){let ne=Y.find(Le=>Le.pubkey.equals(R.configId));(!ne||!ne.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=mo.decode(ne.accountInfo.data)}let Q=Y.find(ne=>ne.pubkey.equals(R.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let de=Gn.decode(Q.accountInfo.data);c=c||de.feeRate;let ce=Wt.sellExactIn({poolInfo:R,amountA:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:de.creatorFeeRate,transferFeeConfigA:S,slot:await this.scope.connection.getSlot()}),le=new M(ce.amountB.toString()),Ae=y?new M(yo.sub(y).toNumber()/yo.toNumber()).clampedTo(0,1):new M(1),fe=f!=null?f:y?new me(le.mul(Ae).toFixed(0)):ce.amountB;fe.lte(new me(0))&&this.logAndCreateError(`out ${r.toBase58()} amount should be gt 0`);let oe=g?J(g,r,Ue).publicKey:void 0;return oe&&T.addInstruction({instructions:[jt(this.scope.ownerPubKey,oe,g,r)]}),T.addInstruction({instructions:[Is(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,x,K,R.vaultA,R.vaultB,o,r,n,Ue,Sn(e,R.platformId,r).publicKey,Kn(e,R.creator,r).publicKey,ce.amountA.amount.lt(p)?ce.amountA.amount:p,fe,b,oe)]}),T.addCustomComputeBudget(l),T.addTipInstruction(m),T.versionBuild({txVersion:u,extInfo:{outAmount:fe}})}async sellTokenExactOut({programId:e=mt,authProgramId:t,mintAProgram:n=Ue,mintA:o,mintB:r=zn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,inAmount:p,maxSellAmount:f,slippage:y,shareFeeRate:b=new me(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:h=!1,skipCheckMintA:I=!1}){t=t!=null?t:rn(e).publicKey;let T=this.createTxBuilder(d);f!=null&&f.lte(new me(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:k}=ai(e,o,r),S;if(!I){let ne=await this.scope.connection.getAccountInfo(o);if(ne&&ne.owner.equals(Oo)){n=ne.owner;let Le=Ls(o,ne,n);S=Rs(Le)||void 0}}let x=null,K=null,B=r.equals(zn),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:h});C&&(x=C),T.addInstruction(L||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:r,owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:B?!1:P,checkCreateATAOwner:h});N&&(K=N),T.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=s;if(!R){let ne=await this.scope.connection.getAccountInfo(k,{commitment:"processed"});ne||this.logAndCreateError("cannot found pool",k.toBase58()),R=kn.decode(ne.data)}let v=a,Y=await We(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(ne=>({pubkey:ne})));if(!v){let ne=Y.find(Le=>Le.pubkey.equals(R.configId));(!ne||!ne.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=mo.decode(ne.accountInfo.data)}let Q=Y.find(ne=>ne.pubkey.equals(R.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let de=Gn.decode(Q.accountInfo.data);c=c||de.feeRate;let ce=Wt.sellExactOut({poolInfo:R,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:de.creatorFeeRate,transferFeeConfigA:S,slot:await this.scope.connection.getSlot()}),le=new M(ce.amountA.amount.toString()),Ae=y?new M(yo.add(y).toNumber()/yo.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new M(1),fe=(f!=null?f:y)?new me(le.mul(Ae).toFixed(0)):ce.amountA.amount,oe=g?J(g,r,Ue).publicKey:void 0;return oe&&T.addInstruction({instructions:[jt(this.scope.ownerPubKey,oe,g,r)]}),T.addInstruction({instructions:[jm(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,x,K,R.vaultA,R.vaultB,o,r,n,Ue,Sn(e,R.platformId,r).publicKey,Kn(e,R.creator,r).publicKey,p,fe,b,oe)]}),T.addCustomComputeBudget(l),T.addTipInstruction(m),T.versionBuild({txVersion:u,extInfo:{maxSellAmount:fe}})}async createPlatformConfig({programId:e=mt,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,cpConfigId:r,migrateCpLockNftScale:s,transferFeeExtensionAuth:a,creatorFeeRate:c,feeRate:u,name:l,web:m,img:d,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b}){let g=this.createTxBuilder(b),{publicKey:P}=Eu(e,t);return g.addInstruction({instructions:[Zm(e,t,n,o,P,r,a,s,u,c,l,m,d)]}),g.addCustomComputeBudget(f),g.addTipInstruction(y),g.versionBuild({txVersion:p,extInfo:{platformId:P}})}async updatePlatformConfig({programId:e=mt,platformAdmin:t,platformId:n,updateInfo:o,txVersion:r,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Eu(e,t).publicKey;return u.addInstruction({instructions:[$m(e,t,l,o)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:r})}async claimPlatformFee({programId:e=mt,authProgramId:t,platformId:n,poolId:o,platformClaimFeeWallet:r,mintB:s,vaultB:a,mintBProgram:c=Ue,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){var g;let p=this.createTxBuilder(d);t=t!=null?t:rn(e).publicKey;let f=s,y=a;if(!f){let P=await this.scope.connection.getAccountInfo(o,{commitment:"processed"});P||this.logAndCreateError("cannot found pool:",o.toBase58());let h=kn.decode(P.data),I=await this.scope.connection.getAccountInfo(h.configId,{commitment:"processed"});I||this.logAndCreateError("cannot found config:",h.configId.toBase58()),f=mo.decode(I.data).mintB,y=y!=null?y:h.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(g=y==null?void 0:y.toBase58())!=null?g:"");let b=J(this.scope.ownerPubKey,f,Ue).publicKey;return p.addInstruction({instructions:[jt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[Gu(e,r,t,o,n,y,b,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=mt,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:r,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:rn(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:kn.span},{memcmp:{offset:kn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=kn.decode(m.account.data);if(d.platformFee.lte(new me(0)))return;let p=J(this.scope.ownerPubKey,d.mintB,Ue).publicKey;u.addInstruction({instructions:[jt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[Gu(e,o,t,m.pubkey,n,d.vaultB,p,d.mintB,Ue)]})}),u.addTipInstruction(a),r===0?u.sizeCheckBuildV0({computeBudgetConfig:s}):u.sizeCheckBuild({computeBudgetConfig:s})}async createVesting({programId:e=mt,poolId:t,beneficiary:n,shareAmount:o,txVersion:r,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=await this.getRpcPoolInfo({poolId:t});o.add(l.vestingSchedule.totalAllocatedShare).gt(l.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount");let m=dr(e,t,n).publicKey;return u.addInstruction({instructions:[Uu(e,this.scope.ownerPubKey,n,t,m,o)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:r})}async createMultipleVesting({programId:e=mt,poolId:t,beneficiaryList:n,txVersion:o,computeBudgetConfig:r,feePayer:s}){let a=this.createTxBuilder(s);n.length===0&&this.logAndCreateError("beneficiaryList is null");let c=await this.getRpcPoolInfo({poolId:t});return n.reduce((l,m)=>l.add(m.shareAmount),c.vestingSchedule.totalAllocatedShare).gt(c.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount"),n.forEach(l=>{let m=dr(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Uu(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:r}):a.sizeCheckBuild({computeBudgetConfig:r})}async claimVesting({programId:e=mt,poolId:t,poolInfo:n,vestingRecord:o,txVersion:r,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=rn(e).publicKey,m=o||dr(e,t,this.scope.ownerPubKey).publicKey,d=n;if(!d){let f=await this.scope.connection.getAccountInfo(t);f||this.logAndCreateError("pool not found"),d=kn.decode(f.data)}let p=J(this.scope.ownerPubKey,d.mintA,Ue).publicKey;return u.addInstruction({instructions:[jt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[qu(e,this.scope.ownerPubKey,l,t,m,p,d.vaultA,d.mintA,Ue)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:r})}async claimMultiVesting({programId:e=mt,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:r,computeBudgetConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=_({},n),l=rn(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=_(_({},u),d.poolInfoMap)}return t.forEach(d=>{let p=d.toBase58(),f=u[p];f||this.logAndCreateError(`pool info not found: ${p}`);let y=o[p]||dr(e,d,this.scope.ownerPubKey).publicKey,b=J(this.scope.ownerPubKey,f.mintA,Ue).publicKey;c.addInstruction({instructions:[jt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[qu(e,this.scope.ownerPubKey,l,d,y,b,f.vaultA,f.mintA,Ue)]})}),r===0?c.sizeCheckBuildV0({computeBudgetConfig:s}):c.sizeCheckBuild({computeBudgetConfig:s})}async claimVaultPlatformFee({programId:e=mt,platformId:t,mintB:n,mintBProgram:o=Ue,claimFeeWallet:r,txVersion:s,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=Sn(e,t,n).publicKey,d=Vu(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,o);return l.addInstruction({instructions:[jt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,o),Xu(e,t,r!=null?r:this.scope.ownerPubKey,d,m,p,n,o)]}),l.addCustomComputeBudget(a),l.addTipInstruction(c),l.versionBuild({txVersion:s})}async claimMultipleVaultPlatformFee({programId:e=mt,platformList:t,unwrapSol:n=!0,txVersion:o,computeBudgetConfig:r,feePayer:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1}){let u=this.createTxBuilder(s),l={};return t.forEach(async m=>{var b,g;let d=Vu(e).publicKey,p=Sn(e,m.id,m.mintB).publicKey,f=m.mintB.equals(zn)&&n,y=l[m.mintB.toBase58()];if(!y){let{account:P,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintB,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:a,checkCreateATAOwner:c});P&&(y=P),u.addInstruction(h||{}),y===void 0&&this.logAndCreateError(`cannot found platform ${m.id.toBase58()} mintB(${m.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}u.addInstruction({instructions:[Xu(e,m.id,(b=m.claimFeeWallet)!=null?b:this.scope.ownerPubKey,p,d,y,m.mintB,(g=m.mintBProgram)!=null?g:Ue)]})}),o===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async claimCreatorFee({programId:e=mt,mintB:t,mintBProgram:n=Ue,txVersion:o,computeBudgetConfig:r,txTipConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=Kn(e,this.scope.ownerPubKey,t).publicKey,l=Du(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[jt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),zu(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(r),c.addTipInstruction(s),c.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=mt,mintBList:t,txVersion:n,computeBudgetConfig:o,feePayer:r}){let s=this.createTxBuilder(r);return t.forEach(a=>{var p;let c=a.pubKey,u=(p=a.programId)!=null?p:Ue,l=Kn(e,this.scope.ownerPubKey,c).publicKey,m=Du(e).publicKey,d=this.scope.account.getAssociatedTokenAccount(c,u);s.addInstruction({instructions:[jt(this.scope.ownerPubKey,d,this.scope.ownerPubKey,c,u),zu(e,this.scope.ownerPubKey,m,l,d,c,u)]})}),n==0?s.sizeCheckBuildV0({computeBudgetConfig:o}):s.sizeCheckBuild({computeBudgetConfig:o})}async getRpcPoolInfo({poolId:e}){return(await this.getRpcPoolsInfo({poolIdList:[e]})).poolInfoMap[e.toBase58()]}async getRpcPoolsInfo({poolIdList:e,config:t}){let n=await We(this.scope.connection,e.map(c=>({pubkey:c})),t),o={},r=[];for(let c=0;c<e.length;c++){let u=n[c];if(u===null||!u.accountInfo)throw Error("fetch pool info error: "+e[c].toBase58());let l=kn.decode(u.accountInfo.data);o[e[c].toBase58()]=U(_({},l),{poolId:e[c],programId:u.accountInfo.owner}),r.push(l.configId)}let s=await We(this.scope.connection,r.map(c=>({pubkey:c})),t),a={};for(let c=0;c<r.length;c++){let u=s[c];if(u===null||!u.accountInfo)throw Error("fetch config info error: "+r[c].toBase58());let l=mo.decode(u.accountInfo.data);a[r[c].toBase58()]=U(_({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((c,u)=>U(_({},c),{[u]:U(_({},o[u]),{configInfo:a[o[u].configId.toBase58()]})}),{})}}};var Yn=new ct(0),br=class extends Xe{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals($));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1,feePayer:r}=e,s=await this.getWSolAccounts(),a=this.createTxBuilder(r);a.addCustomComputeBudget(e.computeBudgetConfig);let c=te(t);for(let u=0;u<s.length;u++)c.gte(s[u].amount)?(a.addInstruction({instructions:[vn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(s[u].amount)):a.addInstruction({instructions:[vn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:o})}async wrapWSol(e,t,n,o){let r=this.createTxBuilder(o),s=await io({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return r.addInstruction(s),r.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:r,txVersion:s,feePayer:a}){let c=this.createTxBuilder(a),u=e.amountIn,l=e.amountOut,m=u.amount.token.mint.equals($),d=l.amount.token.mint.equals($),p=u.amount.token.mint,f=l.amount.token.mint,{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?ci:De,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!m,createInfo:m?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&c.addInstruction(b),y===void 0)throw Error("input account check error");let g;if(e.routeType==="route"&&!d)g=this.scope.account.getAssociatedTokenAccount(f,l.amount.token.isToken2022?ci:De);else{let{account:T,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?ci:De,mint:f,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});g=T,k&&c.addInstruction(k)}d&&c.addInstruction({endInstructions:[vn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:De})],endInstructionTypes:[z.CloseAccount]});let P;if(e.routeType==="route"){let T=e.middleToken;P=this.scope.account.getAssociatedTokenAccount(T.mint,T.isToken2022?ci:De)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),I=Xm({routeProgram:r,inputMint:p,swapInfo:U(_({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:P,destinationToken:g}});if(e.feeConfig!==void 0){let T=this.createTxBuilder();T.addInstruction({instructions:[td(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[z.TransferAmount]}),T.addInstruction(I);let{transactions:k}=s===0?await T.sizeCheckBuildV0():await T.sizeCheckBuild();k.length<2&&c.addInstruction({instructions:[td(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[z.TransferAmount]})}return c.addInstruction(I),s===0?c.sizeCheckBuildV0({computeBudgetConfig:o,address:I.address}):c.sizeCheckBuild({computeBudgetConfig:o,address:I.address})}async swapClmmToLaunchMint({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:r,priceLimit:s,slippage:a=.01,shareFeeRate:c=new ct(0),shareFeeReceiver:u,launchPlatformInfo:l,slot:m,mintInfo:d,epochInfo:p,ownerInfo:f={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:g}){let P=(f==null?void 0:f.feePayer)||this.scope.ownerPubKey,h=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:I,clmmComputeAmount:{maxClmmAmountIn:T,clmmAmountOut:k,remainingAccounts:S},launchPoolInfo:x,launchAuthProgramId:K,launchSwapInfo:B,outAmount:C,minOutAmount:L}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:r,slippage:a,epochInfo:h,shareFeeRate:c,launchPlatformInfo:l,slot:m,mintInfo:d}),N=e.toString()===I.poolInfo.mintA.address,O=f.useSOLBalance&&I.poolInfo.mintA.address===$.toBase58(),R=f.useSOLBalance&&I.poolInfo.mintB.address===$.toBase58(),v={},Y;!s||s.equals(new M(0))?Y=N?Ft.add(new ct(1)):_t.sub(new ct(1)):Y=ue.priceToSqrtPriceX64(s,I.poolInfo.mintA.decimals,I.poolInfo.mintB.decimals);let Q=this.createTxBuilder(P),[de,ce]=[new Ve(I.poolInfo.mintA.address),new Ve(I.poolInfo.mintB.address)],[le,Ae]=[new Ve(I.poolInfo.mintA.programId),new Ve(I.poolInfo.mintB.programId)],fe=this.scope.account.getAssociatedTokenAccount(de,le),oe=this.scope.account.getAssociatedTokenAccount(ce,Ae);Q.addInstruction({instructions:[Yu(this.scope.ownerPubKey,fe,this.scope.ownerPubKey,de,le),Yu(this.scope.ownerPubKey,oe,this.scope.ownerPubKey,ce,Ae)]}),(N&&O||!N&&R)&&Q.addInstruction({instructions:[$b.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N?fe:oe,lamports:BigInt(T.toString())}),Jb(N?fe:oe)]}),v[I.poolInfo.mintA.address]=fe,v[I.poolInfo.mintB.address]=oe,(!fe||!oe)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:fe,ownerTokenAccountB:oe}),Q.addInstruction(n?Ke.makeSwapBaseOutInstructions({poolInfo:I.poolInfo,poolKeys:I.poolKeys,observationId:I.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:fe,tokenAccountB:oe},outputMint:N?ce:de,amountOut:k,amountInMax:T,sqrtPriceLimitX64:Y,remainingAccounts:S}):Ke.makeSwapBaseInInstructions({poolInfo:I.poolInfo,poolKeys:I.poolKeys,observationId:I.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:fe,tokenAccountB:oe},inputMint:new Ve(e),amountIn:t,amountOutMin:k,sqrtPriceLimitX64:Y,remainingAccounts:S}));let ne=x.mintProgramFlag===0?De:ci,Le=this.scope.account.getAssociatedTokenAccount(x.mintA,ne),_e=v[x.mintB.toBase58()];if(Q.addInstruction({instructions:[Yu(this.scope.ownerPubKey,Le,this.scope.ownerPubKey,x.mintA,ne)]}),!_e){let he=x.mintB.equals($),{account:qt,instructionParams:Zt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:De,mint:x.mintB,notUseTokenAccount:he,owner:this.scope.ownerPubKey,skipCloseAccount:!he,createInfo:he?{payer:this.scope.ownerPubKey,amount:k}:void 0,associatedOnly:!1,checkCreateATAOwner:y});_e=qt,Zt&&Q.addInstruction(Zt)}return Q.addInstruction({instructions:[Ts(x.programId,this.scope.ownerPubKey,K,x.configId,x.platformId,new Ve(r),Le,_e,x.vaultA,x.vaultB,x.mintA,x.mintB,ne,De,Sn(x.programId,x.platformId,x.mintB).publicKey,Kn(x.programId,x.creator,x.mintB).publicKey,B.amountB.lt(k)?B.amountB:k,L,c,u)]}),Q.addCustomComputeBudget(b),Q.versionBuild({txVersion:g,extInfo:{routes:[{mint:new Ve(e),amount:n?T:t,decimal:I.poolInfo[N?"mintA":"mintB"].decimals},{mint:N?ce:de,amount:k,decimal:I.poolInfo[N?"mintB":"mintA"].decimals},{mint:x.mintA,amount:C,decimal:x.mintDecimalsA}],outAmount:C,minOutAmount:L}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:r,slippage:s,epochInfo:a,shareFeeRate:c=new ct(0),clmmPoolData:u,launchPoolInfo:l,launchPlatformInfo:m,slot:d,mintInfo:p}){var O,R,v,Y,Q,de;let f=s>0?new M(s).div(2).toDecimalPlaces(4,M.ROUND_DOWN).toNumber():s,y=u!=null?u:await this.scope.clmm.getPoolInfoFromRpc(o.toString());if(e.toString()!==y.poolInfo.mintA.address&&e.toString()!==y.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let b=e.toString()===y.poolInfo.mintA.address,g=y.poolInfo[b?"mintB":"mintA"],P=n?await ve.computeAmountIn({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountOut:t,baseMint:new Ve(y.poolInfo[b?"mintB":"mintA"].address),slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}):await ve.computeAmountOutFormat({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountIn:t,tokenOut:g,slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}),h=l;if(h||(h=await this.scope.launchpad.getRpcPoolInfo({poolId:new Ve(r)})),g.address!==h.mintB.toBase58())throw new Error(`clmm swap mint(${g.address}) != launch pool mintB(${h.mintB.toBase58()})`);let I=m;if(!I){let ce=await this.scope.connection.getAccountInfo(h.platformId);I=Gn.decode(ce.data)}let T=p!=null?p:await this.scope.token.getTokenInfo(h.mintA),k=rn(h.programId).publicKey,S=T.extensions.feeConfig?{transferFeeConfigAuthority:Ve.default,withdrawWithheldAuthority:Ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((R=(O=T.extensions.feeConfig.olderTransferFee.epoch)!=null?O:a==null?void 0:a.epoch)!=null?R:0),maximumFee:BigInt(T.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:T.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((Y=(v=T.extensions.feeConfig.newerTransferFee.epoch)!=null?v:a==null?void 0:a.epoch)!=null?Y:0),maximumFee:BigInt(T.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:T.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,x=n?t:P.minAmountOut.amount.raw,K=Wt.buyExactIn({poolInfo:h,amountB:x,protocolFeeRate:h.configInfo.tradeFeeRate,platformFeeRate:I.feeRate,curveType:h.configInfo.curveType,shareFeeRate:c,creatorFeeRate:I.creatorFeeRate,transferFeeConfigA:S,slot:d!=null?d:await this.scope.connection.getSlot()}),B=K.amountA.amount.sub((Q=K.amountA.fee)!=null?Q:new ct(0)),C=new M(B.toString()),L=new ct(1e4),N=f?new M(L.sub(new ct(f*1e4)).toNumber()/L.toNumber()).clampedTo(0,1):new M(1);return{clmmPoolData:y,clmmComputeAmount:{maxClmmAmountIn:n?P.maxAmountIn.amount:t,clmmAmountOut:x,remainingAccounts:P.remainingAccounts},clmmComputeInfo:P,launchPoolInfo:h,launchAuthProgramId:k,launchMintTransferFeeConfig:S,launchSwapInfo:K,outAmount:K.amountA.amount.sub((de=K.amountA.fee)!=null?de:new ct(0)),minOutAmount:new ct(C.mul(N).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:r=.01,shareFeeRate:s=new ct(0),shareFeeReceiver:a,ownerInfo:c={useSOLBalance:!0},checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}){let d=(c==null?void 0:c.feePayer)||this.scope.ownerPubKey,p=await this.scope.fetchEpochInfo(),{clmmPoolData:f,clmmComputeAmount:{remainingAccounts:y},launchPoolInfo:b,launchAuthProgramId:g,launchSwapInfo:P,minLaunchOutAmount:h,outAmount:I,minOutAmount:T}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:r,epochInfo:p,shareFeeRate:s}),k=this.createTxBuilder(d),S={},x=b.mintProgramFlag===0?De:ci,{account:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:x,mint:b.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:u});if(!K)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);let B=b.mintB.equals($),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:De,mint:b.mintB,notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:u});if(L&&k.addInstruction(L),!C)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);S[b.mintB.toBase58()]=C,k.addInstruction({instructions:[Is(b.programId,this.scope.ownerPubKey,g,b.configId,b.platformId,new Ve(n),K,C,b.vaultA,b.vaultB,b.mintA,b.mintB,x,De,Sn(b.programId,b.platformId,b.mintB).publicKey,Kn(b.programId,b.creator,b.mintB).publicKey,P.amountA.amount.lt(e)?P.amountA.amount:e,h,s,a)]});let N=b.mintB.toString()===f.poolInfo.mintA.address,O=c.useSOLBalance&&f.poolInfo.mintA.address===$.toBase58(),R=c.useSOLBalance&&f.poolInfo.mintB.address===$.toBase58(),v;!o||o.equals(new M(0))?v=N?Ft.add(new ct(1)):_t.sub(new ct(1)):v=ue.priceToSqrtPriceX64(o,f.poolInfo.mintA.decimals,f.poolInfo.mintB.decimals);let[Y,Q]=[new Ve(f.poolInfo.mintA.address),new Ve(f.poolInfo.mintB.address)],[de,ce]=[new Ve(f.poolInfo.mintA.programId),new Ve(f.poolInfo.mintB.programId)],le=O?void 0:this.scope.account.getAssociatedTokenAccount(Y,de),Ae=R?void 0:this.scope.account.getAssociatedTokenAccount(Q,ce);if(!le){let{account:fe,instructionParams:oe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:de,mint:Y,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:N?e:0},associatedOnly:!1,checkCreateATAOwner:u});le=fe,oe&&k.addInstruction(oe)}if(!Ae){let{account:fe,instructionParams:oe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ce,mint:Q,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:N?0:e},associatedOnly:!1,checkCreateATAOwner:u});Ae=fe,oe&&k.addInstruction(oe)}return S[f.poolInfo.mintA.address]=le,S[f.poolInfo.mintB.address]=Ae,(!le||!Ae)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:le,ownerTokenAccountB:Ae}),k.addInstruction(Ke.makeSwapBaseInInstructions({poolInfo:f.poolInfo,poolKeys:f.poolKeys,observationId:f.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:le,tokenAccountB:Ae},inputMint:new Ve(f.poolKeys[N?"mintA":"mintB"].address),amountIn:h,amountOutMin:T,sqrtPriceLimitX64:v,remainingAccounts:y})),k.addCustomComputeBudget(l),k.versionBuild({txVersion:m,extInfo:{routes:[{mint:b.mintA,amount:e,decimal:b.mintDecimalsA},{mint:b.mintB,amount:h,decimal:b.mintDecimalsB},{mint:new Ve(f.poolKeys[N?"mintB":"mintA"].address),amount:I,decimal:f.poolKeys[N?"mintB":"mintA"].decimals}],outAmount:I,minOutAmount:T}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:r,shareFeeRate:s=new ct(0),clmmPoolData:a,launchPoolInfo:c,launchPlatformInfo:u}){var C,L,N,O;let l=o>0?new M(o).div(2).toDecimalPlaces(4,M.ROUND_DOWN).toNumber():o,m=c;m||(m=await this.scope.launchpad.getRpcPoolInfo({poolId:new Ve(n)}));let d=m.mintB,p=a!=null?a:await this.scope.clmm.getPoolInfoFromRpc(t.toString());if(d.toString()!==p.poolInfo.mintA.address&&d.toString()!==p.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let f=d.toString()===p.poolInfo.mintA.address,y=p.poolInfo[f?"mintB":"mintA"],b=u;if(!b){let R=await this.scope.connection.getAccountInfo(m.platformId);b=Gn.decode(R.data)}let g=await this.scope.token.getTokenInfo(m.mintA),P=rn(m.programId).publicKey,h=g.extensions.feeConfig?{transferFeeConfigAuthority:Ve.default,withdrawWithheldAuthority:Ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((L=(C=g.extensions.feeConfig.olderTransferFee.epoch)!=null?C:r==null?void 0:r.epoch)!=null?L:0),maximumFee:BigInt(g.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((O=(N=g.extensions.feeConfig.newerTransferFee.epoch)!=null?N:r==null?void 0:r.epoch)!=null?O:0),maximumFee:BigInt(g.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,I=Wt.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:b.feeRate,curveType:m.configInfo.curveType,shareFeeRate:s,creatorFeeRate:b.creatorFeeRate,transferFeeConfigA:h,slot:await this.scope.connection.getSlot()}),T=I.amountB,k=new M(T.toString()),S=new ct(1e4),x=l?new M(S.sub(new ct(l*1e4)).toNumber()/S.toNumber()).clampedTo(0,1):new M(1),K=new ct(k.mul(x).toFixed(0)),B=await ve.computeAmountOutFormat({poolInfo:p.computePoolInfo,tickArrayCache:p.tickData[t.toString()],amountIn:K,tokenOut:y,slippage:l,epochInfo:r!=null?r:await this.scope.fetchEpochInfo()});return B.amountOut.amount,B.minAmountOut,{clmmPoolData:p,clmmComputeAmount:B,launchPoolInfo:m,launchAuthProgramId:P,launchMintTransferFeeConfig:h,launchSwapInfo:I,minLaunchOutAmount:K,outAmount:B.amountOut.amount.raw,minOutAmount:B.minAmountOut.amount.raw}}async fetchRoutePoolBasicInfo(e){let{amm:t=wi,clmm:n=Jn,cpmm:o=to}=e||{},r=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Ko.offsetOf("baseMint"),length:64}}),s=E([F("baseMint"),F("quoteMint")]),a=r.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=E([F("mintA"),F("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:xo.span}],dataSlice:{offset:xo.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:f.mintA,mintB:f.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:As.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:r}){e=e.toString()===Ve.default.toString()?$:e,t=t.toString()===Ve.default.toString()?$: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:De,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:De,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:De,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:De,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:De,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:De,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:De,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:De,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of r)(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:De,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:De,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:De,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:De,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let f of p.in)for(let y of p.out)f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f),y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(y=>[y.mintA.toBase58(),y.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let r=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),s=ps(r),a={};Object.values(s).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new Ve(y.mintA.address),programId:De,mintAuthority:null,supply:BigInt(0),decimals:y.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(y.mintB.address),a[y.mintB.address]={address:new Ve(y.mintB.address),programId:De,mintAuthority:null,supply:BigInt(0),decimals:y.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(y=>y.id.toBase58()),!0);Object.values(c).forEach(y=>{let[b,g]=[y.mintA.toBase58(),y.mintB.toBase58()];y.mintProgramA.equals(De)?(o.delete(b),a[b]={address:y.mintA,programId:y.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),y.mintProgramB.equals(De)?(o.delete(g),a[g]={address:y.mintB,programId:y.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await _o({connection:this.scope.connection,mints:Array.from(o).map(y=>new Ve(y))});a=_(_({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((y,b)=>U(_({},y),{[b]:U(_({},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:r,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:r,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,P,h,I,T,k,S,x,K;let m=l===void 0?new ct(0):e.raw.mul(new ct(l.feeBps.toNumber())).div(new ct(1e4)),d=e.raw.sub(m),p=new Ce(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},y=U(_({},t),{address:It(t.address).toString()}),b=[];for(let B of n)try{b.push(U(_({},this.computeAmountOut({itemPool:B,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:p})),{feeConfig:f}))}catch(C){this.logDebug("direct error",B.version,B.id.toString(),C.message)}this.logDebug("direct done");for(let[B,C]of Object.entries(o)){let L={chainId:101,address:B,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},N=C.in.map(R=>{try{return{pool:R,data:this.computeAmountOut({itemPool:R,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:L,amountIn:p})}}catch(v){this.logDebug("route in error",R.version,R.id.toString(),v.message);return}}).sort((R,v)=>{var de,ce,le,Ae;let Y=R===void 0?Yn:R.data.amountOut.amount.raw.sub((ce=(de=R.data.amountOut.fee)==null?void 0:de.raw)!=null?ce:Yn),Q=v===void 0?Yn:v.data.amountOut.amount.raw.sub((Ae=(le=v.data.amountOut.fee)==null?void 0:le.raw)!=null?Ae:Yn);return Y.lt(Q)?1:-1})[0];if(N===void 0)continue;let O=new Ce(cs(L),N.data.amountOut.amount.raw.sub((P=(g=N.data.amountOut.fee)==null?void 0:g.raw)!=null?P:Yn));for(let R of C.out)try{let v=this.computeAmountOut({itemPool:R,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:O});b.push(U(_({},v),{allTrade:!!(N.data.allTrade&&v.allTrade),amountIn:N.data.amountIn,amountOut:v.amountOut,minAmountOut:v.minAmountOut,currentPrice:void 0,executionPrice:new M(new gt({baseToken:N.data.amountIn.amount.token,denominator:N.data.amountIn.amount.raw,quoteToken:v.amountOut.amount.token,numerator:v.amountOut.amount.raw.sub((I=(h=v.amountOut.fee)==null?void 0:h.raw)!=null?I:Yn)}).toFixed()),priceImpact:new M(N.data.priceImpact.add(v.priceImpact).toFixed()),fee:[N.data.fee[0],v.fee[0]],routeType:"route",poolInfoList:[N.pool,R],remainingAccounts:[N.data.remainingAccounts[0],v.remainingAccounts[0]],minMiddleAmountFee:(T=v.amountOut.fee)!=null&&T.raw?new Ce(N.data.amountOut.amount.token,((S=(k=N.data.amountOut.fee)==null?void 0:k.raw)!=null?S:Yn).add((K=(x=v.amountOut.fee)==null?void 0:x.raw)!=null?K:Yn)):void 0,middleToken:N.data.amountOut.amount.token,poolReady:N.data.poolReady&&v.poolReady,poolType:[N.data.poolType,v.poolType],feeConfig:f,expirationTime:gn(N.data.expirationTime,v.expirationTime)}))}catch(v){this.logDebug("route out error",R.version,R.id.toString(),v.message)}}return b.filter(B=>(B.allTrade||this.logDebug(`pool ${B.poolInfoList.map(C=>C.id.toString()).join(",")} filter out since not all trade`),B.allTrade)).sort((B,C)=>B.amountOut.amount.raw.sub(C.amountOut.amount.raw).gt(Yn)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:r,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:f,executionPrice:y,priceImpact:b,fee:g,remainingAccounts:P,executionPriceX64:h}=ve.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:r,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new M(f.toFixed()),executionPrice:new M(y.toFixed()),priceImpact:new M(b.toFixed()),fee:[g],remainingAccounts:[P],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[h],expirationTime:gn(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:f}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Qi(U(_({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Qi(U(_({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new Ce(c.token,f)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:f}=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:Qi(U(_({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Qi(U(_({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new Ce(c.token,f)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}let r=new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString()));if(r.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 Ve(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Nu.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:ks.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:U(_({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=_({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:hu({programId:new Ve(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({observationId:u.observationId.toBase58(),programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:ii(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:Kt({address:u.mintLp.toBase58(),programId:De.toBase58(),decimals:u.lpDecimals}),config:U(_({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as eg,Transaction as Hu,TransactionInstruction as tg}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ng}from"@solana/spl-token";import nd from"bn.js";var Lt=class extends Xe{static getPdaPoolId(e,t){return ie([Lt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ie([Lt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new nd(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:r}){if(n.length===0)return[];let s=n.map(l=>Lt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Lt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Lt.getPdaOwnerId(t,m,o,l).publicKey));let c=await dn(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],f=a[l],y=c[d],b=c[n.length+l];if(!(y&&b)||y.data.length!==Lt.POOL_LAYOUT.span||b.data.length!==Lt.OWNER_LAYOUT.span)continue;let g=Lt.POOL_LAYOUT.decode(y.data),P=Lt.OWNER_LAYOUT.decode(b.data),h=g.openTime.toNumber(),I=g.endTime.toNumber(),T=P.tokenInfo.map(x=>x.debtAmount.gt(new nd(0))).filter(x=>!x).length!==3,k=r>h&&r<I&&g.status===1,S=T&&k;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:P.lpAmount,project:Lt.VERSION_PROJECT[m],openTime:h,endTime:I,canClaim:S,canClaimErrorType:T?k?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,K)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:P.tokenInfo[K].debtAmount.add(P.tokenInfo[K].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),r=t.wallet||this.scope.ownerPubKey,s=[];for(let u of e.tokenInfo){let{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(Oe.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!u.mintAddress.equals(Oe.WSOL.mint),associatedOnly:u.mintAddress.equals(Oe.WSOL.mint)?!1:t.associatedOnly});m&&o.addInstruction(m),s.push(l)}o.addInstruction({instructions:[Lt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,ownerPda:e.ownerAccountId,claimAddress:s}})]});let{transaction:a,signers:c}=o.build();return[{transaction:a,signer:c}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let o=this.createTxBuilder(n),r=t.wallet||this.scope.ownerPubKey,s={};for(let l of e){let m=[];for(let d of l.tokenInfo){let{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({mint:d.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:d.mintAddress.equals(Oe.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!d.mintAddress.equals(Oe.WSOL.mint),associatedOnly:d.mintAddress.equals(Oe.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),p&&(s[d.mintAddress.toString()]=p,m.push(p))}o.addInstruction({instructions:[Lt.makeClaimInstruction({programId:l.programId,poolInfo:l,ownerInfo:{wallet:r,ownerPda:l.ownerAccountId,claimAddress:m}})]})}let{transaction:a,signers:c}=o.build(),u=o.allInstructions;return Wr(u,[r,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Hu().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:c},{transaction:new Hu().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Hu().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=E([]),r=[{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:ng,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new tg({keys:r,programId:e,data:a})}},mn=Lt;mn.CLAIMED_NUM=3,mn.POOL_LAYOUT=E([Re(8),D("bump"),D("status"),A("openTime"),A("endTime"),F("ammId"),j(E([D("mintDecimals"),F("mintAddress"),F("mintVault"),A("perLpLoss"),A("totalClaimedAmount")]),Lt.CLAIMED_NUM,"tokenInfo"),j(A(),10,"padding")]),mn.OWNER_LAYOUT=E([Re(8),D("bump"),D("version"),F("poolId"),F("owner"),A("lpAmount"),j(E([F("mintAddress"),A("debtAmount"),A("claimedAmount")]),Lt.CLAIMED_NUM,"tokenInfo"),j(A(),4,"padding")]),mn.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new eg(e)),mn.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},mn.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Pr}from"@solana/web3.js";import od from"bn.js";import{SYSVAR_CLOCK_PUBKEY as og,TransactionInstruction as ju}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Zu}from"@solana/spl-token";var Qu=E([D("instruction"),ll("amount")]),gr=E([D("instruction")]);function lN({programId:i,amount:e,instructionKeys:t}){let n=[{pubkey:Mr,isSigner:!1,isWritable:!1},{pubkey:Zu,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Js,isSigner:!1,isWritable:!1},...Object.entries(t).map(([r,s])=>({pubkey:s,isSigner:r==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(r)}))],o=Buffer.alloc(Qu.span);return Qu.encode({instruction:1,amount:Number(e)},o),new ju({keys:n,programId:i,data:o})}function Os({programId:i},e){let t=[{pubkey:Zu,isSigner:!1,isWritable:!1},{pubkey:Js,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,r])=>({pubkey:r,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(gr.span);return gr.encode({instruction:2},n),new ju({keys:t,programId:i,data:n})}function $u(i){let{poolConfig:e,userKeys:t,side:n}=i,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,r=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(gr.span);gr.encode({instruction:2},s);let a=[{pubkey:Zu,isWritable:!1,isSigner:!1},{pubkey:og,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new ju({programId:e.programId,keys:a,data:s})}var ig={[Ii.IDO_PROGRAM_ID_V1.toString()]:1,[Ii.IDO_PROGRAM_ID_V2.toString()]:2,[Ii.IDO_PROGRAM_ID_V3.toString()]:3,[Ii.IDO_PROGRAM_ID_V4.toString()]:4},li=class extends Xe{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:r,feePayer:s}){let a=this.createTxBuilder(s),c=ig[t.programId];c||this.logAndCreateError("invalid version",c);let u=Ge(t),[l,m]=[!new od(e.coin).isZero(),!new od(e.pc).isZero()],d=u.projectInfo.mint.address.equals($),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!d,notUseTokenAccount:d,associatedOnly:d?!1:n,checkCreateATAOwner:o});!p&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&f&&a.addInstruction(f);let y=u.buyInfo.mint.address.equals($),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:o});if(!p&&m&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),m&&g&&a.addInstruction(g),(!p||!b)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),c===3)return a.addInstruction({instructions:[...l?[Os({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[Os({programId:new Pr(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:b,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:r});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[Os({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:p,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:r});let P={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:p,quoteTokenAccount:b,ledgerAccount:new Pr(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[$u(U(_({},P),{side:"base"}))]:[],...m?[$u(U(_({},P),{side:"quote"}))]:[]]}).versionBuild({txVersion:r})}};import{PublicKey as rg}from"@solana/web3.js";import{MintLayout as sg,TOKEN_2022_PROGRAM_ID as Ju,TOKEN_PROGRAM_ID as ec}from"@solana/spl-token";var Ar=class extends Xe{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Set;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:r,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Set(s),this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Tn.address,Tn),this._mintGroup.official.add(Tn.address),r.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,U(_({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ju.toBase58():ec.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,U(_({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ju.toBase58():ec.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,U(_({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Ju.toBase58():ec.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return Tn;let r=(await this.scope.api.getTokenInfo([n]))[0];if(r)return this._mintGroup.extra.add(n),this._tokenMap.set(n,U(_({},r),{priority:2})),r;let s=await this.scope.connection.getAccountInfo(new rg(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=sg.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 Ms=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:r,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed",loopMultiTxStatus:l}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new yn(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=r,this._apiCacheTime=c||5*60*1e3,this.logger=ke("Raydium"),this.farm=new Di({scope:this,moduleName:"Raydium_Farm"}),this.account=new Ri({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new er({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Ar({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new br({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new nr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new cr({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new mn({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new oi({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new li({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new yr({scope:this,moduleName:"Raydium_lauchpad"}),this.availability={};let m=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:m,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=ag({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:r,logRequests:s,urlConfigs:a}=t,c=new Yr({cluster:n,timeout:o,urlConfigs:a,logCount:r,logRequests:s}),u=new Ms(U(_({},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 yn(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(tl);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw console.error(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){if(this.cluster==="devnet")return[];let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(o=>U(_({},o),{mintAuthority:o.mint_authority||void 0,freezeAuthority:o.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var uO=i=>i;export{Ag as ACCOUNT_TYPE_SIZE,Nt as ALL_PROGRAM_ID,Ny as AMM_CONFIG_SEED,Np as AMM_STABLE,wi as AMM_V4,aP as ANAMint,Pt as API_URLS,qb as AUTH_SEED,pd as AccountType,Yr as Api,Wl as BIT_PRECISION,bn as BNDivCeil,ho as BNLayout,aA as BN_100,uA as BN_1000,cA as BN_10000,sA as BN_FIVE,Fc as BN_ONE,Po as BN_TEN,rA as BN_THREE,iA as BN_TWO,at as BN_ZERO,Lk as BitStructure,cl as Blob,Fu as BondingCurveParam,ki as CLMM_LOCK_AUTH_ID,qo as CLMM_LOCK_PROGRAM_ID,Jn as CLMM_PROGRAM_ID,Js as CLOCK_PROGRAM_ID,Ub as CONFIG_SEED,ma as CREATE_CPMM_POOL_AUTH,Ep as CREATE_CPMM_POOL_FEE_ACC,to as CREATE_CPMM_POOL_PROGRAM,Yb as CREATOR_FEE_VAULT_AUTH_SEED,nr as Clmm,nm as ClmmConfigLayout,Ke as ClmmInstrument,ir as ConstantProductCurve,Vm as CpmmConfigInfoLayout,Jm as CpmmCreatorFeeOn,Yt as CpmmFee,FC as CpmmPermission,As as CpmmPoolInfoLayout,bi as Currency,go as CurrencyAmount,Wt as Curve,fo as CurveBase,rr as CurveCalculator,On as DEVNET_PROGRAM_ID,$c as DEV_API_URLS,AT as DEV_FARM_LOCK_MINT,wT as DEV_FARM_LOCK_VAULT,qA as DEV_LAUNCHPAD_AUTH,WA as DEV_LAUNCHPAD_PROGRAM,Go as DEV_LOOKUP_TABLE_CACHE,eb as DataElement,uP as ETHMint,au as EXTENSION_TICKARRAY_BITMAP_SIZE,Sl as FARM_LOCK_MINT,Kl as FARM_LOCK_VAULT,sa as FARM_PROGRAM_ID_V3,aa as FARM_PROGRAM_ID_V4,ua as FARM_PROGRAM_ID_V5,Wo as FARM_PROGRAM_ID_V6,un as FARM_PROGRAM_TO_VERSION,Rl as FARM_VERSION_TO_LEDGER_LAYOUT,Cl as FARM_VERSION_TO_STATE_LAYOUT,la as FEE_DESTINATION_ID,rs as FEE_RATE_DENOMINATOR,Gt as FEE_RATE_DENOMINATOR_VALUE,Vy as FETCH_TICKARRAY_COUNT,Ly as Fee,Dm as FeeOn,Ks as FixedPriceCurve,Pe as Fraction,Ii as IDO_ALL_PROGRAM,Mp as IDO_PROGRAM_ID_V1,vp as IDO_PROGRAM_ID_V2,Fp as IDO_PROGRAM_ID_V3,_p as IDO_PROGRAM_ID_V4,Or as INSTRUCTION_PROGRAM_ID,z as InstructionType,jc as JupTokenType,Vp as LAUNCHPAD_AUTH,Wp as LAUNCHPAD_CONFIG,Dp as LAUNCHPAD_PLATFORM,mt as LAUNCHPAD_PROGRAM,ls as LIQUIDITY_FEES_DENOMINATOR,mu as LIQUIDITY_FEES_NUMERATOR,Ur as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,Hy as LIQUIDITY_VERSION_TO_SERUM_VERSION,Wx as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Ti as LOCK_CPMM_AUTH,hi as LOCK_CPMM_PROGRAM,Ob as LOCK_LIQUIDITY_SEED,ql as LOG_B_2_X32,Ul as LOG_B_P_ERR_MARGIN_LOWER_X64,Gl as LOG_B_P_ERR_MARGIN_UPPER_X64,Uo as LOOKUP_TABLE_CACHE,xs as LaunchConstantProductCurve,mo as LaunchpadConfig,kn as LaunchpadPool,Ns as LaunchpadPoolInitParam,d1 as LaunchpadVesting,Ki as Layout,Cs as LinearPriceCurve,Be as LiquidityMath,rm as LockClPositionLayoutV2,JB as LockPositionLayout,ud as LogLevel,Es as Logger,Iu as MARKET_STATE_LAYOUT_V2,Nu as MARKET_STATE_LAYOUT_V3,Um as MARKET_VERSION_TO_STATE_LAYOUT,Xc as MAX_BASE64_SIZE,_t as MAX_SQRT_PRICE_X64,is as MAX_SQRT_PRICE_X64_SUB_ONE,vt as MAX_TICK,Nr as MEMO_PROGRAM_ID,In as MEMO_PROGRAM_ID2,an as METADATA_PROGRAM_ID,Ft as MIN_SQRT_PRICE_X64,os as MIN_SQRT_PRICE_X64_ADD_ONE,St as MIN_TICK,eo as MODEL_DATA_PUBKEY,ks as Market,fr as MathLaunch,be as MathUtil,Wi as MaxU64,Dl as MaxUint128,Fn as NEGATIVE_ONE,sP as NRVMint,_y as OBSERVATION_SEED,tn as ONE,ca as OPEN_BOOK_PROGRAM,vy as OPERATION_SEED,om as ObservationInfoLayout,qy as ObservationLayout,im as OperationLayout,Ra as OptionLayout,yn as Owner,Jg as PAIMint,zb as PLATFORM_FEE_VAULT_AUTH_SEED,Xb as PLATFORM_SEED,$l as POOL_LOCK_ID_SEED,Oy as POOL_REWARD_VAULT_SEED,nu as POOL_SEED,Fy as POOL_TICK_ARRAY_BITMAP_SEED,ou as POOL_VAULT_SEED,Gb as POOL_VESTING_SEED,Hl as POSITION_SEED,et as Percent,Gn as PlatformConfig,Wb as PlatformCurveParam,Zc as PoolFetchType,xo as PoolInfoLayout,ve as PoolUtils,ei as PositionInfoLayout,Gy as PositionRewardInfoLayout,Xi as PositionUtils,gt as Price,$B as ProtocolPositionLayout,ns as Q128,pt as Q64,$g as RAYMint,rt as RENT_PROGRAM_ID,Ms as Raydium,Uy as RewardInfo,Cm as RoundDirection,Hs as Rounding,Op as Router,Wm as SERUM_PROGRAMID_TO_VERSION,qr as SERUM_PROGRAM_ID_V3,qm as SERUM_VERSION_TO_PROGRAMID,Jc as SESSION_KEY,bt as SOLMint,Tn as SOL_INFO,cm as SPL_MINT_LAYOUT,eP as SRMMint,Aa as STORAGE_KEY,Ey as SUPPORT_MINT_SEED,Mr as SYSTEM_PROGRAM_ID,ue as SqrtPriceMath,ni as StableLayout,La as Structure,Bo as SwapMath,Io as TICK_ARRAY_BITMAP_SIZE,My as TICK_ARRAY_SEED,ft as TICK_ARRAY_SIZE,OI as TICK_SPACINGS,yt as TOKEN_WSOL,En as TickArrayBitmap,tm as TickArrayBitmapExtensionLayout,Yi as TickArrayBitmapExtensionUtils,zi as TickArrayLayout,Xy as TickLayout,So as TickMath,Se as TickQuery,ee as TickUtils,Oe as Token,Ce as TokenAmount,hb as TradeDirection,Tb as TradeDirectionOpposite,Xr as TxBuilder,Rn as TxVersion,qi as U64Resolution,vI as U64_IGNORE_RANGE,Sa as UInt,tP as USDCMint,rP as USDHMint,nP as USDTMint,Lp as UTIL1216,Na as Union,Db as VestingSchedule,xl as Voter,by as VoterDepositEntry,yy as VoterLockup,Bl as VoterRegistrar,fy as VoterVotingMintConfig,$ as WSOLMint,Jr as WideBits,Mn as WrappedLayout,Te as ZERO,Mc as _100_PERCENT,w as accountMeta,zP as add,Vr as addComputeBudget,yu as addLiquidityLayout,Rt as anchorDataBuf,fh as array,Fa as associatedLedgerAccountLayout,Ka as bits,Re as blob,Ye as bool,Ts as buyExactInInstruction,Qm as buyExactOutInstruction,ja as calFarmRewardAmount,gi as ceilDiv,ko as ceilDivBN,Pi as checkLegacyTxSize,Q1 as checkPoolToAmm,Ai as checkV0TxSize,Ws as chunkArray,zu as claimCreatorFee,gr as claimLayout,Gu as claimPlatformFee,Xu as claimPlatformFeeFromVault,qu as claimVestedToken,em as clmmComputeInfoToApiInfo,vn as closeAccountInstruction,Ru as collectCpFeeInstruction,js as commonSystemAccountMeta,Dr as confirmTransaction,Fb as cpmmLockPositionInstruction,Fi as createAssociatedLedgerAccountInstruction,ke as createLogger,Zm as createPlatformConfig,dm as createPoolFeeLayout,Pu as createPoolV4InstructionV2,Dx as createPoolV4Layout,Uu as createVestingAccount,io as createWSolAccountInstructions,rh as cstr,gP as currencyEquals,pA as decimalToFraction,Hf as decodeBool,qP as div,vr as divCeil,Mt as dwLayout,Qf as encodeBool,sk as endlessRetry,kp as eq,eh as f32,th as f32be,nh as f64,oh as f64be,Da as farmAddRewardLayout,uT as farmLedgerLayoutV3_1,Ni as farmLedgerLayoutV3_2,cT as farmLedgerLayoutV5_1,Tl as farmLedgerLayoutV5_2,Il as farmLedgerLayoutV6_1,Nl as farmRewardInfoToConfig,Ea as farmRewardLayout,Va as farmRewardRestartLayout,py as farmRewardTimeInfoLayout,kl as farmStateV3Layout,hl as farmStateV5Layout,Li as farmStateV6Layout,_T as fetchMultipleFarmInfoAndUpdate,xS as fetchMultipleInfo,_o as fetchMultipleMintInfos,ie as findProgramAddress,du as fixedSwapInLayout,pu as fixedSwapOutLayout,Fr as floorDiv,Wr as forecastTransactionSize,lb as formatLayout,nt as generatePubKey,J as getATAAddress,Ll as getAssociatedAuthority,ds as getAssociatedConfigId,xt as getAssociatedLedgerAccount,Mi as getAssociatedLedgerPoolAccount,fb as getAssociatedOpenOrders,Tu as getAssociatedPoolKeys,ar as getCpLockPda,TC as getCpmmPdaAmmConfigId,xu as getCpmmPdaPoolId,Su as getCreatePoolKeys,Vc as getDate,Za as getDepositEntryIndex,ga as getDevLookupTableCache,wm as getDxByDyBaseIn,Am as getDyByDxBaseIn,OA as getEpochInfo,Zo as getFarmLedgerLayout,Py as getFarmStateLayout,hu as getLiquidityAssociatedAuthority,Lo as getLiquidityAssociatedId,KB as getLiquidityFromAmounts,ba as getMainLookupTableCache,XP as getMax,dn as getMultipleAccountsInfo,We as getMultipleAccountsInfoWithCustomFlags,ya as getMultipleLookupTableInfo,qI as getPdaAmmConfigId,po as getPdaCpiEvent,Du as getPdaCreatorFeeVaultAuth,Kn as getPdaCreatorVault,ot as getPdaExBitmapAccount,rn as getPdaLaunchpadAuth,g1 as getPdaLaunchpadConfigId,ai as getPdaLaunchpadPoolId,_u as getPdaLaunchpadVaultId,Jo as getPdaLockClPositionIdV2,ru as getPdaLockPositionId,Lb as getPdaLpMint,_n as getPdaMetadataKey,su as getPdaMintExAccount,Zl as getPdaObservationAccount,sr as getPdaObservationId,Gi as getPdaOperationAccount,Nm as getPdaPermissionId,Et as getPdaPersonalPositionAddress,Vu as getPdaPlatformFeeVaultAuth,Eu as getPdaPlatformId,Sn as getPdaPlatformVault,ii as getPdaPoolAuthority,Ql as getPdaPoolId,jl as getPdaPoolRewardVaulId,iu as getPdaPoolVaultId,wn as getPdaProtocolPositionAddress,Ie as getPdaTickArrayAddress,Lm as getPdaVault,dr as getPdaVestId,Do as getRecentBlockHash,Ga as getRegistrarAddress,Hp as getSessionKey,km as getStablePrice,Ip as getTime,pw as getTimestamp,Qa as getTokenOwnerRecordAddress,XA as getTransferAmountFee,pa as getTransferAmountFeeFromPost,da as getTransferAmountFeeFromPre,Ne as getTransferAmountFeeV2,Ya as getVoterAddress,Ha as getVoterWeightRecordAddress,za as getVotingMintAuthority,Xa as getVotingTokenMint,Sy as governanceCreateTokenOwnerRecord,Nk as greedy,wp as gt,WP as gte,bl as i128,_I as i16ToBytes,as as i32ToBytes,Ho as i64,yl as i8,fu as initPoolLayout,Ma as initTokenAccountInstruction,C1 as initialize,Pb as initializeMarket,Ym as initializeV2,Em as initializeWithPermission,Hm as initializeWithToken2022,PA as intersection,Wc as isDateAfter,Dc as isDateBefore,fA as isDecimal,GP as isMeaningfulNumber,Ec as isNumber,qa as isValidFarmVersion,Ui as isZero,Ge as jsonInfo2PoolKeys,ET as judgeFarmType,eu as leadingZeros,Yl as leastSignificantBit,Ko as liquidityStateV4Layout,Qy as liquidityStateV5Layout,VP as lt,DP as lte,oP as mSOLMint,ms as makeAMMSwapInstruction,ym as makeAddLiquidityInstruction,Ja as makeAddNewRewardInstruction,Os as makeClaimInstruction,$u as makeClaimInstructionV4,Lu as makeCollectCreatorFeeInstruction,_m as makeCpmmLockInstruction,Om as makeCreateCpmmPoolInInstruction,Ol as makeCreateFarmInstruction,fs as makeCreateMarketInstruction,Ml as makeCreatorWithdrawFarmRewardInstruction,Mm as makeDepositCpmmInInstruction,Fl as makeDepositInstructionV3,_l as makeDepositInstructionV5,El as makeDepositInstructionV6,eI as makeDepositTokenInstruction,nI as makeDepositWithdrawInstruction,Jx as makeInitPoolInstructionV4,lN as makePurchaseInstruction,$a as makeRestartRewardInstruction,bm as makeSimulatePoolInfoInstruction,Ps as makeSwapCpmmBaseInInstruction,Fm as makeSwapCpmmBaseOutInstruction,$y as makeSwapFixedInInstruction,Jy as makeSwapFixedOutInstruction,Xm as makeSwapInstruction,wl as makeTransferInstruction,vm as makeWithdrawCpmmInInstruction,Vi as makeWithdrawInstructionV3,vl as makeWithdrawInstructionV4,Ei as makeWithdrawInstructionV5,_i as makeWithdrawInstructionV6,tI as makeWithdrawTokenInstruction,gn as minExpirationTime,MI as mockCreatePoolInfo,Xl as mockV3CreatePoolInfo,tb as modelDataInfoLayout,zl as mostSignificantBit,ia as mul,zp as notInnerObject,Yk as ns64,Jk as ns64be,ll as nu64,Wk as nu64be,Ca as offset,bA as offsetDateTime,mh as option,te as parseBigNumberish,Ao as parseNumberInfo,Yc as parseSimulateLogToJson,Nn as parseSimulateValue,Al as parseTokenAccountResp,xx as parseTokenInfo,so as poolTypeV6,wo as printSimulate,F as publicKey,Qu as purchaseLayout,ly as realFarmStateV3Layout,my as realFarmStateV5Layout,dy as realFarmV6Layout,gu as removeLiquidityInstruction,bu as removeLiquidityLayout,L1 as removePlatformCurveParamInstruction,s1 as route1Instruction,a1 as route2Instruction,Vb as routeInstruction,ph as rustEnum,Uk as s16,Hk as s16be,Gk as s24,Qk as s24be,ze as s32,jk as s32be,Xk as s40,Zk as s40be,zk as s48,$k as s48be,qk as s8,Is as sellExactInInstruction,jm as sellExactOut,j as seq,lg as setLoggerLevel,hp as shakeFractionDecimal,zc as simulateMultipleInstruction,$x as simulatePoolInfoInstruction,Sp as simulateTransaction,Qc as sleep,It as solToWSol,Kx as solToWSolToken,An as splAccountLayout,Lc as splitNumber,iP as stSOLMint,ht as str,E as struct,UP as sub,u1 as swapBaseInAutoAccount,c1 as swapBaseOutAutoAccount,dh as tagged,oa as tenExponential,ps as toAmmComputePoolInfo,Kt as toApiV3Token,Tp as toBN,Hc as toBuffer,ao as toFeeConfig,_c as toFraction,EP as toFractionWithDecimals,lA as toPercent,cs as toToken,Qi as toTokenAmount,Sx as toTokenInfo,mA as toTokenPrice,dA as toTotalPrice,vc as toUsdCurrency,tu as trailingZeros,MA as transformTxToBase64,$s as tryParsePublicKey,Kp as txToBase64,re as u128,en as u16,ss as u16ToBytes,Fk as u16be,Ok as u24,_k as u24be,kt as u32,EI as u32ToBytes,Ek as u32be,Mk as u40,Vk as u40be,vk as u48,Dk as u48be,A as u64,D as u8,Hb as u8ToBytes,yh as union,uO as unionArr,ih as unionLayoutDiscriminator,wA as uniq,Ay as updateFarmPoolInfo,$m as updatePlatformConfig,R1 as updatePlatformCurveParamInstruction,zr as updateReqHistory,jR as usdMintBSet,sh as utf8,Zs as validateAndParsePublicKey,Ua as validateFarmRewards,gl as vec,jf as vecU8,Cy as voterStakeRegistryCreateDepositEntry,Ky as voterStakeRegistryCreateVoter,Iy as voterStakeRegistryDeposit,By as voterStakeRegistryUpdateVoterWeightRecord,xy as voterStakeRegistryWithdraw,Cx as wSolToSolToken,_a as withdrawRewardLayout,AA as xor,bh as zeros};
1
+ var rd=Object.defineProperty,sd=Object.defineProperties;var ad=Object.getOwnPropertyDescriptors;var kr=Object.getOwnPropertySymbols;var mc=Object.prototype.hasOwnProperty,dc=Object.prototype.propertyIsEnumerable;var lc=(i,e,t)=>e in i?rd(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,_=(i,e)=>{for(var t in e||(e={}))mc.call(e,t)&&lc(i,t,e[t]);if(kr)for(var t of kr(e))dc.call(e,t)&&lc(i,t,e[t]);return i},U=(i,e)=>sd(i,ad(e));var Qe=(i,e)=>{var t={};for(var n in i)mc.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&kr)for(var n of kr(i))e.indexOf(n)<0&&dc.call(i,n)&&(t[n]=i[n]);return t};import el from"axios";import{PublicKey as yc}from"@solana/web3.js";import{get as _s,set as pc}from"lodash";var ud=(o=>(o[o.Error=0]="Error",o[o.Warning=1]="Warning",o[o.Info=2]="Info",o[o.Debug=3]="Debug",o))(ud||{}),Es=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}},Vs={},fc={};function ke(i){let e=_s(Vs,i);if(!e){let t=_s(fc,i);e=new Es({name:i,logLevel:t}),pc(Vs,i,e)}return e}function lg(i,e){pc(fc,i,e);let t=_s(Vs,i);t&&(t.level=e)}import{MINT_SIZE as cd,TOKEN_PROGRAM_ID as ld,getTransferFeeConfig as md,unpackMint as dd}from"@solana/spl-token";var Ds=ke("Raydium_accountInfo_util");async function dn(i,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:r=100}=_({batchRequest:!1},t),s=Ws(e,r),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=i._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=Ws(c,10);a=(await(await Promise.all(u.map(async m=>await i._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Ds.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:f,lamports:y,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Ds.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new yc(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>i.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&Ds.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function We(i,e,t){let n=await dn(i,e.map(o=>o.pubkey),t);return e.map((o,r)=>U(_({},o),{accountInfo:n[r]}))}var pd=(n=>(n[n.Uninitialized=0]="Uninitialized",n[n.Mint=1]="Mint",n[n.Account=2]="Account",n))(pd||{}),Ag=1;async function _o({connection:i,mints:e,config:t}){var r,s,a;if(e.length===0)return{};let n=await We(i,e.map(c=>({pubkey:It(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<cd){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=dd(c.pubkey,c.accountInfo,(r=c.accountInfo)==null?void 0:r.owner);o[c.pubkey.toString()]=U(_({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||ld,feeConfig:(a=md(u))!=null?a:void 0})}return o[yc.default.toBase58()]=o[$.toBase58()],o}import tt from"bn.js";var Eo=9e15,Zn=1e9,qs="0123456789abcdef",Tr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Ir="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Us={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Eo,maxE:Eo,crypto:!1},Ac,Cn,ge=!0,xr="[DecimalError] ",jn=xr+"Invalid argument: ",wc=xr+"Precision limit exceeded",kc=xr+"crypto unavailable",hc="[object Decimal]",Bt=Math.floor,lt=Math.pow,fd=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,yd=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,bd=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Tc=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,fn=1e7,pe=7,gd=9007199254740991,Pd=Tr.length-1,Gs=Ir.length-1,X={toStringTag:hc};X.absoluteValue=X.abs=function(){var i=new this.constructor(this);return i.s<0&&(i.s=1),se(i)};X.ceil=function(){return se(new this.constructor(this),this.e+1,2)};X.clampedTo=X.clamp=function(i,e){var t,n=this,o=n.constructor;if(i=new o(i),e=new o(e),!i.s||!e.s)return new o(NaN);if(i.gt(e))throw Error(jn+e);return t=n.cmp(i),t<0?i:n.cmp(e)>0?e:new o(n)};X.comparedTo=X.cmp=function(i){var e,t,n,o,r=this,s=r.d,a=(i=new r.constructor(i)).d,c=r.s,u=i.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(r.e!==i.e)return r.e>i.e^c<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};X.cosine=X.cos=function(){var i,e,t=this,n=t.constructor;return t.d?t.d[0]?(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+pe,n.rounding=1,t=Ad(n,Kc(n,t)),n.precision=i,n.rounding=e,se(Cn==2||Cn==3?t.neg():t,i,e,!0)):new n(1):new n(NaN)};X.cubeRoot=X.cbrt=function(){var i,e,t,n,o,r,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(ge=!1,r=l.s*lt(l.s*l,1/3),!r||Math.abs(r)==1/0?(t=wt(l.d),i=l.e,(r=(i-t.length+1)%3)&&(t+=r==1||r==-2?"0":"00"),r=lt(t,1/3),i=Bt((i+1)/3)-(i%3==(i<0?-1:2)),r==1/0?t="5e"+i:(t=r.toExponential(),t=t.slice(0,t.indexOf("e")+1)+i),n=new m(t),n.s=l.s):n=new m(r.toString()),s=(i=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=qe(u.plus(l).times(a),u.plus(c),s+2,1),wt(a.d).slice(0,s)===(t=wt(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(se(a,i+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(se(n,i+1,1),e=!n.times(n).times(n).eq(l));break}return ge=!0,se(n,i,m.rounding,e)};X.decimalPlaces=X.dp=function(){var i,e=this.d,t=NaN;if(e){if(i=e.length-1,t=(i-Bt(this.e/pe))*pe,i=e[i],i)for(;i%10==0;i/=10)t--;t<0&&(t=0)}return t};X.dividedBy=X.div=function(i){return qe(this,new this.constructor(i))};X.dividedToIntegerBy=X.divToInt=function(i){var e=this,t=e.constructor;return se(qe(e,new t(i),0,1,1),t.precision,t.rounding)};X.equals=X.eq=function(i){return this.cmp(i)===0};X.floor=function(){return se(new this.constructor(this),this.e+1,3)};X.greaterThan=X.gt=function(i){return this.cmp(i)>0};X.greaterThanOrEqualTo=X.gte=function(i){var e=this.cmp(i);return e==1||e===0};X.hyperbolicCosine=X.cosh=function(){var i,e,t,n,o,r=this,s=r.constructor,a=new s(1);if(!r.isFinite())return new s(r.s?1/0:NaN);if(r.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(r.e,r.sd())+4,s.rounding=1,o=r.d.length,o<32?(i=Math.ceil(o/3),e=(1/Kr(4,i)).toString()):(i=16,e="2.3283064365386962890625e-10"),r=Vo(s,1,r.times(e),new s(1),!0);for(var c,u=i,l=new s(8);u--;)c=r.times(r),r=a.minus(c.times(l.minus(c.times(l))));return se(r,s.precision=t,s.rounding=n,!0)};X.hyperbolicSine=X.sinh=function(){var i,e,t,n,o=this,r=o.constructor;if(!o.isFinite()||o.isZero())return new r(o);if(e=r.precision,t=r.rounding,r.precision=e+Math.max(o.e,o.sd())+4,r.rounding=1,n=o.d.length,n<3)o=Vo(r,2,o,o,!0);else{i=1.4*Math.sqrt(n),i=i>16?16:i|0,o=o.times(1/Kr(5,i)),o=Vo(r,2,o,o,!0);for(var s,a=new r(5),c=new r(16),u=new r(20);i--;)s=o.times(o),o=o.times(a.plus(s.times(c.times(s).plus(u))))}return r.precision=e,r.rounding=t,se(o,e,t,!0)};X.hyperbolicTangent=X.tanh=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+7,n.rounding=1,qe(t.sinh(),t.cosh(),n.precision=i,n.rounding=e)):new n(t.s)};X.inverseCosine=X.acos=function(){var i,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,r=t.rounding;return n!==-1?n===0?e.isNeg()?pn(t,o,r):new t(0):new t(NaN):e.isZero()?pn(t,o+4,r).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),i=pn(t,o+4,r).times(.5),t.precision=o,t.rounding=r,i.minus(e))};X.inverseHyperbolicCosine=X.acosh=function(){var i,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(i=n.precision,e=n.rounding,n.precision=i+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,ge=!1,t=t.times(t).minus(1).sqrt().plus(t),ge=!0,n.precision=i,n.rounding=e,t.ln()):new n(t)};X.inverseHyperbolicSine=X.asinh=function(){var i,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,ge=!1,t=t.times(t).plus(1).sqrt().plus(t),ge=!0,n.precision=i,n.rounding=e,t.ln())};X.inverseHyperbolicTangent=X.atanh=function(){var i,e,t,n,o=this,r=o.constructor;return o.isFinite()?o.e>=0?new r(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(i=r.precision,e=r.rounding,n=o.sd(),Math.max(n,i)<2*-o.e-1?se(new r(o),i,e,!0):(r.precision=t=n-o.e,o=qe(o.plus(1),new r(1).minus(o),t+i,1),r.precision=i+4,r.rounding=1,o=o.ln(),r.precision=i,r.rounding=e,o.times(.5))):new r(NaN)};X.inverseSine=X.asin=function(){var i,e,t,n,o=this,r=o.constructor;return o.isZero()?new r(o):(e=o.abs().cmp(1),t=r.precision,n=r.rounding,e!==-1?e===0?(i=pn(r,t+4,n).times(.5),i.s=o.s,i):new r(NaN):(r.precision=t+6,r.rounding=1,o=o.div(new r(1).minus(o.times(o)).sqrt().plus(1)).atan(),r.precision=t,r.rounding=n,o.times(2)))};X.inverseTangent=X.atan=function(){var i,e,t,n,o,r,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<=Gs)return s=pn(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Gs)return s=pn(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/pe+2|0),i=t;i;--i)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(ge=!1,e=Math.ceil(a/pe),n=1,c=u.times(u),s=new l(u),o=u;i!==-1;)if(o=o.times(c),r=s.minus(o.div(n+=2)),o=o.times(c),s=r.plus(o.div(n+=2)),s.d[e]!==void 0)for(i=e;s.d[i]===r.d[i]&&i--;);return t&&(s=s.times(2<<t-1)),ge=!0,se(s,l.precision=m,l.rounding=d,!0)};X.isFinite=function(){return!!this.d};X.isInteger=X.isInt=function(){return!!this.d&&Bt(this.e/pe)>this.d.length-2};X.isNaN=function(){return!this.s};X.isNegative=X.isNeg=function(){return this.s<0};X.isPositive=X.isPos=function(){return this.s>0};X.isZero=function(){return!!this.d&&this.d[0]===0};X.lessThan=X.lt=function(i){return this.cmp(i)<0};X.lessThanOrEqualTo=X.lte=function(i){return this.cmp(i)<1};X.logarithm=X.log=function(i){var e,t,n,o,r,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(i==null)i=new l(10),e=!0;else{if(i=new l(i),t=i.d,i.s<0||!t||!t[0]||i.eq(1))return new l(NaN);e=i.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)r=!0;else{for(o=t[0];o%10===0;)o/=10;r=o!==1}if(ge=!1,a=m+p,s=Qn(u,a),n=e?Br(l,a+10):Qn(i,a),c=qe(s,n,a,1),mi(c.d,o=m,d))do if(a+=10,s=Qn(u,a),n=e?Br(l,a+10):Qn(i,a),c=qe(s,n,a,1),!r){+wt(c.d).slice(o+1,o+15)+1==1e14&&(c=se(c,m+1,0));break}while(mi(c.d,o+=10,d));return ge=!0,se(c,m,d)};X.minus=X.sub=function(i){var e,t,n,o,r,s,a,c,u,l,m,d,p=this,f=p.constructor;if(i=new f(i),!p.d||!i.d)return!p.s||!i.s?i=new f(NaN):p.d?i.s=-i.s:i=new f(i.d||p.s!==i.s?p:NaN),i;if(p.s!=i.s)return i.s=-i.s,p.plus(i);if(u=p.d,d=i.d,a=f.precision,c=f.rounding,!u[0]||!d[0]){if(d[0])i.s=-i.s;else if(u[0])i=new f(p);else return new f(c===3?-0:0);return ge?se(i,a,c):i}if(t=Bt(i.e/pe),l=Bt(p.e/pe),u=u.slice(),r=l-t,r){for(m=r<0,m?(e=u,r=-r,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/pe),s)+2,r>n&&(r=n,e.length=1),e.reverse(),n=r;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}r=0}for(m&&(e=u,u=d,d=e,i.s=-i.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>r;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=fn-1;--u[o],u[n]+=fn}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(i.d=u,i.e=Sr(u,t),ge?se(i,a,c):i):new f(c===3?-0:0)};X.modulo=X.mod=function(i){var e,t=this,n=t.constructor;return i=new n(i),!t.d||!i.s||i.d&&!i.d[0]?new n(NaN):!i.d||t.d&&!t.d[0]?se(new n(t),n.precision,n.rounding):(ge=!1,n.modulo==9?(e=qe(t,i.abs(),0,3,1),e.s*=i.s):e=qe(t,i,0,n.modulo,1),e=e.times(i),ge=!0,t.minus(e))};X.naturalExponential=X.exp=function(){return Xs(this)};X.naturalLogarithm=X.ln=function(){return Qn(this)};X.negated=X.neg=function(){var i=new this.constructor(this);return i.s=-i.s,se(i)};X.plus=X.add=function(i){var e,t,n,o,r,s,a,c,u,l,m=this,d=m.constructor;if(i=new d(i),!m.d||!i.d)return!m.s||!i.s?i=new d(NaN):m.d||(i=new d(i.d||m.s===i.s?m:NaN)),i;if(m.s!=i.s)return i.s=-i.s,m.minus(i);if(u=m.d,l=i.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(i=new d(m)),ge?se(i,a,c):i;if(r=Bt(m.e/pe),n=Bt(i.e/pe),u=u.slice(),o=r-n,o){for(o<0?(t=u,o=-o,s=l.length):(t=l,n=r,s=u.length),r=Math.ceil(a/pe),s=r>s?r+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=u.length,o=l.length,s-o<0&&(o=s,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/fn|0,u[o]%=fn;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return i.d=u,i.e=Sr(u,n),ge?se(i,a,c):i};X.precision=X.sd=function(i){var e,t=this;if(i!==void 0&&i!==!!i&&i!==1&&i!==0)throw Error(jn+i);return t.d?(e=Ic(t.d),i&&t.e+1>e&&(e=t.e+1)):e=NaN,e};X.round=function(){var i=this,e=i.constructor;return se(new e(i),i.e+1,e.rounding)};X.sine=X.sin=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+pe,n.rounding=1,t=kd(n,Kc(n,t)),n.precision=i,n.rounding=e,se(Cn>2?t.neg():t,i,e,!0)):new n(NaN)};X.squareRoot=X.sqrt=function(){var i,e,t,n,o,r,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(ge=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=wt(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=Bt((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(r=n,n=r.plus(qe(s,r,t+2,1)).times(.5),wt(r.d).slice(0,t)===(e=wt(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(se(r,c+1,0),r.times(r).eq(s))){n=r;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(se(n,c+1,1),i=!n.times(n).eq(s));break}return ge=!0,se(n,c,l.rounding,i)};X.tangent=X.tan=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+10,n.rounding=1,t=t.sin(),t.s=1,t=qe(t,new n(1).minus(t.times(t)).sqrt(),i+10,0),n.precision=i,n.rounding=e,se(Cn==2||Cn==4?t.neg():t,i,e,!0)):new n(NaN)};X.times=X.mul=function(i){var e,t,n,o,r,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(i=new m(i)).d;if(i.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!i.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?i.s/0:i.s*0);for(t=Bt(l.e/pe)+Bt(i.e/pe),c=d.length,u=p.length,c<u&&(r=d,d=p,p=r,s=c,c=u,u=s),r=[],s=c+u,n=s;n--;)r.push(0);for(n=u;--n>=0;){for(e=0,o=c+n;o>n;)a=r[o]+p[n]*d[o-n-1]+e,r[o--]=a%fn|0,e=a/fn|0;r[o]=(r[o]+e)%fn|0}for(;!r[--s];)r.pop();return e?++t:r.shift(),i.d=r,i.e=Sr(r,t),ge?se(i,m.precision,m.rounding):i};X.toBinary=function(i,e){return Ys(this,2,i,e)};X.toDecimalPlaces=X.toDP=function(i,e){var t=this,n=t.constructor;return t=new n(t),i===void 0?t:(Ut(i,0,Zn),e===void 0?e=n.rounding:Ut(e,0,8),se(t,i+t.e+1,e))};X.toExponential=function(i,e){var t,n=this,o=n.constructor;return i===void 0?t=hn(n,!0):(Ut(i,0,Zn),e===void 0?e=o.rounding:Ut(e,0,8),n=se(new o(n),i+1,e),t=hn(n,!0,i+1)),n.isNeg()&&!n.isZero()?"-"+t:t};X.toFixed=function(i,e){var t,n,o=this,r=o.constructor;return i===void 0?t=hn(o):(Ut(i,0,Zn),e===void 0?e=r.rounding:Ut(e,0,8),n=se(new r(o),i+o.e+1,e),t=hn(n,!1,i+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};X.toFraction=function(i){var e,t,n,o,r,s,a,c,u,l,m,d,p=this,f=p.d,y=p.constructor;if(!f)return new y(p);if(u=t=new y(1),n=c=new y(0),e=new y(n),r=e.e=Ic(f)-p.e-1,s=r%pe,e.d[0]=lt(10,s<0?pe+s:s),i==null)i=r>0?e:u;else{if(a=new y(i),!a.isInt()||a.lt(u))throw Error(jn+a);i=a.gt(e)?r>0?e:u:a}for(ge=!1,a=new y(wt(f)),l=y.precision,y.precision=r=f.length*pe*2;m=qe(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(i)!=1;)t=n,n=o,o=u,u=c.plus(m.times(o)),c=o,o=e,e=a.minus(m.times(o)),a=o;return o=qe(i.minus(t),n,0,1,1),c=c.plus(o.times(u)),t=t.plus(o.times(n)),c.s=u.s=p.s,d=qe(u,n,r,1).minus(p).abs().cmp(qe(c,t,r,1).minus(p).abs())<1?[u,n]:[c,t],y.precision=l,ge=!0,d};X.toHexadecimal=X.toHex=function(i,e){return Ys(this,16,i,e)};X.toNearest=function(i,e){var t=this,n=t.constructor;if(t=new n(t),i==null){if(!t.d)return t;i=new n(1),e=n.rounding}else{if(i=new n(i),e===void 0?e=n.rounding:Ut(e,0,8),!t.d)return i.s?t:i;if(!i.d)return i.s&&(i.s=t.s),i}return i.d[0]?(ge=!1,t=qe(t,i,0,e,1).times(i),ge=!0,se(t)):(i.s=t.s,t=i),t};X.toNumber=function(){return+this};X.toOctal=function(i,e){return Ys(this,8,i,e)};X.toPower=X.pow=function(i){var e,t,n,o,r,s,a=this,c=a.constructor,u=+(i=new c(i));if(!a.d||!i.d||!a.d[0]||!i.d[0])return new c(lt(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,r=c.rounding,i.eq(1))return se(a,n,r);if(e=Bt(i.e/pe),e>=i.d.length-1&&(t=u<0?-u:u)<=gd)return o=Bc(c,a,t,n),i.s<0?new c(1).div(o):se(o,n,r);if(s=a.s,s<0){if(e<i.d.length-1)return new c(NaN);if((i.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=lt(+a,u),e=t==0||!isFinite(t)?Bt(u*(Math.log("0."+wt(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):(ge=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=Xs(i.times(Qn(a,n+t)),n),o.d&&(o=se(o,n+5,1),mi(o.d,n,r)&&(e=n+10,o=se(Xs(i.times(Qn(a,e+t)),e),e+5,1),+wt(o.d).slice(n+1,n+15)+1==1e14&&(o=se(o,n+1,0)))),o.s=s,ge=!0,c.rounding=r,se(o,n,r))};X.toPrecision=function(i,e){var t,n=this,o=n.constructor;return i===void 0?t=hn(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(Ut(i,1,Zn),e===void 0?e=o.rounding:Ut(e,0,8),n=se(new o(n),i,e),t=hn(n,i<=n.e||n.e<=o.toExpNeg,i)),n.isNeg()&&!n.isZero()?"-"+t:t};X.toSignificantDigits=X.toSD=function(i,e){var t=this,n=t.constructor;return i===void 0?(i=n.precision,e=n.rounding):(Ut(i,1,Zn),e===void 0?e=n.rounding:Ut(e,0,8)),se(new n(t),i,e)};X.toString=function(){var i=this,e=i.constructor,t=hn(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()&&!i.isZero()?"-"+t:t};X.truncated=X.trunc=function(){return se(new this.constructor(this),this.e+1,1)};X.valueOf=X.toJSON=function(){var i=this,e=i.constructor,t=hn(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()?"-"+t:t};function wt(i){var e,t,n,o=i.length-1,r="",s=i[0];if(o>0){for(r+=s,e=1;e<o;e++)n=i[e]+"",t=pe-n.length,t&&(r+=Hn(t)),r+=n;s=i[e],n=s+"",t=pe-n.length,t&&(r+=Hn(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return r+s}function Ut(i,e,t){if(i!==~~i||i<e||i>t)throw Error(jn+i)}function mi(i,e,t,n){var o,r,s,a;for(r=i[0];r>=10;r/=10)--e;return--e<0?(e+=pe,o=0):(o=Math.ceil((e+1)/pe),e%=pe),r=lt(10,pe-e),a=i[o]%r|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==r||t>3&&a+1==r/2)&&(i[o+1]/r/100|0)==lt(10,e-2)-1||(a==r/2||a==0)&&(i[o+1]/r/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==r||!n&&t>3&&a+1==r/2)&&(i[o+1]/r/1e3|0)==lt(10,e-3)-1,s}function hr(i,e,t){for(var n,o=[0],r,s=0,a=i.length;s<a;){for(r=o.length;r--;)o[r]*=e;for(o[0]+=qs.indexOf(i.charAt(s++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function Ad(i,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/Kr(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),i.precision+=t,e=Vo(i,1,e.times(o),new i(1));for(var r=t;r--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return i.precision-=t,e}var qe=function(){function i(n,o,r){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*o+a,n[c]=s%r|0,a=s/r|0;return a&&n.unshift(a),n}function e(n,o,r,s){var a,c;if(r!=s)c=r>s?1:-1;else for(a=c=0;a<r;a++)if(n[a]!=o[a]){c=n[a]>o[a]?1:-1;break}return c}function t(n,o,r,s){for(var a=0;r--;)n[r]-=a,a=n[r]<o[r]?1:0,n[r]=a*s+n[r]-o[r];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,r,s,a,c){var u,l,m,d,p,f,y,b,g,P,h,I,T,k,S,x,K,B,C,L,N=n.constructor,O=n.s==o.s?1:-1,R=n.d,v=o.d;if(!R||!R[0]||!v||!v[0])return new N(!n.s||!o.s||(R?v&&R[0]==v[0]:!v)?NaN:R&&R[0]==0||!v?O*0:O/0);for(c?(p=1,l=n.e-o.e):(c=fn,p=pe,l=Bt(n.e/p)-Bt(o.e/p)),C=v.length,K=R.length,g=new N(O),P=g.d=[],m=0;v[m]==(R[m]||0);m++);if(v[m]>(R[m]||0)&&l--,r==null?(k=r=N.precision,s=N.rounding):a?k=r+(n.e-o.e)+1:k=r,k<0)P.push(1),f=!0;else{if(k=k/p+2|0,m=0,C==1){for(d=0,v=v[0],k++;(m<K||d)&&k--;m++)S=d*c+(R[m]||0),P[m]=S/v|0,d=S%v|0;f=d||m<K}else{for(d=c/(v[0]+1)|0,d>1&&(v=i(v,d,c),R=i(R,d,c),C=v.length,K=R.length),x=C,h=R.slice(0,C),I=h.length;I<C;)h[I++]=0;L=v.slice(),L.unshift(0),B=v[0],v[1]>=c/2&&++B;do d=0,u=e(v,h,C,I),u<0?(T=h[0],C!=I&&(T=T*c+(h[1]||0)),d=T/B|0,d>1?(d>=c&&(d=c-1),y=i(v,d,c),b=y.length,I=h.length,u=e(y,h,b,I),u==1&&(d--,t(y,C<b?L:v,b,c))):(d==0&&(u=d=1),y=v.slice()),b=y.length,b<I&&y.unshift(0),t(h,y,I,c),u==-1&&(I=h.length,u=e(v,h,C,I),u<1&&(d++,t(h,C<I?L:v,I,c))),I=h.length):u===0&&(d++,h=[0]),P[m++]=d,u&&h[0]?h[I++]=R[x]||0:(h=[R[x]],I=1);while((x++<K||h[0]!==void 0)&&k--);f=h[0]!==void 0}P[0]||P.shift()}if(p==1)g.e=l,Ac=f;else{for(m=1,d=P[0];d>=10;d/=10)m++;g.e=m+l*p-1,se(g,a?r+g.e+1:r,s,f)}return g}}();function se(i,e,t,n){var o,r,s,a,c,u,l,m,d,p=i.constructor;e:if(e!=null){if(m=i.d,!m)return i;for(o=1,a=m[0];a>=10;a/=10)o++;if(r=e-o,r<0)r+=pe,s=e,l=m[d=0],c=l/lt(10,o-s-1)%10|0;else if(d=Math.ceil((r+1)/pe),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,r%=pe,s=r-pe+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;r%=pe,s=r-pe+o,c=s<0?0:l/lt(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%lt(10,o-s-1)),u=t<4?(c||n)&&(t==0||t==(i.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(r>0?s>0?l/lt(10,o-s):0:m[d-1])%10&1||t==(i.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=i.e+1,m[0]=lt(10,(pe-e%pe)%pe),i.e=-e||0):m[0]=i.e=0,i;if(r==0?(m.length=d,a=1,d--):(m.length=d+1,a=lt(10,pe-r),m[d]=s>0?(l/lt(10,o-s)%lt(10,s)|0)*a:0),u)for(;;)if(d==0){for(r=1,s=m[0];s>=10;s/=10)r++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;r!=a&&(i.e++,m[0]==fn&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=fn)break;m[d--]=0,a=1}for(r=m.length;m[--r]===0;)m.pop()}return ge&&(i.e>p.maxE?(i.d=null,i.e=NaN):i.e<p.minE&&(i.e=0,i.d=[0])),i}function hn(i,e,t){if(!i.isFinite())return Sc(i);var n,o=i.e,r=wt(i.d),s=r.length;return e?(t&&(n=t-s)>0?r=r.charAt(0)+"."+r.slice(1)+Hn(n):s>1&&(r=r.charAt(0)+"."+r.slice(1)),r=r+(i.e<0?"e":"e+")+i.e):o<0?(r="0."+Hn(-o-1)+r,t&&(n=t-s)>0&&(r+=Hn(n))):o>=s?(r+=Hn(o+1-s),t&&(n=t-o-1)>0&&(r=r+"."+Hn(n))):((n=o+1)<s&&(r=r.slice(0,n)+"."+r.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(r+="."),r+=Hn(n))),r}function Sr(i,e){var t=i[0];for(e*=pe;t>=10;t/=10)e++;return e}function Br(i,e,t){if(e>Pd)throw ge=!0,t&&(i.precision=t),Error(wc);return se(new i(Tr),e,1,!0)}function pn(i,e,t){if(e>Gs)throw Error(wc);return se(new i(Ir),e,t,!0)}function Ic(i){var e=i.length-1,t=e*pe+1;if(e=i[e],e){for(;e%10==0;e/=10)t--;for(e=i[0];e>=10;e/=10)t++}return t}function Hn(i){for(var e="";i--;)e+="0";return e}function Bc(i,e,t,n){var o,r=new i(1),s=Math.ceil(n/pe+4);for(ge=!1;;){if(t%2&&(r=r.times(e),gc(r.d,s)&&(o=!0)),t=Bt(t/2),t===0){t=r.d.length-1,o&&r.d[t]===0&&++r.d[t];break}e=e.times(e),gc(e.d,s)}return ge=!0,r}function bc(i){return i.d[i.d.length-1]&1}function xc(i,e,t){for(var n,o=new i(e[0]),r=0;++r<e.length;)if(n=new i(e[r]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function Xs(i,e){var t,n,o,r,s,a,c,u=0,l=0,m=0,d=i.constructor,p=d.rounding,f=d.precision;if(!i.d||!i.d[0]||i.e>17)return new d(i.d?i.d[0]?i.s<0?0:1/0:1:i.s?i.s<0?0:i:0/0);for(e==null?(ge=!1,c=f):c=e,a=new d(.03125);i.e>-2;)i=i.times(a),m+=5;for(n=Math.log(lt(2,m))/Math.LN10*2+5|0,c+=n,t=r=s=new d(1),d.precision=c;;){if(r=se(r.times(i),c,1),t=t.times(++l),a=s.plus(qe(r,t,c,1)),wt(a.d).slice(0,c)===wt(s.d).slice(0,c)){for(o=m;o--;)s=se(s.times(s),c,1);if(e==null)if(u<3&&mi(s.d,c-n,p,u))d.precision=c+=10,t=r=a=new d(1),l=0,u++;else return se(s,d.precision=f,p,ge=!0);else return d.precision=f,s}s=a}}function Qn(i,e){var t,n,o,r,s,a,c,u,l,m,d,p=1,f=10,y=i,b=y.d,g=y.constructor,P=g.rounding,h=g.precision;if(y.s<0||!b||!b[0]||!y.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:y.s!=1?NaN:b?0:y);if(e==null?(ge=!1,l=h):l=e,g.precision=l+=f,t=wt(b),n=t.charAt(0),Math.abs(r=y.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)y=y.times(i),t=wt(y.d),n=t.charAt(0),p++;r=y.e,n>1?(y=new g("0."+t),r++):y=new g(n+"."+t.slice(1))}else return u=Br(g,l+2,h).times(r+""),y=Qn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=h,e==null?se(y,h,P,ge=!0):y;for(m=y,c=s=y=qe(y.minus(1),y.plus(1),l,1),d=se(y.times(y),l,1),o=3;;){if(s=se(s.times(d),l,1),u=c.plus(qe(s,new g(o),l,1)),wt(u.d).slice(0,l)===wt(c.d).slice(0,l))if(c=c.times(2),r!==0&&(c=c.plus(Br(g,l+2,h).times(r+""))),c=qe(c,new g(p),l,1),e==null)if(mi(c.d,l-f,P,a))g.precision=l+=f,u=s=y=qe(m.minus(1),m.plus(1),l,1),d=se(y.times(y),l,1),o=a=1;else return se(c,g.precision=h,P,ge=!0);else return g.precision=h,c;c=u,o+=2}}function Sc(i){return String(i.s*i.s/0)}function zs(i,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,i.e=t=t-n-1,i.d=[],n=(t+1)%pe,t<0&&(n+=pe),n<o){for(n&&i.d.push(+e.slice(0,n)),o-=pe;n<o;)i.d.push(+e.slice(n,n+=pe));e=e.slice(n),n=pe-e.length}else n-=o;for(;n--;)e+="0";i.d.push(+e),ge&&(i.e>i.constructor.maxE?(i.d=null,i.e=NaN):i.e<i.constructor.minE&&(i.e=0,i.d=[0]))}else i.e=0,i.d=[0];return i}function wd(i,e){var t,n,o,r,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Tc.test(e))return zs(i,e)}else if(e==="Infinity"||e==="NaN")return+e||(i.s=NaN),i.e=NaN,i.d=null,i;if(yd.test(e))t=16,e=e.toLowerCase();else if(fd.test(e))t=2;else if(bd.test(e))t=8;else throw Error(jn+e);for(r=e.search(/p/i),r>0?(c=+e.slice(r+1),e=e.substring(2,r)):e=e.slice(2),r=e.indexOf("."),s=r>=0,n=i.constructor,s&&(e=e.replace(".",""),a=e.length,r=a-r,o=Bc(n,new n(t),r,r*2)),u=hr(e,t,fn),l=u.length-1,r=l;u[r]===0;--r)u.pop();return r<0?new n(i.s*0):(i.e=Sr(u,l),i.d=u,ge=!1,s&&(i=qe(i,o,a*4)),c&&(i=i.times(Math.abs(c)<54?lt(2,c):di.pow(2,c))),ge=!0,i)}function kd(i,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Vo(i,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Kr(5,t)),e=Vo(i,2,e,e);for(var o,r=new i(5),s=new i(16),a=new i(20);t--;)o=e.times(e),e=e.times(r.plus(o.times(s.times(o).minus(a))));return e}function Vo(i,e,t,n,o){var r,s,a,c,u=1,l=i.precision,m=Math.ceil(l/pe);for(ge=!1,c=t.times(t),a=new i(n);;){if(s=qe(a.times(c),new i(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=qe(s.times(c),new i(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(r=m;s.d[r]===a.d[r]&&r--;);if(r==-1)break}r=a,a=n,n=s,s=r,u++}return ge=!0,s.d.length=m+1,s}function Kr(i,e){for(var t=i;--e;)t*=i;return t}function Kc(i,e){var t,n=e.s<0,o=pn(i,i.precision,1),r=o.times(.5);if(e=e.abs(),e.lte(r))return Cn=n?4:1,e;if(t=e.divToInt(o),t.isZero())Cn=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(r))return Cn=bc(t)?n?2:3:n?4:1,e;Cn=bc(t)?n?1:4:n?3:2}return e.minus(o).abs()}function Ys(i,e,t,n){var o,r,s,a,c,u,l,m,d,p=i.constructor,f=t!==void 0;if(f?(Ut(t,1,Zn),n===void 0?n=p.rounding:Ut(n,0,8)):(t=p.precision,n=p.rounding),!i.isFinite())l=Sc(i);else{for(l=hn(i),s=l.indexOf("."),f?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=hr(hn(d),10,o),d.e=d.d.length),m=hr(l,10,o),r=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=f?"0p+0":"0";else{if(s<0?r--:(i=new p(i),i.d=m,i.e=r,i=qe(i,d,t,n,0,o),m=i.d,r=i.e,u=Ac),s=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(i.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(i.s<0?8:7)),m.length=t,u)for(;++m[--t]>o-1;)m[t]=0,t||(++r,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=qs.charAt(m[s]);if(f){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=hr(l,o,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=qs.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(r<0?"p":"p+")+r}else if(r<0){for(;++r;)l="0"+l;l="0."+l}else if(++r>c)for(r-=c;r--;)l+="0";else r<c&&(l=l.slice(0,r)+"."+l.slice(r))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return i.s<0?"-"+l:l}function gc(i,e){if(i.length>e)return i.length=e,!0}function hd(i){return new this(i).abs()}function Td(i){return new this(i).acos()}function Id(i){return new this(i).acosh()}function Bd(i,e){return new this(i).plus(e)}function xd(i){return new this(i).asin()}function Sd(i){return new this(i).asinh()}function Kd(i){return new this(i).atan()}function Cd(i){return new this(i).atanh()}function Rd(i,e){i=new this(i),e=new this(e);var t,n=this.precision,o=this.rounding,r=n+4;return!i.s||!e.s?t=new this(NaN):!i.d&&!e.d?(t=pn(this,r,1).times(e.s>0?.25:.75),t.s=i.s):!e.d||i.isZero()?(t=e.s<0?pn(this,n,o):new this(0),t.s=i.s):!i.d||e.isZero()?(t=pn(this,r,1).times(.5),t.s=i.s):e.s<0?(this.precision=r,this.rounding=1,t=this.atan(qe(i,e,r,1)),e=pn(this,r,1),this.precision=n,this.rounding=o,t=i.s<0?t.minus(e):t.plus(e)):t=this.atan(qe(i,e,r,1)),t}function Ld(i){return new this(i).cbrt()}function Nd(i){return se(i=new this(i),i.e+1,2)}function Od(i,e,t){return new this(i).clamp(e,t)}function Md(i){if(!i||typeof i!="object")throw Error(xr+"Object expected");var e,t,n,o=i.defaults===!0,r=["precision",1,Zn,"rounding",0,8,"toExpNeg",-Eo,0,"toExpPos",0,Eo,"maxE",0,Eo,"minE",-Eo,0,"modulo",0,9];for(e=0;e<r.length;e+=3)if(t=r[e],o&&(this[t]=Us[t]),(n=i[t])!==void 0)if(Bt(n)===n&&n>=r[e+1]&&n<=r[e+2])this[t]=n;else throw Error(jn+t+": "+n);if(t="crypto",o&&(this[t]=Us[t]),(n=i[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(kc);else this[t]=!1;else throw Error(jn+t+": "+n);return this}function vd(i){return new this(i).cos()}function Fd(i){return new this(i).cosh()}function Cc(i){var e,t,n;function o(r){var s,a,c,u=this;if(!(u instanceof o))return new o(r);if(u.constructor=o,Pc(r)){u.s=r.s,ge?!r.d||r.e>o.maxE?(u.e=NaN,u.d=null):r.e<o.minE?(u.e=0,u.d=[0]):(u.e=r.e,u.d=r.d.slice()):(u.e=r.e,u.d=r.d?r.d.slice():r.d);return}if(c=typeof r,c==="number"){if(r===0){u.s=1/r<0?-1:1,u.e=0,u.d=[0];return}if(r<0?(r=-r,u.s=-1):u.s=1,r===~~r&&r<1e7){for(s=0,a=r;a>=10;a/=10)s++;ge?s>o.maxE?(u.e=NaN,u.d=null):s<o.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[r]):(u.e=s,u.d=[r]);return}else if(r*0!==0){r||(u.s=NaN),u.e=NaN,u.d=null;return}return zs(u,r.toString())}else if(c!=="string")throw Error(jn+r);return(a=r.charCodeAt(0))===45?(r=r.slice(1),u.s=-1):(a===43&&(r=r.slice(1)),u.s=1),Tc.test(r)?zs(u,r):wd(u,r)}if(o.prototype=X,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=Md,o.clone=Cc,o.isDecimal=Pc,o.abs=hd,o.acos=Td,o.acosh=Id,o.add=Bd,o.asin=xd,o.asinh=Sd,o.atan=Kd,o.atanh=Cd,o.atan2=Rd,o.cbrt=Ld,o.ceil=Nd,o.clamp=Od,o.cos=vd,o.cosh=Fd,o.div=_d,o.exp=Ed,o.floor=Vd,o.hypot=Dd,o.ln=Wd,o.log=qd,o.log10=Gd,o.log2=Ud,o.max=Xd,o.min=zd,o.mod=Yd,o.mul=Hd,o.pow=Qd,o.random=jd,o.round=Zd,o.sign=$d,o.sin=Jd,o.sinh=ep,o.sqrt=tp,o.sub=np,o.sum=op,o.tan=ip,o.tanh=rp,o.trunc=sp,i===void 0&&(i={}),i&&i.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)i.hasOwnProperty(t=n[e++])||(i[t]=this[t]);return o.config(i),o}function _d(i,e){return new this(i).div(e)}function Ed(i){return new this(i).exp()}function Vd(i){return se(i=new this(i),i.e+1,3)}function Dd(){var i,e,t=new this(0);for(ge=!1,i=0;i<arguments.length;)if(e=new this(arguments[i++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return ge=!0,new this(1/0);t=e}return ge=!0,t.sqrt()}function Pc(i){return i instanceof di||i&&i.toStringTag===hc||!1}function Wd(i){return new this(i).ln()}function qd(i,e){return new this(i).log(e)}function Ud(i){return new this(i).log(2)}function Gd(i){return new this(i).log(10)}function Xd(){return xc(this,arguments,"lt")}function zd(){return xc(this,arguments,"gt")}function Yd(i,e){return new this(i).mod(e)}function Hd(i,e){return new this(i).mul(e)}function Qd(i,e){return new this(i).pow(e)}function jd(i){var e,t,n,o,r=0,s=new this(1),a=[];if(i===void 0?i=this.precision:Ut(i,1,Zn),n=Math.ceil(i/pe),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));r<n;)o=e[r],o>=429e7?e[r]=crypto.getRandomValues(new Uint32Array(1))[0]:a[r++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);r<n;)o=e[r]+(e[r+1]<<8)+(e[r+2]<<16)+((e[r+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,r):(a.push(o%1e7),r+=4);r=n/4}else throw Error(kc);else for(;r<n;)a[r++]=Math.random()*1e7|0;for(n=a[--r],i%=pe,n&&i&&(o=lt(10,pe-i),a[r]=(n/o|0)*o);a[r]===0;r--)a.pop();if(r<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=pe)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<pe&&(t-=pe-n)}return s.e=t,s.d=a,s}function Zd(i){return se(i=new this(i),i.e+1,this.rounding)}function $d(i){return i=new this(i),i.d?i.d[0]?i.s:0*i.s:i.s||NaN}function Jd(i){return new this(i).sin()}function ep(i){return new this(i).sinh()}function tp(i){return new this(i).sqrt()}function np(i,e){return new this(i).sub(e)}function op(){var i=0,e=arguments,t=new this(e[i]);for(ge=!1;t.s&&++i<e.length;)t=t.plus(e[i]);return ge=!0,se(t,this.precision,this.rounding)}function ip(i){return new this(i).tan()}function rp(i){return new this(i).tanh()}function sp(i){return se(i=new this(i),i.e+1,1)}X[Symbol.for("nodejs.util.inspect.custom")]=X.toString;X[Symbol.toStringTag]="Decimal";var di=X.constructor=Cc(Us);Tr=new di(Tr);Ir=new di(Ir);var M=di;import pp from"big.js";import $n from"bn.js";import ap from"toformat";var up=ap,pi=up;import Rr from"big.js";import cp from"bn.js";import lp from"decimal.js-light";import fi from"bn.js";var Hs=(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))(Hs||{}),Rc=9007199254740991;function te(i){let e=ke("Raydium_parseBigNumberish");if(i instanceof fi)return i;if(typeof i=="string"){if(i.match(/^-?[0-9]+$/))return new fi(i);e.logWithError(`invalid BigNumberish string: ${i}`)}return typeof i=="number"?(i%1&&e.logWithError(`BigNumberish number underflow: ${i}`),(i>=Rc||i<=-Rc)&&e.logWithError(`BigNumberish number overflow: ${i}`),new fi(String(i))):typeof i=="bigint"?new fi(i.toString()):(e.error(`invalid BigNumberish value: ${i}`),new fi(0))}var Cr=ke("module/fraction"),Qs=pi(Rr),yi=pi(lp),mp={[0]:yi.ROUND_DOWN,[1]:yi.ROUND_HALF_UP,[2]:yi.ROUND_UP},dp={[0]:Rr.roundDown,[1]:Rr.roundHalfUp,[2]:Rr.roundUp},Pe=class{constructor(e,t=new cp(1)){this.numerator=te(e),this.denominator=te(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Pe(this.denominator,this.numerator)}add(e){let t=e instanceof Pe?e:new Pe(te(e));return this.denominator.eq(t.denominator)?new Pe(this.numerator.add(t.numerator),this.denominator):new Pe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Pe?e:new Pe(te(e));return this.denominator.eq(t.denominator)?new Pe(this.numerator.sub(t.numerator),this.denominator):new Pe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Pe?e:new Pe(te(e));return new Pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Pe?e:new Pe(te(e));return new Pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Cr.logWithError(`${e} is not an integer.`),e<=0&&Cr.logWithError(`${e} is not positive.`),yi.set({precision:e+1,rounding:mp[n]});let o=new yi(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Cr.logWithError(`${e} is not an integer.`),e<0&&Cr.logWithError(`${e} is negative.`),Qs.DP=e,Qs.RM=dp[n]||1,new Qs(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var fp=ke("Raydium_amount"),Lr=pi(pp);function Lc(i,e){let t="0",n="0";if(i.includes(".")){let o=i.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):fp.logWithError(`invalid number string, num: ${i}`)}else t=i;return[t,n.slice(0,e)||n]}var Ce=class extends Pe{constructor(t,n,o=!0,r){let s=new $n(0),a=Po.pow(new $n(t.decimals));if(o)s=te(n);else{let c=new $n(0),u=new $n(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Lc(n.toString(),t.decimals);c=te(l),u=te(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ke(r||"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 Ce(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Ce(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Lr.DP=this.token.decimals,new Lr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}},go=class extends Pe{constructor(t,n,o=!0,r){let s=new $n(0),a=Po.pow(new $n(t.decimals));if(o)s=te(n);else{let c=new $n(0),u=new $n(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Lc(n.toString(),t.decimals);c=te(l),u=te(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ke(r||"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 go(this.currency,this.raw.add(t.raw))}sub(t){return this.currency.equals(t.currency)||this.logger.logWithError("sub currency not equals"),new go(this.currency,this.raw.sub(t.raw))}toSignificant(t=this.currency.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.currency.decimals,n,o=0){return t>this.currency.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Lr.DP=this.currency.decimals,new Lr(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as yp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Nc}from"@solana/spl-token";var Tn={chainId:101,address:yp.default.toBase58(),programId:Nc.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},yt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Nc.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as ea}from"@solana/web3.js";import{PublicKey as je,SystemProgram as Oc,SYSVAR_RENT_PUBKEY as bp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as gp}from"@solana/spl-token";function w({pubkey:i,isSigner:e=!1,isWritable:t=!0}){return{pubkey:i,isWritable:t,isSigner:e}}var js=[w({pubkey:gp,isWritable:!1}),w({pubkey:Oc.programId,isWritable:!1}),w({pubkey:bp,isWritable:!1})];function Zs({publicKey:i,transformSol:e}){let t=$s(i.toString());if(t instanceof je)return e&&t.equals(bt)?$:t;if(e&&t.toString()===bt.toBase58())return $;if(typeof t=="string"){if(t===je.default.toBase58())return je.default;try{return new je(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function $s(i){try{return new je(i)}catch{return i}}var Nr=new je("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),In=new je("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),rt=new je("SysvarRent111111111111111111111111111111111"),Js=new je("SysvarC1ock11111111111111111111111111111111"),an=new je("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Or=new je("Sysvar1nstructions1111111111111111111111111"),Mr=Oc.programId,$g=new je("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Jg=new je("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),eP=new je("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),tP=new je("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),nP=new je("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),oP=new je("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),iP=new je("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),rP=new je("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),sP=new je("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),aP=new je("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),uP=new je("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),$=new je("So11111111111111111111111111111111111111112"),bt=je.default;function It(i){return Zs({publicKey:i,transformSol:!0})}var ta=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:r=!1,isToken2022:s=!1}){if(e===bt.toBase58()||e instanceof ea&&bt.equals(e)){this.decimals=yt.decimals,this.symbol=yt.symbol,this.name=yt.name,this.mint=new ea(yt.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=r?ea.default:Zs({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Oe=ta;Oe.WSOL=new ta(U(_({},yt),{mint:yt.address}));var na=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},bi=na;bi.SOL=new na(Tn);function gP(i,e){return i instanceof Oe&&e instanceof Oe?i.equals(e):i instanceof Oe||e instanceof Oe?!1:i===e}import Pp from"bn.js";var Mc=new Pe(new Pp(100)),et=class extends Pe{toSignificant(e=5,t,n){return this.mul(Mc).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Mc).toFixed(e,t,n)}};var Ap=ke("Raydium_price"),gt=class extends Pe{constructor(t){let{baseToken:n,quoteToken:o,numerator:r,denominator:s}=t;super(r,s);this.baseToken=n,this.quoteToken=o,this.scalar=new Pe(oa(n.decimals),oa(o.decimals))}get raw(){return new Pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new gt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Ap.logWithError("mul token not equals");let n=super.mul(t);return new gt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};function st(i){if(i instanceof et)return new Pe(i.numerator,i.denominator);if(i instanceof gt)return i.adjusted;if(i instanceof Ce)try{return st(i.toExact())}catch{return new Pe(at)}if(i instanceof Pe)return i;let e=String(i),t=Ao(e);return new Pe(t.numerator,t.denominator)}function EP(i){var n;if(i instanceof et)return{fr:new Pe(i.numerator,i.denominator)};if(i instanceof gt)return{fr:i.adjusted};if(i instanceof Ce)return{fr:st(i.toExact()),decimals:i.token.decimals};if(i instanceof Pe)return{fr:i};let e=String(i),t=Ao(e);return{fr:new Pe(t.numerator,t.denominator),decimals:(n=t.dec)==null?void 0:n.length}}function VP(i,e){if(i==null||e==null)return!1;let t=st(i),n=st(e);return t.sub(n).numerator,t.sub(n).numerator.lt(at)}function wp(i,e){if(i==null||e==null)return!1;let t=st(i),n=st(e);return t.sub(n).numerator.gt(at)}function DP(i,e){if(i==null||e==null)return!1;let t=st(i),n=st(e);return t.sub(n).numerator.lte(at)}function WP(i,e){if(i==null||e==null)return!1;let t=st(i),n=st(e);return t.sub(n).numerator.gte(at)}function kp(i,e){if(i==null||e==null)return!1;let t=st(i),n=st(e);return t.sub(n).numerator.eq(at)}function qP(i,e){if(i==null||e==null)return;let t=st(i),n=st(e);try{return t.div(n)}catch{return t}}function UP(i,e){if(i==null||e==null)return;let t=st(i),n=st(e);return t.sub(n)}function GP(i){return i==null?!1:!kp(i,0)}function XP(i,e){return wp(e,i)?e:i}function ia(i,e){if(i==null||e==null)return;let t=st(i),n=st(e);return t.mul(n)}function zP(i,e){if(i==null||e==null)return;let t=st(i),n=st(e);return t.add(n)}var at=new tt(0),Fc=new tt(1),iA=new tt(2),rA=new tt(3),sA=new tt(5),Po=new tt(10),aA=new tt(100),uA=new tt(1e3),cA=new tt(1e4);function oa(i){return Po.pow(te(i))}function Ao(i){var a;if(i===void 0)return{denominator:"1",numerator:"0"};if(i instanceof tt)return{numerator:i.toString(),denominator:"1"};if(i instanceof Pe)return{denominator:i.denominator.toString(),numerator:i.numerator.toString()};let e=String(i),[,t="",n="",o=""]=(a=e.replace(",","").match(/(-?)(\d*)\.?(\d*)/))!=null?a:[],r="1"+"0".repeat(o.length),s=t+(n==="0"?"":n)+o||"0";return{denominator:r,numerator:s,sign:t,int:n,dec:o}}function vr(i,e){let t=i.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function hp(i){var n;let[,e="",t=""]=(n=i.toFixed(2).match(/(-?)(\d*)\.?(\d*)/))!=null?n:[];return`${e}${t}`}function Tp(i,e=0){return i instanceof tt?i:new tt(hp(_c(i).mul(Po.pow(new tt(String(e))))))}function _c(i){if(i instanceof et)return new Pe(i.numerator,i.denominator);if(i instanceof gt)return i.adjusted;if(i instanceof Ce)try{return _c(i.toExact())}catch{return new Pe(at)}if(i instanceof Pe)return i;let e=String(i),t=Ao(e);return new Pe(t.numerator,t.denominator)}function gi(i,e,t){return i.mul(e).add(t).sub(new tt(1)).div(t)}function Fr(i,e,t){return i.mul(e).div(t)}function lA(i,e){let{numerator:t,denominator:n}=Ao(i);return new et(new tt(t),new tt(n).mul(e!=null&&e.alreadyDecimaled?new tt(100):new tt(1)))}function mA(i){let{token:e,numberPrice:t,decimalDone:n}=i,o=new Oe({mint:"",decimals:6,symbol:"usd",name:"usd",skipMint:!0}),{numerator:r,denominator:s}=Ao(t),a=n?new tt(r).mul(Po.pow(new tt(e.decimals))):r,c=new tt(s).mul(Po.pow(new tt(o.decimals)));return new gt({baseToken:o,denominator:c.toString(),quoteToken:new Oe(U(_({},e),{skipMint:!0,mint:""})),numerator:a.toString()})}function vc(i){let e=new bi({decimals:6,symbol:"usd",name:"usd"}),t=Tp(ia(i,10**e.decimals));return new go(e,t)}function dA(i,e){return vc(!e||!i?0:ia(i,e))}function pA(i){if(i==null)return;let{numerator:e,denominator:t}=Ao(i.toString());return new Pe(e,t)}function fA(i){return i instanceof M}var Ec=i=>typeof i=="number",Vc=i=>i?new Date(i):new Date,Ip=i=>Vc(i).getTime();function Dc(i,e,t){let n=Ec(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(i).getTime()<=n}function Wc(i,e,t){let n=Ec(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(i).getTime()>n}function bA(i,e){let n=Ip(i)+(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 Vc(n)}function Ws(i,e=1,t=[]){let n=[...i];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}function PA(i,...e){return i.filter(t=>e.every(n=>n.includes(t)))}function AA(i,...e){return i.filter(t=>e.every(n=>!n.includes(t)))}function wA(i){return[...new Set(i)]}var yn=class{constructor(e){this._owner=e}get publicKey(){return yn.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return yn.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return yn.isKeyPair(this._owner)}get isPublicKey(){return yn.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!yn.isKeyPair(e)}};import{PublicKey as Cp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Rp}from"@solana/spl-token";import{ComputeBudgetProgram as qc,Keypair as Uc,PublicKey as Gc,Transaction as Er,TransactionMessage as Bp,VersionedTransaction as ra}from"@solana/web3.js";var Rn=(t=>(t[t.V0=0]="V0",t[t.LEGACY=1]="LEGACY",t))(Rn||{}),z={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",ClmmLockPosition:"ClmmLockPosition",ClmmHarvestLockPosition:"ClmmHarvestLockPosition",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV4Withdraw:"FarmV4Withdraw",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut",CpmmLockLp:"CpmmLockLp",CpmmCollectLockFee:"CpmmCollectLockFee",TransferTip:"TransferTip"};import{TOKEN_PROGRAM_ID as xp}from"@solana/spl-token";var Ln=ke("Raydium_txUtil"),Xc=1644;function Vr(i){let e=[],t=[];return i.microLamports&&(e.push(qc.setComputeUnitPrice({microLamports:i.microLamports})),t.push(z.SetComputeUnitPrice)),i.units&&(e.push(qc.setComputeUnitLimit({units:i.units})),t.push(z.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Do(i,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=i.getLatestBlockhash)==null?void 0:n.call(i,{commitment:t})))==null?void 0:o.blockhash}async function Dr(i,e){return i.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);i.onSignature(e,r=>{if(clearTimeout(o),!r.err){t("");return}n(Object.assign(r.err,{txId:e}))},"confirmed")})}function Wr(i,e){i.length<1&&Ln.logWithError(`no instructions provided: ${i.toString()}`),e.length<1&&Ln.logWithError(`no signers provided:, ${e.toString()}`);let t=new Er;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...i);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Xc}catch{return!1}}async function zc(i,e,t,n=!0){let o=new Gc("RaydiumSimuLateTransaction11111111111111111"),r=[],s=new Er;s.feePayer=o;for(let u of e)Wr([...s.instructions,u],[o])||(r.push(s),s=new Er,s.feePayer=o),s.add(u);s.instructions.length>0&&r.push(s);let a=[];try{if(a=await Sp(i,r,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Ln.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Ln.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Ln.debug("filteredLog:",c),l.length||Ln.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function Yc(i,e){let t=i.match(/{["\w:,]+}/g);return!t||t.length!==1?Ln.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Nn(i,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(i);return!n||n.length!==2?Ln.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ie(i,e){let[t,n]=Gc.findProgramAddressSync(i,e);return{publicKey:t,nonce:n}}async function Sp(i,e,t){let n=[];if(t){let o=await i.getLatestBlockhash(),r=[];for(let u of e){u.recentBlockhash=o.blockhash,u.lastValidBlockHeight=o.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");r.push(p)}let s=r.map(u=>{let l=i._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 i._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async o=>await(await i.simulateTransaction(o)).value))}catch(o){o instanceof Error&&Ln.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:o.message})}return n}function Pi({instructions:i,payer:e,signers:t}){return Wr(i,[e,...t])}function Ai({instructions:i,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Uc.generate().publicKey.toString()}){let r=new Bp({payerKey:e,recentBlockhash:n,instructions:i}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new ra(r).serialize()).toString("base64").length<Xc}catch{return!1}}var _r={time:0,data:void 0};async function OA(i){if(!_r.data||(Date.now()-_r.time)/1e3>30){let e=await i.getEpochInfo();return _r={time:Date.now(),data:e},e}else return _r.data}var Hc=i=>Buffer.isBuffer(i)?i:i instanceof Uint8Array?Buffer.from(i.buffer,i.byteOffset,i.byteLength):Buffer.from(i),Kp=i=>{let e=i.serialize({requireAllSignatures:!1,verifySignatures:!1});i instanceof ra&&(e=Hc(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function wo(i){let e=[];return i.forEach(t=>{t instanceof Er&&(t.recentBlockhash||(t.recentBlockhash=xp.toBase58()),t.feePayer||(t.feePayer=Uc.generate().publicKey)),e.push(Kp(t))}),console.log("simulate tx string:",e),e}function MA(i){let e=i.serialize({requireAllSignatures:!1,verifySignatures:!1});return i instanceof ra&&(e=Hc(e)),e.toString("base64")}function J(i,e,t){return ie([i.toBuffer(),(t!=null?t:Rp).toBuffer(),e.toBuffer()],new Cp("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ae}from"@solana/web3.js";var sa=new ae("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),aa=new ae("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),ua=new ae("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Wo=new ae("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Lp=new ae("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),ca=new ae("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),qr=new ae("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),wi=new ae("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Np=new ae("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Ur=new ae("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Jn=new ae("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),qo=new ae("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),ki=new ae("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),eo=new ae("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Op=new ae("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),la=new ae("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Mp=new ae("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),vp=new ae("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Fp=new ae("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),_p=new ae("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),to=new ae("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),ma=new ae("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Ep=new ae("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),hi=new ae("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Ti=new ae("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),mt=new ae("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),Vp=new ae("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),WA=new ae("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),qA=new ae("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Dp=new ae("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Wp=new ae("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),Ii={IDO_PROGRAM_ID_V1:Mp,IDO_PROGRAM_ID_V2:vp,IDO_PROGRAM_ID_V3:Fp,IDO_PROGRAM_ID_V4:_p},Nt={AMM_V4:wi,AMM_STABLE:Np,CLMM_PROGRAM_ID:Jn,CLMM_LOCK_PROGRAM_ID:qo,CLMM_LOCK_AUTH_ID:ki,FARM_PROGRAM_ID_V3:sa,FARM_PROGRAM_ID_V4:aa,FARM_PROGRAM_ID_V5:ua,FARM_PROGRAM_ID_V6:Wo,OPEN_BOOK_PROGRAM:ca,SERUM_PROGRAM_ID_V3:qr,UTIL1216:Lp,Router:Op,CREATE_CPMM_POOL_PROGRAM:to,CREATE_CPMM_POOL_AUTH:ma,CREATE_CPMM_POOL_FEE_ACC:Ep,LOCK_CPMM_PROGRAM:hi,LOCK_CPMM_AUTH:Ti,LAUNCHPAD_PROGRAM:mt,LAUNCHPAD_AUTH:Vp,LAUNCHPAD_PLATFORM:Dp,LAUNCHPAD_CONFIG:Wp,FEE_DESTINATION_ID:la,MODEL_DATA_PUBKEY:eo},On={OPEN_BOOK_PROGRAM:new ae("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new ae("Ray1111111111111111111111111111111111111111"),AMM_V4:new ae("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new ae("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new ae("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new ae("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new ae("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new ae("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new ae("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new ae("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new ae("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new ae("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:ae.default,Router:new ae("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new ae("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new ae("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new ae("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new ae("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new ae("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new ae("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new ae("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new ae("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new ae("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new ae("Ray1111111111111111111111111111111111111111")};import xe from"bn.js";var Ot=1e4;function XA(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let o=t.epoch<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new xe(o.maximumFee.toString()),s=t.epoch<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===Ot){let a=new xe(o.maximumFee.toString());return{amount:i.add(a),fee:a,expirationTime:s}}else{let a=bn(i.mul(new xe(Ot)),new xe(Ot-o.transferFeeBasisPoints)),c=new xe(o.maximumFee.toString()),u=a.sub(i).gt(c)?i.add(c):a,l=bn(u.mul(new xe(o.transferFeeBasisPoints)),new xe(Ot)),m=l.gt(r)?r:l;return{amount:u,fee:m,expirationTime:s}}else{let a=bn(i.mul(new xe(o.transferFeeBasisPoints)),new xe(Ot)),c=a.gt(r)?r:a;return{amount:i,fee:c,expirationTime:s}}}function Ne(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let o=U(_({},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}}),r=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,s=new xe(r.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===Ot){let c=new xe(r.maximumFee.toString());return{amount:i.add(c),fee:c,expirationTime:a}}else{let c=bn(i.mul(new xe(Ot)),new xe(Ot-r.transferFeeBasisPoints)),u=new xe(r.maximumFee.toString()),l=c.sub(i).gt(u)?i.add(u):c,m=bn(l.mul(new xe(r.transferFeeBasisPoints)),new xe(Ot)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=bn(i.mul(new xe(r.transferFeeBasisPoints)),new xe(Ot)),u=c.gt(s)?s:c;return{amount:i,fee:u,expirationTime:a}}}function gn(i,e){return i===void 0?e:e===void 0?i:Math.min(i,e)}function bn(i,e){let{div:t,mod:n}=i.divmod(e);return n.gt(new xe(0))?t.add(new xe(1)):t}function ko(i,e){if(i.isZero())return new xe(0);let t=i.div(e);return t.isZero()?new xe(1):i.mod(e).gt(new xe(0))?t.add(new xe(1)):t}function da(i,e,t){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new xe(o.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=bn(i.mul(new xe(o.transferFeeBasisPoints)),new xe(Ot)),c=a.gt(r)?r:a;return{amount:i,fee:c,expirationTime:s}}function pa(i,e,t){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,r=new xe(o.maximumFee.toString()),s=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===Ot){let a=new xe(o.maximumFee.toString());return{amount:i.add(a),fee:a,expirationTime:s}}else{let a=bn(i.mul(new xe(Ot)),new xe(Ot-o.transferFeeBasisPoints)),c=new xe(o.maximumFee.toString()),u=a.sub(i).gt(c)?i.add(c):a,l=bn(u.mul(new xe(o.transferFeeBasisPoints)),new xe(Ot)),m=l.gt(r)?r:l;return{amount:u,fee:m,expirationTime:s}}}import{PublicKey as fa,AddressLookupTableAccount as Xo}from"@solana/web3.js";async function ya({connection:i,address:e,cluster:t="mainnet"}){let n=await dn(i,[...new Set(e.map(r=>r.toString()))].map(r=>new fa(r))),o={};for(let r=0;r<e.length;r++){let s=n[r],a=e[r];if(!s)continue;let c=new Xo({key:a,state:Xo.deserialize(s.data)});o[a.toString()]=c,t==="devnet"?Go[a.toString()]=c:Uo[a.toString()]=c}return o}var Uo={},ba=async i=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Uo[e])return Uo;let t=new fa(e),n=await i.getAccountInfo(t);return n&&(Uo[e]=new Xo({key:t,state:Xo.deserialize(n.data)})),Uo},Go={},ga=async i=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Go[e])return Go;let t=new fa(e),n=await i.getAccountInfo(t);return n&&(Go[e]=new Xo({key:t,state:Xo.deserialize(n.data)})),Go};import{PublicKey as zo,sendAndConfirmTransaction as Pa,SystemProgram as qp,Transaction as Bi,TransactionMessage as xi,VersionedTransaction as Si}from"@solana/web3.js";import Up from"axios";var Gr=2e3,Xr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.loopMultiTxStatus=!!e.loopMultiTxStatus}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Up.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}=Vr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(qp.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new zo(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(z.TransferTip),!0):!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:r=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...r),this.lookupTableAddress.push(...s.filter(a=>a!==zo.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(_({},t||{})):this.build(t)}build(e){var n;let t=new Bi;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var l;let{recentBlockHash:r,skipPreflight:s=!0,sendAndConfirm:a,notSendToRpc:c}=o||{},u=r!=null?r:await Do(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),wo([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await Pa(this.connection,t,this.signers.find(d=>d.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 m=await this.signAllTransactions([t]);if(this.signers.length)for(let d of m)try{d.sign(...this.signers)}catch{}return{txId:c?"":await this.connection.sendRawTransaction(m[0].serialize(),{skipPreflight:s}),signedTx:m[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),r=t.filter(l=>l.transaction.instructions.length>0),s=[o,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.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 g;let{sequentially:m,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:f,skipPreflight:y=!0}=l||{},b=f!=null?f:await Do(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let P=[],h=0;for(let I of s){if(++h,h<=p)continue;let T=await Pa(this.connection,I,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});P.push(T)}return{txIds:P,signedTxs:s}}return{txIds:await await Promise.all(s.map(async P=>(P.recentBlockhash=b,await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let P=s.map((I,T)=>(I.recentBlockhash=b,a[T].length&&I.sign(...a[T]),I));wo(P);let h=await this.signAllTransactions(P);if(m){let I=0,T=[],k=async()=>{if(!h[I])return;let S=await this.connection.sendRawTransaction(h[I].serialize(),{skipPreflight:y});T.push({txId:S,status:"sent",signedTx:h[I]}),d==null||d([...T]),I++;let x=!1,K=null,B=null,C=L=>{K!==null&&clearInterval(K),B!==null&&this.connection.removeSignatureListener(B);let N=T.findIndex(O=>O.txId===S);if(N>-1){if(T[N].status==="error"||T[N].status==="success")return;T[N].status=L.err?"error":"success"}d==null||d([...T]),L.err||k()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var L;if(x){clearInterval(K);return}try{let N=await this.connection.getTransaction(S,{commitment:"confirmed",maxSupportedTransactionVersion:0});N&&(x=!0,clearInterval(K),C({err:((L=N.meta)==null?void 0:L.err)||null}),console.log("tx status from getTransaction:",S))}catch(N){x=!0,clearInterval(K),console.error("getTransaction timeout:",N,S)}},Gr)),B=this.connection.onSignature(S,L=>{if(x){this.connection.removeSignatureListener(B);return}x=!0,C(L)},"confirmed"),this.connection.getSignatureStatus(S)};return await k(),{txIds:T.map(S=>S.txId),signedTxs:h}}else{let I=[];for(let T=0;T<h.length;T+=1){let k=await this.connection.sendRawTransaction(h[T].serialize(),{skipPreflight:y});I.push(k)}return{txIds:I,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var y;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:r}=f,s=Qe(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=_(_({},this.cluster==="devnet"?await ga(this.connection):await ba(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new zo(b));let l=await ya({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?zo.default.toBase58():r!=null?r:await Do(this.connection,this.blockhashCommitment),d=new xi({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((y=this.owner)==null?void 0:y.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new Si(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var I;let{skipPreflight:g=!0,sendAndConfirm:P,notSendToRpc:h}=b||{};if(wo([p]),(I=this.owner)!=null&&I.isKeyPair){let T=await this.connection.sendTransaction(p,{skipPreflight:g});return P&&await Dr(this.connection,T),{txId:T,signedTx:p}}if(this.signAllTransactions){let T=await this.signAllTransactions([p]);if(this.signers.length)for(let k of T)try{k.sign(this.signers)}catch{}return{txId:h?"":await this.connection.sendTransaction(T[0],{skipPreflight:g}),signedTx:T[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),r=t.filter(l=>l.builder.instructions.length>0),s=[o,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],c=[...this.instructionTypes,...r.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 y;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),wo(s),(y=this.owner)!=null&&y.isKeyPair){if(m){let b=[];for(let g of s){let P=await this.connection.sendTransaction(g,{skipPreflight:f});await Dr(this.connection,P),b.push(P)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,P=[],h=async()=>{if(!b[g])return;let I=await this.connection.sendTransaction(b[g],{skipPreflight:f});P.push({txId:I,status:"sent",signedTx:b[g]}),d==null||d([...P]),g++;let T=!1,k=null,S=null,x=K=>{k!==null&&clearInterval(k),S!==null&&this.connection.removeSignatureListener(S);let B=P.findIndex(C=>C.txId===I);if(B>-1){if(P[B].status==="error"||P[B].status==="success")return;P[B].status=K.err?"error":"success"}d==null||d([...P]),K.err||h()};this.loopMultiTxStatus&&(k=setInterval(async()=>{var K;if(T){clearInterval(k);return}try{let B=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});B&&(T=!0,clearInterval(k),x({err:((K=B.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",I))}catch(B){T=!0,clearInterval(k),console.error("getTransaction timeout:",B,I)}},Gr)),S=this.connection.onSignature(I,K=>{if(T){this.connection.removeSignatureListener(S);return}T=!0,x(K)},"confirmed"),this.connection.getSignatureStatus(I)};return h(),{txIds:[],signedTxs:b}}else{let g=[];for(let P=0;P<b.length;P+=1){let h=await this.connection.sendTransaction(b[P],{skipPreflight:f});g.push(h)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let m=e||{},{splitIns:t=[],computeBudgetConfig:n}=m,o=Qe(m,["splitIns","computeBudgetConfig"]),r=n?Vr(n):{instructions:[],instructionTypes:[]},s=this.signers.reduce((p,f)=>U(_({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let f=[...u,p],y=n?[...r.instructions,...f]:f,g=[...new Set(f.map(P=>P.keys.filter(h=>h.isSigner).map(h=>h.pubkey.toString())).flat()).values()].map(P=>new zo(P));if(p!==t[l]&&u.length<12&&(Pi({instructions:y,payer:this.feePayer,signers:g})||Pi({instructions:f,payer:this.feePayer,signers:g})))u.push(p);else{if(u.length===0)throw Error("item ins too big");l+=p===t[l]?1:0,Pi({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new Bi().add(...r.instructions,...u)):a.push(new Bi().add(...u)),c.push(Array.from(new Set(u.map(P=>P.keys.filter(h=>h.isSigner).map(h=>h.pubkey.toString())).flat())).map(P=>s[P]).filter(P=>P!==void 0)),u=[p]}}),u.length>0){let f=[...new Set(u.map(y=>y.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(y=>s[y]).filter(y=>y!==void 0);Pi({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new Bi().add(...r.instructions,...u)):a.push(new Bi().add(...u)),c.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(f=>f.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var I;let{sequentially:f,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:g,skipPreflight:P=!0}=p||{},h=g!=null?g:await Do(this.connection,this.blockhashCommitment);if(a.forEach(async(T,k)=>{T.recentBlockhash=h,c[k].length&&T.sign(...c[k])}),wo(a),(I=this.owner)!=null&&I.isKeyPair){if(f){let T=0,k=[];for(let S of a){if(++T,T<=b){k.push("tx skipped");continue}let x=await Pa(this.connection,S,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:P});k.push(x)}return{txIds:k,signedTxs:a}}return{txIds:await Promise.all(a.map(async T=>await this.connection.sendRawTransaction(T.serialize(),{skipPreflight:P}))),signedTxs:a}}if(this.signAllTransactions){let T=await this.signAllTransactions(a.slice(b,a.length)),k=[...a.slice(0,b),...T];if(f){let S=0,x=[],K=async()=>{if(!k[S])return;S<b&&(x.push({txId:"",status:"success",signedTx:k[S]}),y==null||y([...x]),S++,K());let B=await this.connection.sendRawTransaction(k[S].serialize(),{skipPreflight:P});x.push({txId:B,status:"sent",signedTx:k[S]}),y==null||y([...x]),S++;let C=!1,L=null,N=null,O=R=>{L!==null&&clearInterval(L),N!==null&&this.connection.removeSignatureListener(N);let v=x.findIndex(Y=>Y.txId===B);if(v>-1){if(x[v].status==="error"||x[v].status==="success")return;x[v].status=R.err?"error":"success"}y==null||y([...x]),R.err||K()};this.loopMultiTxStatus&&(L=setInterval(async()=>{var R;if(C){clearInterval(L);return}try{let v=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:0});v&&(C=!0,clearInterval(L),O({err:((R=v.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",B))}catch(v){C=!0,clearInterval(L),console.error("getTransaction timeout:",v,B)}},Gr)),N=this.connection.onSignature(B,R=>{if(C){this.connection.removeSignatureListener(N);return}C=!0,O(R)},"confirmed"),this.connection.getSignatureStatus(B)};return await K(),{txIds:x.map(B=>B.txId),signedTxs:k}}else{let S=[];for(let x=0;x<k.length;x+=1){let K=await this.connection.sendRawTransaction(k[x].serialize(),{skipPreflight:P});S.push(K)}return{txIds:S,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var h;let P=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:r=[]}=P,s=Qe(P,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=_(_({},this.cluster==="devnet"?await ga(this.connection):await ba(this.connection)),o),c=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let I of c)a[I]===void 0&&u.push(new zo(I));let l=await ya({connection:this.connection,address:u});for(let[I,T]of Object.entries(l))a[I]=T;let m=t?Vr(t):{instructions:[],instructionTypes:[]},d=await Do(this.connection,this.blockhashCommitment),p=this.signers.reduce((I,T)=>U(_({},I),{[T.publicKey.toBase58()]:T}),{}),f=[],y=[],b=[],g=0;if(this.allInstructions.forEach(I=>{let T=[...b,I],k=t?[...m.instructions,...T]:T;if(I!==n[g]&&b.length<12&&(Ai({instructions:k,payer:this.feePayer,lookupTableAddressAccount:a})||Ai({instructions:T,payer:this.feePayer,lookupTableAddressAccount:a})))b.push(I);else{if(b.length===0)throw Error("item ins too big");g+=I===n[g]?1:0;let S={};for(let x of[...new Set(c)])a[x]!==void 0&&(S[x]=a[x]);if(t&&Ai({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let x=new xi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new Si(x))}else{let x=new xi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new Si(x))}y.push(Array.from(new Set(b.map(x=>x.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat())).map(x=>p[x]).filter(x=>x!==void 0)),b=[I]}}),b.length>0){let T=[...new Set(b.map(k=>k.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat()).values()].map(k=>p[k]).filter(k=>k!==void 0);if(t&&Ai({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let k=new xi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new Si(k))}else{let k=new xi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new Si(k))}y.push(T)}return(h=this.owner)!=null&&h.signer&&y.forEach(I=>{I.some(T=>T.publicKey.equals(this.owner.publicKey))||I.push(this.owner.signer)}),f.forEach((I,T)=>{I.sign(y[T])}),{builder:this,transactions:f,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async I=>{var B;let{sequentially:T,onTxUpdate:k,skipTxCount:S=0,recentBlockHash:x,skipPreflight:K=!0}=I||{};if(f.map(async(C,L)=>{y[L].length&&C.sign(y[L]),x&&(C.message.recentBlockhash=x)}),wo(f),(B=this.owner)!=null&&B.isKeyPair){if(T){let C=0,L=[];for(let N of f){if(++C,C<=S){console.log("skip tx: ",C),L.push("tx skipped");continue}let O=await this.connection.sendTransaction(N,{skipPreflight:K});await Dr(this.connection,O),L.push(O)}return{txIds:L,signedTxs:f}}return{txIds:await Promise.all(f.map(async C=>await this.connection.sendTransaction(C,{skipPreflight:K}))),signedTxs:f}}if(this.signAllTransactions){let C=await this.signAllTransactions(f.slice(S,f.length)),L=[...f.slice(0,S),...C];if(T){let N=0,O=[],R=async()=>{if(!L[N])return;if(N<S){O.push({txId:"",status:"success",signedTx:L[N]}),k==null||k([...O]),N++,R();return}let v=await this.connection.sendTransaction(L[N],{skipPreflight:K});O.push({txId:v,status:"sent",signedTx:L[N]}),k==null||k([...O]),N++;let Y=!1,Q=null,de=null,ce=le=>{Q!==null&&clearInterval(Q),de!==null&&this.connection.removeSignatureListener(de);let Ae=O.findIndex(fe=>fe.txId===v);if(Ae>-1){if(O[Ae].status==="error"||O[Ae].status==="success")return;O[Ae].status=le.err?"error":"success"}k==null||k([...O]),le.err||R()};this.loopMultiTxStatus&&(Q=setInterval(async()=>{var le;if(Y){clearInterval(Q);return}try{let Ae=await this.connection.getTransaction(v,{commitment:"confirmed",maxSupportedTransactionVersion:0});Ae&&(Y=!0,clearInterval(Q),ce({err:((le=Ae.meta)==null?void 0:le.err)||null}),console.log("tx status from getTransaction:",v))}catch(Ae){Y=!0,clearInterval(Q),console.error("getTransaction timeout:",Ae,v)}},Gr)),de=this.connection.onSignature(v,le=>{if(Y){this.connection.removeSignatureListener(de);return}Y=!0,ce(le)},"confirmed"),this.connection.getSignatureStatus(v)};return R(),{txIds:[],signedTxs:L}}else{let N=[];for(let O=0;O<L.length;O+=1){let R=await this.connection.sendTransaction(L[O],{skipPreflight:K});N.push(R)}return{txIds:N,signedTxs:L}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};import{PublicKey as Gp}from"@solana/web3.js";import Xp from"bn.js";async function Qc(i){new Promise(e=>setTimeout(e,i))}function pw(){return new Date().getTime()}function zp(i){return typeof i=="object"&&i!==null&&![Oe,Ce,Gp,Pe,Xp,gt,et].some(e=>typeof e=="object"&&i instanceof e)}function Ge(i){return typeof i=="string"?$s(i):Array.isArray(i)?i.map(e=>Ge(e)):zp(i)?Object.fromEntries(Object.entries(i).map(([e,t])=>[e,Ge(t)])):i}import Yp from"bn.js";var Gt=new Yp(1e6);var jc=(t=>(t.ALL="all",t.Strict="strict",t))(jc||{}),Zc=(s=>(s.All="all",s.Standard="standard",s.Concentrated="concentrated",s.AllFarm="allFarm",s.StandardFarm="standardFarm",s.ConcentratedFarm="concentratedFarm",s))(Zc||{});var Pt={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://lite-api.jup.ag/tokens/v1/tagged/verified",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position",LAUNCH_AUTH_HOST:"https://launch-auth-v1.raydium.io",LAUNCH_COMMENT_HOST:"hhttps://launch-forum-v1.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1.raydium.io"},$c=U(_({},Pt),{BASE_HOST:"https://api-v3-devnet.raydium.io",OWNER_BASE_HOST:"https://owner-v1-devnet.raydium.io",SWAP_HOST:"https://transaction-v1-devnet.raydium.io",CPMM_LOCK:"https://dynamic-ipfs-devnet.raydium.io/lock/cpmm/position",LAUNCH_AUTH_HOST:"https://launch-auth-v1-devnet.raydium.io",LAUNCH_COMMENT_HOST:"https://launch-forum-v1-devnet.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1-devnet.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1-devnet.raydium.io"});var Jc="ray_tab_hash",Aa="ray_req_hash",Hp=()=>{if(typeof window===void 0)return"";let i=sessionStorage.getItem(Jc);return i||(i=`ray-${Date.now()}`,sessionStorage.setItem(Jc,i)),i},zr=async n=>{var o=n,{logCount:i=1e3,removeLastLog:e}=o,t=Qe(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let r=JSON.parse(localStorage.getItem(Aa)||"[]").slice(0,i-1);e&&r.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),r.unshift(U(_({},t),{time:Date.now(),session:Hp()}));try{localStorage.setItem(Aa,JSON.stringify(r))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(r[0].data=a+(a.length>100?"...":"");!s;){r.pop();let c=JSON.stringify(t.data).substring(0,100);r[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(Aa,JSON.stringify(r)),s=!0}catch{s=!1}}return new Promise(c=>c())}return zr(U(_({},t),{logCount:i,removeLastLog:!0}))}};import{TOKEN_2022_PROGRAM_ID as Qp,TOKEN_PROGRAM_ID as jp}from"@solana/spl-token";var Yo=ke("Raydium_Api"),wa=new Map,ka=new Map;async function sk(i,e,t=1e3){let n;for(;n==null;)try{Yo.debug(`Request ${i} through endlessRetry`),n=await e()}catch(o){Yo.error(`Request ${i} failed, retry after ${t} ms`,o),await Qc(t)}return n}var Yr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:r}){this.cluster=e,this.urlConfigs=r||{},this.logCount=o||1e3,this.api=el.create({baseURL:this.urlConfigs.BASE_HOST||(this.cluster==="devnet"?$c.BASE_HOST:Pt.BASE_HOST),timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return Yo.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(Yo.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&&zr({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),Yo.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&&zr({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Yo.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Pt.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Pt.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Pt.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await el.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,r)=>o+r,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Pt.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Pt.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Pt.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Pt.JUP_TOKEN_LIST})).map(t=>U(_({},t),{chainId:101,programId:t.tags.includes("token-2022")?Qp.toBase58():jp.toBase58()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Pt.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:r=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Pt.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${r}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Pt.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>wa.has(s)?(n.push(wa.get(s)),!1):!0),r=[];return o.length&&(r=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Pt.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),r.forEach(a=>{wa.set(a.id,a)})),n.concat(r)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:r="default",order:s="desc",page:a=1}=e,[c,u]=[t&&It(t).toBase58(),n&&n!=="undefined"?It(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Pt.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${r}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Pt.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Pt.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Pt.CHECK_AVAILABILITY)).data}async fetchLaunchConfigs(){var t;if((t=ka.get(this.cluster))!=null&&t.length)return ka.get(this.cluster);let e=await this.api.get(this.cluster==="devnet"?"https://launch-mint-v1-devnet.raydium.io/main/configs":"https://launch-mint-v1.raydium.io/main/configs");return ka.set(this.cluster,e.data.data),e.data.data}};import{merge as ag}from"lodash";var Hr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",tl="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as es,SystemProgram as ay}from"@solana/web3.js";import{AccountLayout as jo,createAssociatedTokenAccountIdempotentInstruction as va,TOKEN_PROGRAM_ID as ro,TOKEN_2022_PROGRAM_ID as uy}from"@solana/spl-token";var ha=(...i)=>i.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Xe=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ke(t)}createTxBuilder(e){return this.scope.checkOwner(),new Xr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,loopMultiTxStatus:this.scope.loopMultiTxStatus,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(ha(e))}logInfo(...e){this.logger.info(ha(e))}logAndCreateError(...e){let t=ha(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as ty,SystemProgram as ny}from"@solana/web3.js";import oy from"bn.js";import{createCloseAccountInstruction as iy,createInitializeAccountInstruction as ry,createTransferInstruction as sy,TOKEN_PROGRAM_ID as Qo}from"@solana/spl-token";import{Keypair as Zf,PublicKey as Pl}from"@solana/web3.js";import $f from"bn.js";import{TOKEN_PROGRAM_ID as Jf}from"@solana/spl-token";function Zp(i){return i instanceof Uint8Array||i!=null&&typeof i=="object"&&i.constructor.name==="Uint8Array"}function Ta(i,...e){if(!Zp(i))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(i.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${i.length}`)}function Ia(i,e=!0){if(i.destroyed)throw new Error("Hash instance has been destroyed");if(e&&i.finished)throw new Error("Hash#digest() has already been called")}function nl(i,e){Ta(i);let t=e.outputLen;if(i.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var jr=i=>new DataView(i.buffer,i.byteOffset,i.byteLength),Pn=(i,e)=>i<<32-e|i>>>e;var wk=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function $p(i){if(typeof i!="string")throw new Error(`utf8ToBytes expected string, got ${typeof i}`);return new Uint8Array(new TextEncoder().encode(i))}function Ba(i){return typeof i=="string"&&(i=$p(i)),Ta(i),i}var Qr=class{clone(){return this._cloneInto()}},kk={}.toString;function ol(i){let e=n=>i().update(Ba(n)).digest(),t=i();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>i(),e}function Jp(i,e,t,n){if(typeof i.setBigUint64=="function")return i.setBigUint64(e,t,n);let o=BigInt(32),r=BigInt(4294967295),s=Number(t>>o&r),a=Number(t&r),c=n?4:0,u=n?0:4;i.setUint32(e+c,s,n),i.setUint32(e+u,a,n)}var il=(i,e,t)=>i&e^~i&t,rl=(i,e,t)=>i&e^i&t^e&t,Zr=class extends Qr{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=jr(this.buffer)}update(e){Ia(this);let{view:t,buffer:n,blockLen:o}=this;e=Ba(e);let r=e.length;for(let s=0;s<r;){let a=Math.min(o-this.pos,r-s);if(a===o){let c=jr(e);for(;o<=r-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ia(this),nl(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:r}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;Jp(n,o-8,BigInt(this.length*8),r),this.process(n,0);let a=jr(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],r)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:r,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=r,e.destroyed=s,o%t&&e.buffer.set(n),e}};var ef=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]),no=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),oo=new Uint32Array(64),xa=class extends Zr{constructor(){super(64,32,8,!1),this.A=no[0]|0,this.B=no[1]|0,this.C=no[2]|0,this.D=no[3]|0,this.E=no[4]|0,this.F=no[5]|0,this.G=no[6]|0,this.H=no[7]|0}get(){let{A:e,B:t,C:n,D:o,E:r,F:s,G:a,H:c}=this;return[e,t,n,o,r,s,a,c]}set(e,t,n,o,r,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=r|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)oo[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=oo[m-15],p=oo[m-2],f=Pn(d,7)^Pn(d,18)^d>>>3,y=Pn(p,17)^Pn(p,19)^p>>>10;oo[m]=y+oo[m-7]+f+oo[m-16]|0}let{A:n,B:o,C:r,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=Pn(a,6)^Pn(a,11)^Pn(a,25),p=l+d+il(a,c,u)+ef[m]+oo[m]|0,y=(Pn(n,2)^Pn(n,13)^Pn(n,22))+rl(n,o,r)|0;l=u,u=c,c=a,a=s+p|0,s=r,r=o,o=n,n=p+y|0}n=n+this.A|0,o=o+this.B|0,r=r+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,r,s,a,c,u,l)}roundClean(){oo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var sl=ol(()=>new xa);import{PublicKey as Yf}from"@solana/web3.js";import pl,{isBN as fl}from"bn.js";import{bits as tf,BitStructure as nf,blob as of,Blob as rf,cstr as sf,f32 as af,f32be as uf,f64 as cf,f64be as lf,greedy as mf,Layout as df,ns64 as pf,ns64be as ff,nu64 as yf,nu64be as bf,offset as gf,s16 as Pf,s16be as Af,s24 as wf,s24be as kf,s32 as hf,s32be as Tf,s40 as If,s40be as Bf,s48 as xf,s48be as Sf,s8 as Kf,seq as Cf,struct as Rk,Structure as Rf,u16 as Lf,u16be as Nf,u24 as Of,u24be as Mf,u32 as vf,u32be as Ff,u40 as _f,u40be as Ef,u48 as Vf,u48be as Df,u8 as Wf,UInt as qf,union as Uf,Union as Gf,unionLayoutDiscriminator as Xf,utf8 as zf}from"@solana/buffer-layout";var Ki=df,al=Rf,ul=Gf,Lk=nf,Sa=qf,cl=rf,Nk=mf,$r=Wf,en=Lf,Ok=Of,Ci=vf,Mk=_f,vk=Vf,ll=yf,Fk=Nf,_k=Mf,Ek=Ff,Vk=Ef,Dk=Df,Wk=bf,qk=Kf,Uk=Pf,Gk=wf,ze=hf,Xk=If,zk=xf,Yk=pf,Hk=Af,Qk=kf,jk=Tf,Zk=Bf,$k=Sf,Jk=ff,eh=af,th=uf,nh=cf,oh=lf;var ml=Cf,dl=Uf,ih=Xf,Re=of,rh=sf,sh=zf,Ka=tf,Ca=gf;var ho=class extends Ki{constructor(t,n,o){super(t,o);this.blob=Re(t),this.signed=n}decode(t,n=0){let o=new pl(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new pl(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Jr=class extends Ki{constructor(t){super(8,t);this._lower=Ka(Ci(),!1),this._upper=Ka(Ci(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),r=this._upper.decode(t,n+this._lower.span);return _(_({},o),r)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function D(i){return new Sa(1,i)}function kt(i){return new Sa(4,i)}function A(i){return new ho(8,!1,i)}function re(i){return new ho(16,!1,i)}function yl(i){return new ho(1,!0,i)}function Ho(i){return new ho(8,!0,i)}function bl(i){return new ho(16,!0,i)}var Mn=class extends Ki{constructor(t,n,o,r){super(t.span,r);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function F(i){return new Mn(Re(32),e=>new Yf(e),e=>e.toBuffer(),i)}var Ra=class extends Ki{constructor(t,n){super(-1,n);this.layout=t,this.discriminator=$r()}encode(t,n,o=0){return t==null?this.discriminator.encode(0,n,o):(this.discriminator.encode(1,n,o),this.layout.encode(t,n,o+1)+1)}decode(t,n=0){let o=this.discriminator.decode(t,n);if(o===0)return null;if(o===1)return this.layout.decode(t,n+1);throw new Error("Invalid option "+this.property)}getSpan(t,n=0){let o=this.discriminator.decode(t,n);if(o===0)return 1;if(o===1)return this.layout.getSpan(t,n+1)+1;throw new Error("Invalid option "+this.property)}};function mh(i,e){return new Ra(i,e)}function Ye(i){return new Mn($r(),Hf,Qf,i)}function Hf(i){if(i===0)return!1;if(i===1)return!0;throw new Error("Invalid bool: "+i)}function Qf(i){return i?1:0}function gl(i,e){let t=Ci("length"),n=E([t,j(i,Ca(t,-t.span),"values")]);return new Mn(n,({values:o})=>o,o=>({values:o}),e)}function dh(i,e,t){let n=E([A("tag"),e.replicate("data")]);function o({tag:r,data:s}){if(!r.eq(i))throw new Error("Invalid tag, expected: "+i.toString("hex")+", got: "+r.toString("hex"));return s}return new Mn(n,o,r=>({tag:i,data:r}),t)}function jf(i){let e=Ci("length"),t=E([e,Re(Ca(e,-e.span),"data")]);return new Mn(t,({data:n})=>n,n=>({data:n}),i)}function ht(i){return new Mn(jf(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),i)}function ph(i,e){let t=dl($r(),e);return i.forEach((n,o)=>t.addVariant(o,n,n.property)),t}function fh(i,e,t){let n=E([j(i,e,"values")]);return new Mn(n,({values:o})=>o,o=>({values:o}),t)}var La=class extends al{decode(e,t){return super.decode(e,t)}};function E(i,e,t){return new La(i,e,t)}var Na=class extends ul{encodeInstruction(e){let t=Math.max(...Object.values(this.registry).map(o=>o.span)),n=Buffer.alloc(t);return n.slice(0,this.encode(e,n))}decodeInstruction(e){return this.decode(e)}};function yh(i,e,t){return new Na(i,e,t)}var Oa=class extends cl{decode(e,t){let n=super.decode(e,t);if(!n.every(o=>o===0))throw new Error("nonzero padding bytes");return n}};function bh(i){return new Oa(i)}function j(i,e,t){let n,o=typeof e=="number"?e:fl(e)?e.toNumber():new Proxy(e,{get(r,s){if(!n){let a=Reflect.get(r,"count");n=fl(a)?a.toNumber():a,Reflect.set(r,"count",n)}return Reflect.get(r,s)},set(r,s,a){return s==="count"&&(n=a),Reflect.set(r,s,a)}});return ml(i,o,t)}var An=E([F("mint"),F("owner"),A("amount"),kt("delegateOption"),F("delegate"),D("state"),kt("isNativeOption"),A("isNative"),A("delegatedAmount"),kt("closeAuthorityOption"),F("closeAuthority")]);var Rh=ke("Raydium_Util");function Al({owner:i,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:r,account:s}of t.value){let a=An.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:r,mint:c,amount:u,isAssociated:J(i,c,s.owner).publicKey.equals(r),isNative:!1,programId:s.owner}),o.push({pubkey:r,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Pl.default,amount:new $f(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function nt({fromPublicKey:i,programId:e=Jf,assignSeed:t}){let n=t?btoa(t).slice(0,32):Zf.generate().publicKey.toBase58().slice(0,32);return{publicKey:ey(i,n,e),seed:n}}function ey(i,e,t){let n=Buffer.concat([i.toBuffer(),Buffer.from(e),t.toBuffer()]),o=sl(n);return new Pl(o)}function Ma(i){let{mint:e,tokenAccount:t,owner:n,programId:o=Qo}=i;return ry(t,e,n,o)}function vn(i){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:r=Qo}=i;return iy(e,t,o,n,r)}async function io(i){let{connection:e,amount:t,commitment:n,payer:o,owner:r,skipCloseAccount:s}=i,a=await e.getMinimumBalanceForRentExemption(An.span,n),c=te(t).add(new oy(a)),u=nt({fromPublicKey:o,programId:Qo});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[ny.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:An.span,programId:Qo}),Ma({mint:new ty(yt.address),tokenAccount:u.publicKey,owner:r,programId:Qo})],instructionTypes:[z.CreateAccount,z.InitAccount],endInstructionTypes:s?[]:[z.CloseAccount],endInstructions:s?[]:[vn({tokenAccount:u.publicKey,payer:o,owner:r})]}}function wl({source:i,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:r=Qo}){return sy(i,e,t,BigInt(String(n)),o,r)}var Ri=class extends Xe{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:o,notSubscribeAccountChange:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._notSubscribeAccountChange=r!=null?r:!0,this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}set notSubscribeAccountChange(t){this._notSubscribeAccountChange=t}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return J(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<(this._notSubscribeAccountChange?1e3*5:1e3*60*3))return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=_(_({},{}),t),[r,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:ro},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:uy},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Al({owner:this.scope.ownerPubKey,solAccountResp:r,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._notSubscribeAccountChange||(this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>{this.fetchWalletTokenAccounts({forceUpdate:!0}),this._accountListener.forEach(l=>l({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:c,tokenAccountRawInfos:u}}clearAccountChangeCkb(){this._accountChangeListenerId!==void 0&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId)}async getCreatedTokenAccount({mint:t,programId:n=ro,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let r=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 r){let{publicKey:c}=a;if(c&&(!o||o&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,b,g,P;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:r,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,m=new es(t.tokenProgram||ro),d=this.getAssociatedTokenAccount(n,new es(m)),p=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!r||h.pubkey.equals(d))).sort((h,I)=>h.accountInfo.amount.lt(I.accountInfo.amount)?1:-1);if(o===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(r){let h=va(s,d,s,n,m),I=this.tokenAccountRawInfos.find(T=>T.pubkey.equals(d));if(u){let T=await this.scope.connection.getAccountInfo(d);if(T===null)(y=f.instructions)==null||y.push(h),f.instructionTypes.push(z.CreateATA);else if(!(T.owner.equals(m)&&jo.decode(T.data).mint.equals(n)&&jo.decode(T.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else I===void 0&&(f.instructions.push(h),f.instructionTypes.push(z.CreateATA));if(n.equals($)&&o.amount){let T=await io({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(b=o.amount)!=null?b:0,skipCloseAccount:c});f.instructions.push(...T.instructions||[]),f.endInstructions.push(...T.endInstructions||[]),f.instructionTypes.push(...T.instructionTypes||[]),f.endInstructionTypes.push(...T.endInstructionTypes||[]),o.amount&&(f.instructions.push(wl({source:T.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:ro})),f.instructionTypes.push(z.TransferAmount))}return!c&&I===void 0&&(f.endInstructions.push(vn({owner:s,payer:o.payer||s,tokenAccount:d,programId:m})),f.endInstructionTypes.push(z.CloseAccount)),{account:d,instructionParams:f}}else{let h=nt({fromPublicKey:s,programId:m,assignSeed:l}),I=await this.scope.connection.getMinimumBalanceForRentExemption(jo.span),T=ay.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:I+Number((P=(g=o.amount)==null?void 0:g.toString())!=null?P:0),space:jo.span,programId:m});return f.instructions.push(T,Ma({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(z.CreateAccount),f.instructionTypes.push(z.InitAccount),c||(f.endInstructions.push(vn({owner:s,payer:o.payer||s,tokenAccount:h.publicKey,programId:m})),f.endInstructionTypes.push(z.CloseAccount)),{account:h.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=ro,autoUnwrapWSOLToSOL:o}){var c;await this.fetchWalletTokenAccounts();let r=(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(!r){let u=this.getAssociatedTokenAccount(t,n),l=await va(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[z.CreateATA],r=u}return o&&$.toBase58()===t.toBase58()&&(a.endInstructions=[vn({owner:s,payer:s,tokenAccount:r,programId:n})],a.endInstructionTypes=[z.CloseAccount]),{pubKey:r,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:r,programId:s=ro,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(r,s);if(new es($).equals(r)){let p=await io({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return _({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=va(this.scope.ownerPubKey,d,this.scope.ownerPubKey,r,s);if(m){let y=await this.scope.connection.getAccountInfo(d);if(y===null)p.push(f);else if(!(y.owner.equals(ro)&&jo.decode(y.data).mint.equals(r)&&jo.decode(y.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${r.toString()}, ata: ${d.toString()}`)}else p.push(f);return{tokenAccount:d,instructions:p,instructionTypes:[z.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=ro,amount:r,useSOLBalance:s,handleTokenAccount:a,feePayer:c}=t,u,l=this.createTxBuilder(c);if(n.equals(new es($))&&s){let m=await this.handleTokenAccount({side:"in",amount:r||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=m,f=Qe(m,["tokenAccount"]);u=p,l.addInstruction(f)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!u&&a){let d=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=d,f=Qe(d,["tokenAccount"]);u=p,l.addInstruction(f)}return _({tokenAccount:u},l.AllTxData)}};import{PublicKey as Me,SystemProgram as Ry}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Vl}from"@solana/spl-token";import{PublicKey as Wa}from"@solana/web3.js";var Fa=E([D("instruction")]),_a=E([D("instruction")]),cy=E([A("rewardState"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardLastUpdateTime"),A("totalReward"),A("totalRewardEmissioned"),A("rewardClaimed"),A("rewardPerSecond"),re("accRewardPerShare"),F("rewardVault"),F("rewardMint"),F("rewardSender"),A("rewardType"),j(A(),15,"padding")]),ly=E([A("state"),A("nonce"),F("lpVault"),F("rewardVault"),F(),F(),A(),A(),A("totalReward"),re("perShareReward"),A("lastSlot"),A("perSlotReward")]),my=E([A("state"),A("nonce"),F("lpVault"),F("rewardVaultA"),A("totalRewardA"),re("perShareRewardA"),A("perSlotRewardA"),D("option"),F("rewardVaultB"),Re(7),A("totalRewardB"),re("perShareRewardB"),A("perSlotRewardB"),A("lastSlot"),F()]),dy=E([A(),A("state"),A("nonce"),A("validRewardTokenNum"),re("rewardMultiplier"),A("rewardPeriodMax"),A("rewardPeriodMin"),A("rewardPeriodExtend"),F("lpMint"),F("lpVault"),j(cy,5,"rewardInfos"),F("creator"),F(),j(A(),32,"padding")]),kl=new Proxy(ly,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return U(_({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(i,e,t)}}),hl=new Proxy(my,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return U(_({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(i,e,t)}}),Li=new Proxy(dy,{get(i,e,t){return e==="decode"?(...n)=>{let o=i.decode(...n);return U(_({},o),{version:6,rewardInfos:o.rewardInfos.map(r=>{var s;return U(_({},r),{rewardType:((s=Object.entries(so).find(a=>String(a[1])===r.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(i,e,t)}}),py=E([A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),Ea=E([D("instruction"),A("nonce"),j(py,5,"rewardTimeInfo")]),Va=E([D("instruction"),A("rewardReopenTime"),A("rewardEndTime"),A("rewardPerSecond")]),Da=E([D("instruction"),A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),uT=E([A("state"),F("id"),F("owner"),A("deposited"),j(A(),1,"rewardDebts")]),Ni=E([A("state"),F("id"),F("owner"),A("deposited"),j(re(),1,"rewardDebts"),A(""),A("voteLockedBalance"),j(A(),15)]),cT=E([A("state"),F("id"),F("owner"),A("deposited"),j(A(),2,"rewardDebts")]),Tl=E([A("state"),F("id"),F("owner"),A("deposited"),j(re(),2,"rewardDebts"),j(A(),17)]),Il=E([A(),A("state"),F("id"),F("owner"),A("deposited"),j(re(),5,"rewardDebts"),j(A(),16)]),Mt=E([D("instruction"),A("amount")]),fy=E([F("mint"),F("grantAuthority"),A("baselineVoteWeightScaledFactor"),A("maxExtraLockupVoteWeightScaledFactor"),A("lockupSaturationSecs"),yl("digitShift"),j(D(),7,"reserved1"),j(A(),7,"reserved2")]),Bl=E([Re(8),F("governanceProgramId"),F("realm"),F("realmGoverningTokenMint"),F("realmAuthority"),j(D(),32,"reserved1"),j(fy,4,"votingMints"),Ho("timeOffset"),D("bump"),j(D(),7,"reserved2"),j(A(),11,"reserved3")]),yy=E([Ho("startTime"),Ho("endTime"),D("kind"),j(D(),15,"reserved")]),by=E([j(yy,1,"lockup"),A("amountDeposited_native"),A("amountInitiallyLockedNative"),Ye("isUsed"),Ye("allowClawback"),D("votingMintConfigIdx"),j(D(),29,"reserved")]),xl=E([Re(8),F("voterAuthority"),F("registrar"),j(by,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),j(D(),94,"reserved")]);import{NATIVE_MINT as gy}from"@solana/spl-token";var PT=ke("Raydium_farm_config"),Sl=new Wa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Kl=new Wa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),AT=gy,wT=new Wa("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX"),Cl={3:kl,5:hl,6:Li},Rl={3:Ni,5:Tl,6:Il},qa=i=>[3,4,5,6].indexOf(i)!==-1,Ua=i=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=i,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,r={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(s=r[e])==null?void 0:s.call(r)},so={"Standard SPL":0,"Option tokens":1},un={[sa.toString()]:3,[aa.toString()]:4,[ua.toString()]:5,[Wo.toString()]:6,[On.FARM_PROGRAM_ID_V3.toString()]:3,[On.FARM_PROGRAM_ID_V4.toString()]:4,[On.FARM_PROGRAM_ID_V5.toString()]:5,[On.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as ye,SystemProgram as To,SYSVAR_CLOCK_PUBKEY as $o,SYSVAR_RENT_PUBKEY as wy,TransactionInstruction as dt}from"@solana/web3.js";import ts from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as ky,createAssociatedTokenAccountIdempotentInstruction as hy,TOKEN_PROGRAM_ID as zt}from"@solana/spl-token";function Ga(i,e,t){return ie([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],i)}function Xa(i,e){return ie([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],i)}function za(i,e){return ie([e.toBuffer()],i)}function Ya(i,e,t){return ie([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],i)}function Ha(i,e,t){return ie([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],i)}function Qa(i,e,t,n){return ie([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}import Xt from"bn.js";var Oi=ke("Raydium.farm.util");function Mi({programId:i,poolId:e,mint:t,type:n}){let{publicKey:o}=ie([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],i);return o}function xt({programId:i,poolId:e,owner:t,version:n}){let{publicKey:o}=ie([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],i);return o}var Ll=({programId:i,poolId:e})=>ie([e.toBuffer()],i);function Nl(i){return{isSet:new Xt(1),rewardPerSecond:te(i.perSecond),rewardOpenTime:te(i.openTime),rewardEndTime:te(i.endTime),rewardType:te(so[i.rewardType])}}function ja(i){return te(i.endTime).sub(te(i.openTime)).mul(te(i.perSecond))}function Zo(i){let e=Rl[i];return e||Oi.logWithError("invalid version",i),e}function Py(i){let e=Cl[i];return e||Oi.logWithError("invalid version",i),e}function Ay(i,e,t,n){if(i.version===3||i.version===5){if(i.lastSlot.gte(new Xt(t)))return i;let o=new Xt(t).sub(i.lastSlot);i.lastSlot=new Xt(t);for(let r of i.rewardInfos){if(e.amount.eq(new Xt(0)))continue;let s=r.perSlotReward.mul(o);r.perShareReward=r.perShareReward.add(s.mul(new Xt(10).pow(new Xt(i.version===3?9:15))).div(e.amount)),r.totalReward=r.totalReward.add(s)}}else if(i.version===6)for(let o of i.rewardInfos){if(o.rewardState.eq(new Xt(0)))continue;let r=Xt.min(new Xt(n),o.rewardEndTime);if(o.rewardOpenTime.gte(r))continue;let a=r.sub(o.rewardLastUpdateTime).mul(o.rewardPerSecond),c=o.totalReward.sub(o.totalRewardEmissioned);c.lt(a)?(a=c,o.rewardLastUpdateTime=o.rewardLastUpdateTime.add(c.div(o.rewardPerSecond))):o.rewardLastUpdateTime=r,!e.amount.eq(new Xt(0))&&(o.accRewardPerShare=o.accRewardPerShare.add(a.mul(i.rewardMultiplier).div(e.amount)),o.totalRewardEmissioned=o.totalRewardEmissioned.add(a))}return i}async function _T({connection:i,farmPools:e,owner:t,config:n,chainTime:o}){let r=!1,s=!1,a=new Xt(10),c=[];for(let d of e){let p=Ge(d);p.version===6?s=!0:r=!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:xt({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await We(i,c,n);for(let{pubkey:d,version:p,key:f,poolId:y,accountInfo:b}of l){let g=y.toBase58();if(u[g]=_({},u[g]),f==="state"){let P=Py(p);(!b||!b.data||b.data.length!==P.span)&&Oi.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=P.decode(b.data)}else if(f==="lpVault")(!b||!b.data||b.data.length!==An.span)&&Oi.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=An.decode(b.data);else if(f==="ledger"){let P=Zo(p);b&&b.data&&(b.data.length!==P.span&&Oi.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=P.decode(b.data))}}let m=s||r?await i.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Ay(u[d].state,u[d].lpVault,m,o));for(let[d,{state:p,ledger:f}]of Object.entries(u))if(f){let y=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new Xt(9)):a.pow(new Xt(15)),b=p.rewardInfos.map((g,P)=>{let h=f.rewardDebts[P];return f.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(y).sub(h)});u[d].wrapped=U(_({},u[d].wrapped),{pendingRewards:b})}return u}function ET(i,e=Date.now()){if(i.version===6){let t=i.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>Dc(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>Wc(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=i.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 Za(i,e,t,n){let o=await i.getAccountInfo(e);if(o===null)throw Error("registrar info check error");let s=Bl.decode(o.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await i.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=xl.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Ty=ke("Raydium_farm_instruction"),vi={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};function Fi(i){let{version:e,id:t,ledger:n,programId:o,owner:r}=i,s={3:9,5:10}[e];s||Ty.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Fa.span);Fa.encode({instruction:s},a);let c=[w({pubkey:t}),w({pubkey:n}),w({pubkey:r,isWritable:!1}),w({pubkey:To.programId,isWritable:!1}),w({pubkey:wy,isWritable:!1})];return{instruction:new dt({programId:o,keys:c,data:a}),instructionType:z.FarmV3CreateLedger}}function Ol(i){var n;let e=Buffer.alloc(Ea.span);Ea.encode({instruction:0,nonce:new ts(i.nonce),rewardTimeInfo:i.rewardInfoConfig},e);let t=[...js,w({pubkey:i.farmId}),w({pubkey:i.farmAuthority,isWritable:!1}),w({pubkey:i.lpVault}),w({pubkey:i.lpMint,isWritable:!1}),w({pubkey:i.lockVault}),w({pubkey:i.lockMint,isWritable:!1}),w({pubkey:(n=i.lockUserAccount)!=null?n:bt}),w({pubkey:i.owner,isWritable:!1,isSigner:!0})];for(let o of i.rewardInfo)t.push(w({pubkey:o.rewardMint,isWritable:!1}),w({pubkey:o.rewardVault}),w({pubkey:o.userRewardToken}));return{instruction:new dt({programId:i.programId,keys:t,data:e}),instructionType:z.FarmV6Create}}function Ml(i){let e=Buffer.alloc(_a.span);_a.encode({instruction:5},e);let t=[w({pubkey:zt,isWritable:!1}),w({pubkey:i.id}),w({pubkey:i.authority,isWritable:!1}),w({pubkey:i.lpVault,isWritable:!1}),w({pubkey:i.rewardVault}),w({pubkey:i.userRewardToken}),w({pubkey:i.owner,isWritable:!1,isSigner:!0})];return{instruction:new dt({programId:i.programId,keys:t,data:e}),instructionType:z.FarmV6CreatorWithdraw}}function Iy(i,e,t,n,o,r,s,a,c,u,l,m,d){let p=E([D("depositEntryIndex"),A("amount")]),f=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:zt,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:Or,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},y);let b=Buffer.from([...vi.voterStakeRegistryDeposit,...y]);return new dt({keys:f,programId:i,data:b})}function By(i,e,t,n){let o=E([]),r=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:To.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([...vi.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new dt({keys:r,programId:i,data:a})}function xy(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f){let y=E([D("depositEntryIndex"),A("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:zt,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:Or,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);y.encode({depositEntryIndex:p,amount:f},g);let P=Buffer.from([...vi.voterStakeRegistryWithdraw,...g]);return new dt({keys:b,programId:i,data:P})}function Sy(i,e,t,n,o,r){let s=E([D("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:To.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new dt({keys:a,programId:i,data:c})}function Ky(i,e,t,n,o,r,s,a){let c=E([D("voterBump"),D("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:To.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Or,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...vi.voterStakeRegistryCreateVoter,...l]);return new dt({keys:u,programId:i,data:m})}function Cy(i,e,t,n,o,r,s,a,c,u,l,m){let d=E([D("depositEntryIndex"),D("kind"),D("option"),A("startTs"),kt("periods"),Ye("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:To.programId,isSigner:!1,isWritable:!1},{pubkey:zt,isSigner:!1,isWritable:!1},{pubkey:ky,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},f);let y=Buffer.from([...vi.voterStakeRegistryCreateDepositEntry,...f]);return new dt({keys:p,programId:i,data:y})}async function eI({connection:i,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=Ga(n,o,r).publicKey,l=xt({programId:e,poolId:a,owner:s,version:3}),m=await i.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=Ni.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new ts(0)))throw Error("user do not has new stake amount");let f=Xa(e,a).publicKey,y=za(e,a).publicKey,{publicKey:b,nonce:g}=Ya(n,u,s),P=J(b,f,c).publicKey,{publicKey:h,nonce:I}=Ha(n,u,s),T=Qa(t,o,r,s).publicKey,k=[],S=J(s,f,c).publicKey;if(await i.getAccountInfo(S)===null&&k.push(hy(s,S,s,f)),await i.getAccountInfo(b)===null){let L=Sy(t,o,s,r,s,T);k.push(L,Ky(n,u,b,h,s,s,g,I))}let{index:B,isInit:C}=await Za(i,u,b,f);return C||k.push(Cy(n,u,b,P,s,s,f,B,0,void 0,0,!1)),k.push(Iy(n,u,b,P,S,s,l,a,f,y,e,B,p),By(n,u,b,h)),k}async function tI({connection:i,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:r,owner:s,poolId:a,tokenProgram:c}){let u=Ga(n,o,r).publicKey,l=xt({programId:e,poolId:a,owner:s,version:3}),m=await i.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=Ni.decode(m.data);if(d.voteLockedBalance.eq(new ts(0)))throw Error("user has vote locked balance = 0");let p=Xa(e,a).publicKey,f=za(e,a).publicKey,{publicKey:y}=Ya(n,u,s),b=J(y,p,c).publicKey,{publicKey:g}=Ha(n,u,s),P=Qa(t,o,r,s).publicKey,h=[],{index:I,isInit:T}=await Za(i,u,y,p);if(!T)throw Error("deposit entry index check error");return h.push(xy(n,u,y,s,P,g,b,J(s,p,c).publicKey,l,a,p,f,e,I,d.voteLockedBalance)),h}function $a({payer:i,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let r=Buffer.alloc(Va.span);Va.encode({instruction:3,rewardReopenTime:te(o.openTime),rewardEndTime:te(o.endTime),rewardPerSecond:te(o.perSecond)},r);let s=[w({pubkey:zt,isWritable:!1}),w({pubkey:n.id}),w({pubkey:n.lpVault,isWritable:!1}),w({pubkey:e}),w({pubkey:t}),w({pubkey:i,isWritable:!1,isSigner:!0})];return new dt({programId:n.programId,keys:s,data:r})}function Ja({payer:i,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let r=Buffer.alloc(Da.span);Da.encode({instruction:4,isSet:new ts(1),rewardPerSecond:te(o.perSecond),rewardOpenTime:te(o.openTime),rewardEndTime:te(o.endTime),rewardType:te(so[o.rewardType])},r);let s=[...js,w({pubkey:t.id}),w({pubkey:t.authority,isWritable:!1}),w({pubkey:o.mint,isWritable:!1}),w({pubkey:n}),w({pubkey:e}),w({pubkey:i,isWritable:!1,isSigner:!0})];return new dt({programId:t.programId,keys:s,data:r})}function nI(i){let{farmInfo:e,farmKeys:t,version:n,lpAccount:o,rewardAccounts:r,owner:s,instruction:a,amount:c,deposit:u}=i,[l,m]=[new ye(e.programId),new ye(e.id)],d=xt({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc(Mt.span);Mt.encode({instruction:a,amount:c},p);let f=n===6?[w({pubkey:zt,isWritable:!1}),...u?[w({pubkey:To.programId,isWritable:!1})]:[],w({pubkey:m}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:new ye(t.lpVault)}),w({pubkey:d}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:o})]:[w({pubkey:m}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:d}),w({pubkey:s,isWritable:!1,isSigner:!0}),w({pubkey:o}),w({pubkey:new ye(t.lpVault)}),w({pubkey:r[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1})];if(n===5)for(let y=1;y<t.rewardInfos.length;y++)f.push(w({pubkey:r[y]})),f.push(w({pubkey:new ye(t.rewardInfos[y].vault)}));if(n===6)for(let y=0;y<t.rewardInfos.length;y++)f.push(w({pubkey:new ye(t.rewardInfos[y].vault)})),f.push(w({pubkey:r[y]}));return new dt({programId:l,keys:f,data:p})}function _i(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s}=i,[a,c]=[new ye(e.programId),new ye(e.id)],u=xt({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(Mt.span);Mt.encode({instruction:2,amount:te(s)},l);let m=[w({pubkey:zt,isWritable:!1}),w({pubkey:c}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:new ye(t.lpVault)}),w({pubkey:u}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(w({pubkey:new ye(t.rewardInfos[d].vault)})),m.push(w({pubkey:o[d]}));return new dt({programId:a,keys:m,data:l})}function Ei(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new ye(e.programId),new ye(e.id)],l=xt({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(Mt.span);Mt.encode({instruction:12,amount:te(s)},m);let d=[w({pubkey:u}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ye(t.lpVault)}),w({pubkey:o[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(w({pubkey:o[p]})),d.push(w({pubkey:new ye(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(w({pubkey:p}));return new dt({programId:c,keys:d,data:m})}function vl(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new ye(e.programId),new ye(e.id)],l=E([D("instruction"),A("amount")]),m=[w({pubkey:u}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:a[0]}),w({pubkey:r,isSigner:!0,isWritable:!1}),w({pubkey:n}),w({pubkey:new ye(t.lpVault)}),w({pubkey:o[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1}),w({pubkey:o[1]}),w({pubkey:new ye(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},d),new dt({keys:m,programId:c,data:d})}function Vi(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new ye(e.programId),new ye(e.id)],l=xt({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(Mt.span);Mt.encode({instruction:11,amount:te(s)},m);let d=[w({pubkey:u}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ye(t.lpVault)}),w({pubkey:o[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1})];if(a)for(let p of a)d.push(w({pubkey:p}));return new dt({programId:c,keys:d,data:m})}function Fl(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new ye(e.programId),new ye(e.id)],l=xt({programId:c,poolId:u,owner:r,version:3}),m=Buffer.alloc(Mt.span);Mt.encode({instruction:10,amount:te(s)},m);let d=[w({pubkey:u}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ye(t.lpVault)}),w({pubkey:o[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1})];if(a)for(let p of a)d.push(w({pubkey:p}));return new dt({programId:c,keys:d,data:m})}function _l(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s,userAuxiliaryLedgers:a}=i,[c,u]=[new ye(e.programId),new ye(e.id)],l=xt({programId:c,poolId:u,owner:r,version:5}),m=Buffer.alloc(Mt.span);Mt.encode({instruction:11,amount:te(s)},m);let d=[w({pubkey:u}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:l}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n}),w({pubkey:new ye(t.lpVault)}),w({pubkey:o[0]}),w({pubkey:new ye(t.rewardInfos[0].vault)}),w({pubkey:$o,isWritable:!1}),w({pubkey:zt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(w({pubkey:o[p]})),d.push(w({pubkey:new ye(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(w({pubkey:p}));return new dt({programId:c,keys:d,data:m})}function El(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:r,amount:s}=i,[a,c]=[new ye(e.programId),new ye(e.id)],u=xt({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(Mt.span);Mt.encode({instruction:1,amount:te(s)},l);let m=[w({pubkey:zt,isWritable:!1}),w({pubkey:To.programId,isWritable:!1}),w({pubkey:c}),w({pubkey:new ye(t.authority),isWritable:!1}),w({pubkey:new ye(t.lpVault)}),w({pubkey:u}),w({pubkey:r,isWritable:!1,isSigner:!0}),w({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(w({pubkey:new ye(t.rewardInfos[d].vault)})),m.push(w({pubkey:o[d]}));return new dt({programId:a,keys:m,data:l})}var Di=class extends Xe{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(bt)){let n=await io({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ja(U(_({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=Wo,txVersion:r,feePayer:s,lockProgram:a}){var S,x;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new Me(e.lpMint.address),lockInfo:{lockMint:(S=a==null?void 0:a.mint)!=null?S:Sl,lockVault:(x=a==null?void 0:a.vault)!=null?x:Kl},version:6,rewardInfos:t,programId:o},l=this.createTxBuilder(s),m=n!=null?n:this.scope.ownerPubKey,d=nt({fromPublicKey:m,programId:u.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(Li.span);l.addInstruction({instructions:[Ry.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:Li.span,programId:u.programId})]});let{publicKey:f,nonce:y}=Ll({programId:new Me(u.programId),poolId:d.publicKey}),b=Mi({programId:u.programId,poolId:d.publicKey,mint:u.lpMint,type:"lpVault"}),g=[],P=[];for(let K of u.rewardInfos){K.openTime>=K.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",K.openTime.toString()),isNaN(so[K.rewardType])&&this.logAndCreateError("rewardType error",K.rewardType),Number(K.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",K.perSecond),g.push(Nl(K));let{rewardPubKey:B,newInstruction:C}=await this._getUserRewardInfo({rewardInfo:K,payer:m});C&&l.addInstruction(C),B||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let L=K.mint.equals(bt)?new Me(yt.address):K.mint;P.push({rewardMint:L,rewardVault:Mi({programId:u.programId,poolId:d.publicKey,mint:L,type:"rewardVault"}),userRewardToken:B})}let{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new Me(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});I&&l.addInstruction(I),h||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:T,instructionType:k}=Ol({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:h,programId:u.programId,rewardInfo:P,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[T],instructionTypes:[k]}).versionBuild({txVersion:r,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:h,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o,feePayer:r}){var g;let s=un[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ge((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let u=t||this.scope.ownerPubKey,l=n.mint.equals(bt)?new Me(yt.address):n.mint,m=c.rewardInfos.findIndex(P=>new Me(P.mint.address).equals(l)),d=a.rewardInfos[m];d||this.logAndCreateError("configuration does not exist","rewardMint",l);let p=(g=d.vault)!=null?g:bt,f=this.createTxBuilder(r),{rewardPubKey:y,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return b&&f.addInstruction(b),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),f.addInstruction({instructions:[$a({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:c,rewardInfo:n})],instructionTypes:[z.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o,feePayer:r}){var m;let s=un[e.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ge((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.forEach(d=>{d.openTime>=d.endTime&&this.logAndCreateError("start time error","newRewardInfo",d)});let u=t||this.scope.ownerPubKey,l=this.createTxBuilder(r);for(let d of n){let p=d.mint.equals(bt)?new Me(yt.address):d.mint,f=c.rewardInfos.findIndex(I=>new Me(I.mint.address).equals(p)),y=a.rewardInfos[f];y||this.logAndCreateError("configuration does not exist","rewardMint",p);let b=(m=y.vault)!=null?m:bt,{rewardPubKey:g,newInstruction:P}=await this._getUserRewardInfo({rewardInfo:d,payer:u});P&&l.addInstruction(P),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=$a({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[h],instructionTypes:[z.FarmV6Restart]})}return l.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:r,feePayer:s}=e,a=un[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=Ge((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=r!=null?r:this.scope.ownerPubKey,l=this.createTxBuilder(s),m=o.mint.equals(bt)?new Me(yt.address):o.mint,d=Mi({programId:new Me(n.programId),poolId:new Me(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:o,payer:u});return f&&l.addInstruction(f),p||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=m,l.addInstruction({instructions:[Ja({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:c,rewardVault:d,rewardInfo:o})],instructionTypes:[z.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:r,feePayer:s}=e,a=un[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=Ge((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=r!=null?r:this.scope.ownerPubKey,l=this.createTxBuilder(s);for(let m of o){let d=m.mint.equals(bt)?new Me(yt.address):m.mint,p=Mi({programId:new Me(n.programId),poolId:new Me(n.id),mint:d,type:"rewardVault"}),{rewardPubKey:f,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:m,payer:u});y&&l.addInstruction(y),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let b=Ja({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:U(_({},m),{mint:d})});l.addInstruction({instructions:[b],instructionTypes:[z.FarmV6CreatorAddReward]})}return l.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:r,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l,txTipConfig:m}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:d,programId:p}=n,f=un[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),qa(f)||this.logAndCreateError("invalid farm program:",n.programId);let[y,b]=[new Me(n.programId),new Me(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],P=xt({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),h=this.createTxBuilder(r);h.addCustomComputeBudget(l),h.addTipInstruction(m);let I={};for(let O of this.scope.account.tokenAccounts)if(a){let R=J(this.scope.ownerPubKey,O.mint,O.programId).publicKey;O.publicKey&&R.equals(O.publicKey)&&(I[O.mint.toString()]=O.publicKey)}else I[O.mint.toString()]=O.publicKey;let T=g.lpMint,k=I[T.address];k||this.logAndCreateError("you don't have any lp","lp zero",I);let S=[];for(let O of d){let R=s&&O.mint.address===$.toString(),v=I[O.mint.address];if(!v){let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new Me(O.mint.address),notUseTokenAccount:R,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:a,checkCreateATAOwner:c});v=Y,Q&&h.addInstruction(Q)}I[O.mint.address]=v,S.push(v)}let x,K=await this.scope.connection.getAccountInfo(P);if(K&&(x=Zo(f).decode(K.data)),n.programId!==Wo.toString()&&n.programId!==On.FARM_PROGRAM_ID_V6.toString()&&!x){let{instruction:O,instructionType:R}=Fi({id:b,programId:y,version:f,ledger:P,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[O],instructionTypes:[R]})}let B=Ua({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:S});B&&this.logAndCreateError(B);let C={amount:te(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:k,rewardAccounts:S,userAuxiliaryLedgers:u==null?void 0:u.map(O=>new Me(O))},L=f===6?El(C):f===5?_l(C):Fl(C),N={3:z.FarmV3Deposit,5:z.FarmV5Deposit,6:z.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[N[f]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:r,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m,txTipConfig:d}=e,{rewardInfos:p}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let f=un[n.programId];qa(f)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],b=this.createTxBuilder(a);b.addCustomComputeBudget(m),b.addTipInstruction(d);let g={};for(let B of this.scope.account.tokenAccounts)if(c){let C=J(this.scope.ownerPubKey,B.mint).publicKey;B.publicKey&&C.equals(B.publicKey)&&(g[B.mint.toString()]=B.publicKey)}else g[B.mint.toString()]=B.publicKey;if(f!==4){let B=xt({programId:new Me(n.programId),poolId:new Me(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(B);if(C)Zo(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:L,instructionType:N}=Fi({id:new Me(y.id),programId:new Me(y.programId),version:f,ledger:B,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[L],instructionTypes:[N]})}}r&&r.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let P=y.lpMint.address,h=s&&P===$.toString(),I=g[P.toString()];if(!I){let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Me(P),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:c,checkCreateATAOwner:u});I=B,C&&b.addInstruction(C)}g[P.toString()]=I;let T=[];for(let B of p){let C=s&&B.mint.address===$.toString(),L=g[B.mint.address];if(!L){let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B.mint.programId,mint:new Me(B.mint.address),notUseTokenAccount:C,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!C,associatedOnly:C?!1:c,checkCreateATAOwner:u});L=N,O&&b.addInstruction(O)}g[B.mint.address]=L,T.push(L)}let k=Ua({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:T});k&&this.logAndCreateError(k);let S={amount:te(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:l==null?void 0:l.map(B=>new Me(B))},x=f===6?_i(S):f===5?Ei(S):f===4?vl(S):Vi(S),K={3:z.FarmV3Withdraw,4:z.FarmV4Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};return b.addInstruction({instructions:[x],instructionTypes:[K[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:o,txTipConfig:r,feePayer:s}){var y;this.scope.checkOwner();let a=Ge((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c=un[e.programId];c!==6&&this.logAndCreateError("invalid farm version",c);let u=a.rewardInfos.find(b=>It(b.mint.address).equals(It(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:bt,m=this.createTxBuilder(s),d;if(t.equals(bt)||t.equals(Me.default)){let b=await io({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ja(U(_({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new M(u.perSecond).mul(10**u.mint.decimals).toString()}))});d=b.addresses.newAccount,m.addInstruction(b)}else{let b=await this.scope.account.getCreatedTokenAccount({mint:t});b?d=b:(d=await this.scope.account.getAssociatedTokenAccount(t),m.addInstruction({instructions:[Vl(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[z.CreateATA]}))}let{instruction:p,instructionType:f}=Ml({programId:a.programId,id:a.id,authority:a.authority,lpVault:a.lpVault,rewardVault:l,userRewardToken:d,owner:this.scope.ownerPubKey});return m.addCustomComputeBudget(o),m.addTipInstruction(r),m.addInstruction({instructions:[p],instructionTypes:[f]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(o),m={};for(let f of this.scope.account.tokenAccounts)if(r){let y=J(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&y.equals(f.publicKey)&&(m[f.mint.toString()]=f.publicKey)}else m[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,y)=>U(_({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:P}=f,h=un[y],I=b.address,T=n&&I===$.toString(),k=m[I];if(!k){let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Me(I),notUseTokenAccount:T,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:T?!1:r,checkCreateATAOwner:s});k=L,N&&l.addInstruction(N)}m[I.toString()]=k;let S=[];for(let L of g){let N=n&&L.mint.address===$.toString(),O=m[L.mint.address];if(!O)if(N){let{account:R,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L.mint.programId,mint:new Me(L.mint.address),notUseTokenAccount:N,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!N,associatedOnly:N?!1:r,checkCreateATAOwner:s});O=R,v&&l.addInstruction(v)}else{let R=new Me(L.mint.address);O=this.scope.account.getAssociatedTokenAccount(R),l.addInstruction({instructions:[Vl(this.scope.ownerPubKey,O,this.scope.ownerPubKey,R)]})}m[L.mint.address]=O,S.push(O)}let x=p[P],K={amount:at,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:x,lpAccount:k,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(L=>new Me(L))},B=h===6?_i(K):h===5?Ei(K):Vi(K),C={3:z.FarmV3Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};l.addInstruction({instructions:[B],instructionTypes:[C[h]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as ut}from"@solana/web3.js";import{AccountLayout as Ab,NATIVE_MINT as ys,TOKEN_PROGRAM_ID as uo}from"@solana/spl-token";import{Keypair as us,PublicKey as H,SystemProgram as Vn,TransactionInstruction as Tt}from"@solana/web3.js";import lu from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Hi,TOKEN_2022_PROGRAM_ID as $e,TOKEN_PROGRAM_ID as Fe}from"@solana/spl-token";import Wy from"bn.js";import cn from"bn.js";var Te=new cn(0),tn=new cn(1),Fn=new cn(-1),pt=new cn(1).shln(64),ns=new cn(1).shln(128),Wi=pt.sub(tn),qi=64,Dl=ns.subn(1),St=-443636,vt=-St,Ft=new cn("4295048016"),_t=new cn("79226673521066979257578248091"),os=new cn("4295048017"),is=new cn("79226673521066979257578248090"),Wl=16,ql="59543866431248",Ul="184467440737095516",Gl="15793534762490258745",rs=new cn(10).pow(new cn(6)),Ly=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(Ly||{}),OI={[500]:10,[3e3]:60,[1e4]:200},MI={version:6,liquidity:Te,tickCurrent:0,feeGrowthGlobalX64A:Te,feeGrowthGlobalX64B:Te,protocolFeesTokenA:Te,protocolFeesTokenB:Te,swapInAmountTokenA:Te,swapOutAmountTokenB:Te,swapInAmountTokenB:Te,swapOutAmountTokenA:Te,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},Xl={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:[]},vI=new cn("18446744073700000000");import we from"bn.js";function ss(i){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,i,!1),new Uint8Array(e)}function _I(i){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,i,!1),new Uint8Array(e)}function EI(i){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,i,!1),new Uint8Array(e)}function as(i){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,i,!1),new Uint8Array(e)}function eu(i,e){let t=0;for(let n=i-1;n>=0&&!e.testn(n);n--)t++;return t}function tu(i,e){let t=0;for(let n=0;n<i&&!e.testn(n);n++)t++;return t}function Ui(i,e){for(let t=0;t<i;t++)if(e.testn(t))return!1;return!0}function zl(i,e){return Ui(i,e)?null:eu(i,e)}function Yl(i,e){return Ui(i,e)?null:tu(i,e)}var Ny=Buffer.from("amm_config","utf8"),nu=Buffer.from("pool","utf8"),ou=Buffer.from("pool_vault","utf8"),Oy=Buffer.from("pool_reward_vault","utf8"),Hl=Buffer.from("position","utf8"),My=Buffer.from("tick_array","utf8"),vy=Buffer.from("operation","utf8"),Fy=Buffer.from("pool_tick_array_bitmap_extension","utf8"),_y=Buffer.from("observation","utf8");function qI(i,e){return ie([Ny,ss(e)],i)}function Ql(i,e,t,n){return ie([nu,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function iu(i,e,t){return ie([ou,e.toBuffer(),t.toBuffer()],i)}function jl(i,e,t){return ie([Oy,e.toBuffer(),t.toBuffer()],i)}function Ie(i,e,t){return ie([My,e.toBuffer(),as(t)],i)}function wn(i,e,t,n){return ie([Hl,e.toBuffer(),as(t),as(n)],i)}function Et(i,e){return ie([Hl,e.toBuffer()],i)}function _n(i){return ie([Buffer.from("metadata","utf8"),an.toBuffer(),i.toBuffer()],an)}function Gi(i){return ie([vy],i)}function ot(i,e){return ie([Fy,e.toBuffer()],i)}function Zl(i,e){return ie([_y,e.toBuffer()],i)}var $l=Buffer.from("locked_position","utf8");function ru(i,e){return ie([$l,e.toBuffer()],i)}function Jo(i,e){return ie([$l,e.toBuffer()],i)}var Ey=Buffer.from("support_mint","utf8");function su(i,e){return ie([Ey,e.toBuffer()],i)}import{PublicKey as nn}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as Jl}from"@solana/spl-token";import He from"bn.js";import Bn from"bn.js";var Xi=class{static getfeeGrowthInside(e,t,n){let o=new Bn(0),r=new Bn(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,r=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),r=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Bn(0),a=new Bn(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=be.wrappingSubU128(be.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),u=be.wrappingSubU128(be.wrappingSubU128(e.feeGrowthGlobalX64B,r),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=be.mulDivFloor(be.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,pt),c=t.tokenFeesOwedA.add(a),u=be.mulDivFloor(be.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,pt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=be.mulDivFloor(be.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,pt),c=t.tokenFeesOwedA.add(a),u=be.mulDivFloor(be.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,pt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let r=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=be.wrappingSubU128(c,u.growthInsideLastX64),m=be.mulDivFloor(l,t.liquidity,pt),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static GetPositionRewards(e,t,n,o){let r=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=be.wrappingSubU128(c,u.growthInsideLastX64),m=be.mulDivFloor(l,t.liquidity,pt),d=u.rewardAmountOwed.add(m);r.push(d)}return r}static getRewardGrowthInside(e,t,n,o){let r=[];for(let s=0;s<o.length;s++){let a=new Bn(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Bn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(be.wrappingSubU128(be.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return r}static getRewardGrowthInsideV2(e,t,n,o){let r=[];for(let s=0;s<o.length;s++){let a=new Bn(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new Bn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(be.wrappingSubU128(be.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return r}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:r,epochInfo:s}){var b,g,P,h;let a=ue.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),c=ue.getSqrtPriceX64FromTick(t.tickLower),u=ue.getSqrtPriceX64FromTick(t.tickUpper),l=r?1+o:1-o,m=Be.getAmountsFromLiquidity(a,c,u,n,r),[d,p]=[Ne(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Ne(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[f,y]=[Ne(new Bn(new M(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,s,!0),Ne(new Bn(new M(m.amountB.toString()).mul(l).toFixed(0)),(h=e.mintB.extensions)==null?void 0:h.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:gn(d.expirationTime,p.expirationTime)}}};var Vy=15,Se=class{static async getTickArrays(e,t,n,o,r,s,a){let c=[],u=ee.getTickArrayStartIndexByTick(o,r),l=ee.getInitializedTickArrayInRange(s,a,r,u,Math.floor(Vy/2));for(let p=0;p<l.length;p++){let{publicKey:f}=Ie(t,n,l[p]);c.push(f)}let m=(await dn(e,c)).map(p=>p!==null?zi.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=U(_({},f),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,r,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,r,s);for(;a==null||a.liquidityGross.lten(0);){if(u=ee.getNextTickArrayStartIndex(u,r,s),this.checkIsValidStartIndex(u,r))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,o,r){let s=Math.floor(e/Se.tickCount(t)),a=n?ee.searchLowBitFromStart(o,r,s-1,1,t):ee.searchHightBitFromStart(o,r,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let r;if(o){let a=ft-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a-1}}else{let a=0;for(;a<ft;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a+1}}let{publicKey:s}=Ie(e,t,n.startTickIndex);return{nextTick:r,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,r,s){let a=ee.getTickArrayStartIndexByTick(o,r),c=Math.floor((o-a)/r),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<ft;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=Ie(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(ee.checkIsOutOfBoundary(e)){if(e>vt)return!1;let n=ee.getTickArrayStartIndexByTick(St,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return ft*e}};var au=14,En=class{static maxTickInTickarrayBitmap(e){return e*ft*Io}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let r=n*o;return e<0?{minValue:-r,maxValue:-r+n}:{minValue:r,maxValue:r+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!Se.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let r=this.maxTickInTickarrayBitmap(n),s=o?t-Se.tickCount(n):t+Se.tickCount(n);if(s<-r||s>=r)return{isInit:!1,tickIndex:t};let a=n*ft,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=zl(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-r}}else{let l=e.shrn(u),m=Yl(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:r-Se.tickCount(n)}}}},Yi=class{static getBitmapOffset(e,t){if(!Se.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=En.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=En.maxTickInTickarrayBitmap(e),n=-t;if(vt<=t)throw Error(`extensionTickBoundary check error: ${vt}, ${t}`);if(n<=St)throw Error(`extensionTickBoundary check error: ${n}, ${St}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),r=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:ee.mergeTickArrayBitmap(o).testn(r),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let r=Se.tickCount(t),s=n?e-r:e+r,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:r,maxValue:s}=En.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=ee.mergeTickArrayBitmap(e).shln(Io-1-a),u=Ui(512,c)?null:eu(512,c);if(u!==null){let l=t-u*Se.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r}}else{let c=ee.mergeTickArrayBitmap(e).shrn(a),u=Ui(512,c)?null:tu(512,c);if(u!==null){let l=t+u*Se.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-Se.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%En.maxTickInTickarrayBitmap(t),o=Math.floor(n/Se.tickCount(t));return e<0&&n!=0&&(o=Io-o),o}};var ve=class{static getOutputAmountAndRemainAccounts(e,t,n,o,r,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:f,sqrtPriceX64:y,feeAmount:b}=Bo.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,r,s);return c.push(...f),{allTrade:d,expectedAmountOut:p.mul(Fn),remainingAccounts:c,executionPrice:y,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,r){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 y=this.preInitializedTickArrayStartIndex(e,s);if(y.isExist){let{publicKey:b}=Ie(e.programId,e.id,y.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=Bo.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(Fn),u,r);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=ve.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Yi.checkTickArrayIsInit(Se.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):ee.checkTickArrayIsInitialized(ee.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=Ie(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:r,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,Se.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(r){let{publicKey:a}=Ie(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/Se.tickCount(e.tickSpacing)),o=t?ee.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):ee.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=Se.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:r}=En.nextInitializedTickArrayStartIndex(ee.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:r};t=r;let{isInit:s,tickIndex:a}=Yi.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<St||t>vt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:r}){var a,c,u;let s=[];for(let l=0;l<r.length;l++){let m=r[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=U(_({},m),{perSecond:be.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new nn(d)});if(p.tokenMint.equals(nn.default))continue;if(n<=p.openTime.toNumber()||o.eq(Te)){s.push(p);continue}let f=new He(Math.min(p.endTime.toNumber(),n)),y=f.sub(p.lastUpdateTime),b=be.mulDivFloor(y,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),P=be.mulDivFloor(y,p.emissionsPerSecondX64,pt),h=p.rewardTotalEmissioned.add(P);s.push(U(_({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:h,lastUpdateTime:f}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let r of t){let s=ee.getTickArrayStartIndexByTick(r,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=En.maxTickInTickarrayBitmap(e),n=-t;return t>vt&&(t=Se.getArrayStartIndex(vt,e)+Se.tickCount(e)),n<St&&(n=Se.getArrayStartIndex(St,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!Se.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/Se.tickCount(t)*Io}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await We(e,t.map(s=>({pubkey:s})),{batchRequest:n}),r={};for(let s of o)s.accountInfo!==null&&(r[s.pubkey.toString()]=tm.decode(s.accountInfo.data));return r}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},r=[];for(let c of t){let u=ee.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=ee.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=Ie(c.programId,c.id,m);r.push({pubkey:d}),o[d.toString()]=c.id}}let s=await We(e,r,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=zi.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=U(_({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:r=!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(Et(p,d).publicKey);let l=await dn(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=ei.decode(d.data),f=p.poolId.toString(),y=e.find(x=>x.state.id.toBase58()===f);if(y===void 0)continue;let b=y.state,g=ee._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),P=ee._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:h,amountB:I}=Be.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,p.liquidity,!1),T=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));y.positionAccount=[...(a=y.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:P.price,amountA:h,amountB:I,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=>U(_({},x),{pendingReward:new He(0)})),leverage:T,tokenFeeAmountA:new He(0),tokenFeeAmountB:new He(0)}];let k=await ee.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickLower,y.state.tickSpacing),S=await ee.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickUpper,y.state.tickSpacing);m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=k,m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(r){let d=Object.values(m),p=await dn(t,d,{batchRequest:o}),f={};for(let y=0;y<d.length;y++){let b=p[y];if(b===null)continue;let g=d[y].toString();f[g]=zi.decode(b.data)}for(let{state:y,positionAccount:b}of e)if(!!b)for(let g of b){let P=`${y.programId.toString()}-${y.id.toString()}-${g.tickLower}`,h=`${y.programId.toString()}-${y.id.toString()}-${g.tickUpper}`,I=f[m[P].toString()],T=f[m[h].toString()],k=I.ticks[ee.getTickOffsetInArray(g.tickLower,y.tickSpacing)],S=T.ticks[ee.getTickOffsetInArray(g.tickUpper,y.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:K}=await Xi.GetPositionFees(y,g,k,S),B=await Xi.GetPositionRewards(y,g,k,S);g.tokenFeeAmountA=x.gte(new He(0))?x:new He(0),g.tokenFeeAmountB=K.gte(new He(0))?K:new He(0);for(let C=0;C<B.length;C++)g.rewardInfos[C].pendingReward=B[C].gte(new He(0))?B[C]:new He(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:r,slippage:s,priceLimit:a=new M(0),catchLiquidityInsufficient:c=!1}){var L;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new M(0))?u=l?Ft.add(new He(1)):_t.sub(new He(1)):u=ue.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Ne(r,m,o,!1),{allTrade:f,expectedAmountOut:y,remainingAccounts:b,executionPrice:g,feeAmount:P}=ve.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((L=p.fee)!=null?L:Te),u,c),h=Ne(y,d,o,!1),I=ue.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),T=l?I:new M(1).div(I),k=y.mul(new He(Math.floor((1-s)*1e10))).div(new He(1e10)),S=Ne(k,d,o,!1),x=l?e.currentPrice:new M(1).div(e.currentPrice),K=new M(T).sub(x).abs(),B=x,C=new et(new M(K).mul(10**15).toFixed(0),new M(B).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:h,minAmountOut:S,expirationTime:gn(p.expirationTime,h.expirationTime),currentPrice:e.currentPrice,executionPrice:T,priceImpact:C,fee:P,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:r,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Oe(U(_({},u),{mint:u.address,isToken2022:u.programId===Jl.toBase58()})),new Oe(U(_({},l),{mint:l.address,isToken2022:l.programId===Jl.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:y,minAmountOut:b,expirationTime:g,currentPrice:P,executionPrice:h,priceImpact:I,fee:T,remainingAccounts:k,executionPriceX64:S}=ve.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new nn(u.address),amountIn:n,slippage:r,epochInfo:s,catchLiquidityInsufficient:a}),x=U(_({},f),{amount:new Ce(m,f.amount),fee:f.fee===void 0?void 0:new Ce(m,f.fee)}),K=U(_({},y),{amount:new Ce(d,y.amount),fee:y.fee===void 0?void 0:new Ce(d,y.fee)}),B=U(_({},b),{amount:new Ce(d,b.amount),fee:b.fee===void 0?void 0:new Ce(d,b.fee)}),C=new gt({baseToken:m,denominator:new He(10).pow(new He(20+m.decimals)),quoteToken:d,numerator:P.mul(new M(10**(20+d.decimals))).toFixed(0)}),L=new gt({baseToken:m,denominator:new He(10).pow(new He(20+m.decimals)),quoteToken:d,numerator:h.mul(new M(10**(20+d.decimals))).toFixed(0)}),N=new Ce(m,T);return{allTrade:p,realAmountIn:x,amountOut:K,minAmountOut:B,expirationTime:g,currentPrice:C,executionPrice:L,priceImpact:I,fee:N,remainingAccounts:k,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountOut:r,slippage:s,priceLimit:a=new M(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 M(0))?l=c?_t.sub(new He(1)):Ft.add(new He(1)):l=ue.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=Ne(r,u[n.toString()],o,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:f,feeAmount:y}=ve.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((B=m.fee)!=null?B:Te),l),b=c?e.mintB.address:e.mintA.address,g=Ne(d,u[b],o,!1),P=ue.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),h=c?P:new M(1).div(P),I=d.mul(new He(Math.floor((1+s)*1e10))).div(new He(1e10)),T=Ne(I,u[b],o,!0),k=c?e.currentPrice:new M(1).div(e.currentPrice),S=new M(h).sub(k).abs(),x=k,K=new et(new M(S).mul(10**15).toFixed(0),new M(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:T,realAmountOut:m,expirationTime:gn(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:K,fee:y,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var f,y,b;let r=e[t],s=ee.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=ee.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(s,r.priceMin),l=Math.min(a,r.priceMax)-c,m=a-s,d=r.priceMax-r.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:r.feeApr*p,rewardsApr:[((f=r.rewardApr[0])!=null?f:0)*p,((y=r.rewardApr[1])!=null?y:0)*p,((b=r.rewardApr[2])!=null?b:0)*p],apr:r.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:r,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[It(e.mintA.address).toString()],d=o[It(e.mintB.address).toString()],p=e.mintA.decimals,f=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let y=ue.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),b=ue.getSqrtPriceX64FromTick(s),g=ue.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:h}=Be.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:I,amountSlippageB:T}=Be.getAmountsFromLiquidityWithSlippage(y,b,g,r,!1,!1,0),k=new M(P.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(h.toString()).div(new M(10).pow(f)).mul(d.value)),S=new M(I.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(T.toString()).div(new M(10).pow(f)).mul(d.value)),x=new M(1).div(k.add(S)),B=new M(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),C=3600*24*365,L=e.rewardDefaultInfos.map(N=>{var v,Y;let O=N.mint.decimals,R=o[N.mint.address];return c<((v=N.startTime)!=null?v:0)||c>((Y=N.endTime)!=null?Y:0)||!N.perSecond||!R||O===void 0?0:new M(R.value).mul(new M(N.perSecond).mul(C)).div(new M(10).pow(O)).mul(x).mul(100).toNumber()});return{feeApr:B,rewardsApr:L,apr:B+L.reduce((N,O)=>N+O,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:r,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,P;let l=ue.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),m=ue.getSqrtPriceX64FromTick(n),d=ue.getSqrtPriceX64FromTick(o),p=Ne(r,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new He(new M(p.amount.sub((P=p.fee)!=null?P:Te).toString()).toFixed(0)),y;if(l.lte(m))y=t?Be.getLiquidityFromTokenAmountA(m,d,f,!a):new He(0);else if(l.lte(d)){let h=Be.getLiquidityFromTokenAmountA(l,d,f,!a),I=Be.getLiquidityFromTokenAmountB(m,l,f);y=t?h:I}else y=t?new He(0):Be.getLiquidityFromTokenAmountB(m,d,f);let b=await ve.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:y,slippage:s,add:a});return{liquidity:y,amountA:t?p:b.amountA,amountB:t?b.amountB:p,amountSlippageA:t?p:b.amountSlippageA,amountSlippageB:t?b.amountSlippageB:p,expirationTime:b.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:r,slippage:s,add:a}){var b,g,P,h;let c=ue.getSqrtPriceX64FromTick(n),u=ue.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=Be.getAmountsFromLiquidity(ue.priceToSqrtPriceX64(new M(t.price),t.mintA.decimals,t.mintB.decimals),c,u,r,a),[d,p]=[Ne(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Ne(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,y]=[Ne(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.feeConfig,e,!0),Ne(m.amountB.muln(l),(h=t.mintB.extensions)==null?void 0:h.feeConfig,e,!0)];return{liquidity:r,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:gn(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new nn(c.id));(await dn(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=xo.decode(c.data))});let s=t.map(c=>ot(new nn(c.programId),new nn(c.id)).publicKey),a=await ve.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>U(_({},c),{[u.id]:U(_({},n[u.id]),{id:new nn(u.id),version:6,programId:new nn(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:U(_({},u.config),{id:new nn(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapAccount:ot(new nn(u.programId),new nn(u.id)).publicKey,exBitmapInfo:a[ot(new nn(u.programId),new nn(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function KB({poolInfo:i,tickLower:e,tickUpper:t,amountA:n,amountB:o,slippage:r,add:s,epochInfo:a,amountHasFee:c}){var h,I,T,k;let[u,l,m,d]=e<t?[e,t,n,o]:[t,e,o,n],p=ue.priceToSqrtPriceX64(new M(i.price),i.mintA.decimals,i.mintB.decimals),f=ue.getSqrtPriceX64FromTick(u),y=ue.getSqrtPriceX64FromTick(l),[b,g]=[Ne(m,(h=i.mintA.extensions)==null?void 0:h.feeConfig,a,!c),Ne(d,(I=i.mintB.extensions)==null?void 0:I.feeConfig,a,!c)],P=Be.getLiquidityFromTokenAmounts(p,f,y,b.amount.sub((T=b.fee)!=null?T:Te),g.amount.sub((k=g.fee)!=null?k:Te));return Be.getAmountsOutFromLiquidity({poolInfo:i,tickLower:e,tickUpper:t,liquidity:P,slippage:r,add:s,epochInfo:a,amountAddFee:!c})}var uu={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function em(i){return U(_({},i),{type:"Concentrated",programId:i.programId.toString(),id:i.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:i.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:i.ammConfig.tradeFeeRate,openTime:i.startTime.toString(),tvl:0,day:uu,week:uu,month:uu,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:U(_({},i.ammConfig),{id:i.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var be=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),r=o.div(n);return o.mod(n).eq(Te)||(r=r.add(tn)),r}static mulDivFloor(e,t,n){if(n.eq(Te))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Te))throw new Error("division by 0");return e.mul(t).add(n.sub(tn)).div(n)}static x64ToDecimal(e,t){return new M(e.toString()).div(M.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new we(e.mul(M.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(ns).sub(t).mod(ns)}};function At(i,e){return cu(i.mul(e),64,256)}function Dy(i,e,t){let n=i.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function cu(i,e,t){let n=i.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ue=class{static sqrtPriceX64ToPrice(e,t,n){return be.x64ToDecimal(e).pow(2).mul(M.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return be.decimalToX64(e.mul(M.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(Te))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Te))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(Te))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Te))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(Te))return e;let r=t.shln(qi);if(o){let s=r,a=r.add(n.mul(e));return a.gte(s)?be.mulDivCeil(s,e,a):be.mulDivRoundingUp(s,tn,s.div(e).add(n))}else{let s=n.mul(e);if(!r.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=r.sub(s);return be.mulDivCeil(r,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let r=n.shln(qi);if(o)return e.add(r.div(t));{let s=be.mulDivRoundingUp(r,tn,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<St||e>vt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new we("18445821805675395072"):new we("18446744073709551616");return(t&2)!=0&&(n=At(n,new we("18444899583751176192"))),(t&4)!=0&&(n=At(n,new we("18443055278223355904"))),(t&8)!=0&&(n=At(n,new we("18439367220385607680"))),(t&16)!=0&&(n=At(n,new we("18431993317065453568"))),(t&32)!=0&&(n=At(n,new we("18417254355718170624"))),(t&64)!=0&&(n=At(n,new we("18387811781193609216"))),(t&128)!=0&&(n=At(n,new we("18329067761203558400"))),(t&256)!=0&&(n=At(n,new we("18212142134806163456"))),(t&512)!=0&&(n=At(n,new we("17980523815641700352"))),(t&1024)!=0&&(n=At(n,new we("17526086738831433728"))),(t&2048)!=0&&(n=At(n,new we("16651378430235570176"))),(t&4096)!=0&&(n=At(n,new we("15030750278694412288"))),(t&8192)!=0&&(n=At(n,new we("12247334978884435968"))),(t&16384)!=0&&(n=At(n,new we("8131365268886854656"))),(t&32768)!=0&&(n=At(n,new we("3584323654725218816"))),(t&65536)!=0&&(n=At(n,new we("696457651848324352"))),(t&131072)!=0&&(n=At(n,new we("26294789957507116"))),(t&262144)!=0&&(n=At(n,new we("37481735321082"))),e>0&&(n=Dl.div(n)),n}static getTickFromPrice(e,t,n){return ue.getTickFromSqrtPriceX64(ue.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(_t)||e.lt(Ft))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new we(t-64),o=Dy(n,32,128),r=new we("8000000000000000","hex"),s=0,a=new we(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;r.gt(new we(0))&&s<Wl;){c=c.mul(c);let f=c.shrn(127);c=c.shrn(63+f.toNumber()),a=a.add(r.mul(f)),r=r.shrn(1),s+=1}let u=a.shrn(32),m=o.add(u).mul(new we(ql)),d=cu(m.sub(new we(Ul)),64,128).toNumber(),p=cu(m.add(new we(Gl)),64,128).toNumber();return d==p?d:ue.getSqrtPriceX64FromTick(p).lte(e)?p:d}},So=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=ue.getTickFromSqrtPriceX64(ue.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let r=So.getTickWithPriceAndTickspacing(e,t,n,o),s=ue.getSqrtPriceX64FromTick(r);return ue.sqrtPriceX64ToPrice(s,n,o)}},Be=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Te))throw new Error("sqrtPriceX64A must greater than 0");let r=n.ushln(qi),s=t.sub(e);return o?be.mulDivRoundingUp(be.mulDivCeil(r,s,t),tn,e):be.mulDivFloor(r,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Te))throw new Error("sqrtPriceX64A must greater than 0");return o?be.mulDivCeil(n,t.sub(e),pt):be.mulDivFloor(n,t.sub(e),pt)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let r=n.mul(e).mul(t),s=t.sub(e),a=r.div(s);return o?be.mulDivRoundingUp(a,tn,Wi):a.shrn(qi)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),be.mulDivFloor(n,Wi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return Be.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=Be.getLiquidityFromTokenAmountA(e,n,o,!1),a=Be.getLiquidityFromTokenAmountB(t,e,r);return s.lt(a)?s:a}else return Be.getLiquidityFromTokenAmountB(t,n,r)}static getAmountsFromLiquidity(e,t,n,o,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:Be.getTokenAmountAFromLiquidity(t,n,o,r),amountB:new we(0)};if(e.lt(n)){let s=Be.getTokenAmountAFromLiquidity(e,n,o,r),a=Be.getTokenAmountBFromLiquidity(t,e,o,r);return{amountA:s,amountB:a}}else return{amountA:new we(0),amountB:Be.getTokenAmountBFromLiquidity(t,n,o,r)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,r,s,a){let{amountA:c,amountB:u}=Be.getAmountsFromLiquidity(e,t,n,o,s),l=r?1+a:1-a,m=new we(new M(c.toString()).mul(l).toFixed(0)),d=new we(new M(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:r,add:s,epochInfo:a,amountAddFee:c}){var P,h,I,T;let u=ue.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),l=ue.getSqrtPriceX64FromTick(t),m=ue.getSqrtPriceX64FromTick(n),d=s?1+r:1-r,p=Be.getAmountsFromLiquidity(u,l,m,o,s),[f,y]=[Ne(p.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,c),Ne(p.amountB,(h=e.mintB.extensions)==null?void 0:h.feeConfig,a,c)],[b,g]=[Ne(new we(new M(p.amountA.toString()).mul(d).toFixed(0)),(I=e.mintA.extensions)==null?void 0:I.feeConfig,a,c),Ne(new we(new M(p.amountB.toString()).mul(d).toFixed(0)),(T=e.mintB.extensions)==null?void 0:T.feeConfig,a,c)];return{liquidity:o,amountA:f,amountB:y,amountSlippageA:b,amountSlippageB:g,expirationTime:gn(f.expirationTime,y.expirationTime)}}},Bo=class{static swapCompute(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y=!1){if(d.eq(Te))throw new Error("amountSpecified must not be 0");if(f||(f=s?Ft.add(tn):_t.sub(tn)),s){if(f.lt(Ft))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(f.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(f.gt(_t))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(f.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(Te),g={amountSpecifiedRemaining:d,amountCalculated:Te,sqrtPriceX64:m,tick:u>p?Math.min(p+Se.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new we(0)},P=p,h=n[p],I=0,T=!s&&h.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Te)&&!g.sqrtPriceX64.eq(f);){I>10;let k={};k.sqrtPriceStartX64=g.sqrtPriceX64;let S=ee.nextInitTick(h,g.tick,l,s,T),x=S||null,K=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let C=ve.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:r},P,s);if(!C.isExist){if(y)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}P=C.nextStartIndex;let{publicKey:L}=Ie(e,t,P);K=L,h=n[P];try{x=ee.firstInitializedTick(h,s)}catch{throw Error("not found next tick info")}}k.tickNext=x.tick,k.initialized=x.liquidityGross.gtn(0),p!==P&&K&&(g.accounts.push(K),p=P),k.tickNext<St?k.tickNext=St:k.tickNext>vt&&(k.tickNext=vt),k.sqrtPriceNextX64=ue.getSqrtPriceX64FromTick(k.tickNext);let B;if(s&&k.sqrtPriceNextX64.lt(f)||!s&&k.sqrtPriceNextX64.gt(f)?B=f:B=k.sqrtPriceNextX64,[g.sqrtPriceX64,k.amountIn,k.amountOut,k.feeAmount]=Bo.swapStepCompute(g.sqrtPriceX64,B,g.liquidity,g.amountSpecifiedRemaining,a,s),g.feeAmount=g.feeAmount.add(k.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(k.amountIn.add(k.feeAmount)),g.amountCalculated=g.amountCalculated.sub(k.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(k.amountOut),g.amountCalculated=g.amountCalculated.add(k.amountIn.add(k.feeAmount))),g.sqrtPriceX64.eq(k.sqrtPriceNextX64)){if(k.initialized){let C=x.liquidityNet;s&&(C=C.mul(Fn)),g.liquidity=Be.addDelta(g.liquidity,C)}T=k.tickNext!=g.tick&&!s&&h.startTickIndex===k.tickNext,g.tick=s?k.tickNext-1:k.tickNext}else if(g.sqrtPriceX64!=k.sqrtPriceStartX64){let C=ue.getTickFromSqrtPriceX64(g.sqrtPriceX64);T=C!=g.tick&&!s&&h.startTickIndex===C,g.tick=C}++I}try{let{nextStartIndex:k,isExist:S}=Se.nextInitializedTickArray(g.tick,l,s,o,r);S&&p!==k&&(g.accounts.push(Ie(e,t,k).publicKey),p=k)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Te,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,r,s){let a={sqrtPriceX64Next:new we(0),amountIn:new we(0),amountOut:new we(0),feeAmount:new we(0)},c=o.gte(Te);if(c){let l=be.mulDivFloor(o,rs.sub(new we(r.toString())),rs);a.amountIn=s?Be.getTokenAmountAFromLiquidity(t,e,n,!0):Be.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(a.amountIn)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ue.getNextSqrtPriceX64FromInput(e,n,l,s)}else a.amountOut=s?Be.getTokenAmountBFromLiquidity(t,e,n,!1):Be.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(Fn).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ue.getNextSqrtPriceX64FromOutput(e,n,o.mul(Fn),s);let u=t.eq(a.sqrtPriceX64Next);return s?(u&&c||(a.amountIn=Be.getTokenAmountAFromLiquidity(a.sqrtPriceX64Next,e,n,!0)),u&&!c||(a.amountOut=Be.getTokenAmountBFromLiquidity(a.sqrtPriceX64Next,e,n,!1))):(a.amountIn=u&&c?a.amountIn:Be.getTokenAmountBFromLiquidity(e,a.sqrtPriceX64Next,n,!0),a.amountOut=u&&!c?a.amountOut:Be.getTokenAmountAFromLiquidity(e,a.sqrtPriceX64Next,n,!1)),!c&&a.amountOut.gt(o.mul(Fn))&&(a.amountOut=o.mul(Fn)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=o.sub(a.amountIn):a.feeAmount=be.mulDivCeil(a.amountIn,new we(r),rs.sub(new we(r))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var ft=60,Io=512,ee=class{static getTickArrayAddressByTick(e,t,n,o){let r=ee.getTickArrayStartIndexByTick(n,o),{publicKey:s}=Ie(e,t,r);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=ee.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=ft)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=Se.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*Se.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*ft,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*ft,r=Math.floor(t/o)+512,s=Math.abs(r);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*ft:e+t*ft}static mergeTickArrayBitmap(e){let t=new Wy(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,r){let s=Math.floor(o/(n*ft));return[...ee.searchLowBitFromStart(e,t,s-1,r,n),...ee.searchHightBitFromStart(e,t,s,r,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return ee.searchHightBitFromStart(e,t,-7680,Io,n)}static getAllInitializedTickArrayInfo(e,t,n,o,r){let s=[],a=ee.getAllInitializedTickArrayStartIndex(n,o,r);for(let c of a){let{publicKey:u}=Ie(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>ee.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=Se.tickCount(r);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>ee.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=Se.tickCount(r);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<St||e>vt}static nextInitTick(e,t,n,o,r){if(Se.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(r||(a=a+1);a<ft;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=ft-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<ft;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=ue.getSqrtPriceX64FromTick(t),r=ue.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(r),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),r=So.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ue.getSqrtPriceX64FromTick(r),a=ue.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new M(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=ue.getSqrtPriceX64FromTick(t),r=ue.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(r),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),r=So.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ue.getSqrtPriceX64FromTick(r),a=ue.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new M(1).div(a)}}};var nm=E([Re(8),D("bump"),en("index"),F(""),kt("protocolFeeRate"),kt("tradeFeeRate"),en("tickSpacing"),j(A(),8,"")]),qy=E([kt("blockTimestamp"),Ho("tickCumulative"),j(A(),4)]),om=E([Re(8),Ye("initialized"),A("recentEpoch"),en("observationIndex"),F("poolId"),j(qy,100,"observations"),j(A(),4)]),Uy=E([D("rewardState"),A("openTime"),A("endTime"),A("lastUpdateTime"),re("emissionsPerSecondX64"),A("rewardTotalEmissioned"),A("rewardClaimed"),F("tokenMint"),F("tokenVault"),F("creator"),re("rewardGrowthGlobalX64")]),xo=E([Re(8),D("bump"),F("ammConfig"),F("creator"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),en("tickSpacing"),re("liquidity"),re("sqrtPriceX64"),ze("tickCurrent"),kt(),re("feeGrowthGlobalX64A"),re("feeGrowthGlobalX64B"),A("protocolFeesTokenA"),A("protocolFeesTokenB"),re("swapInAmountTokenA"),re("swapOutAmountTokenB"),re("swapInAmountTokenB"),re("swapOutAmountTokenA"),D("status"),j(D(),7,""),j(Uy,3,"rewardInfos"),j(A(),16,"tickArrayBitmap"),A("totalFeesTokenA"),A("totalFeesClaimedTokenA"),A("totalFeesTokenB"),A("totalFeesClaimedTokenB"),A("fundFeesTokenA"),A("fundFeesTokenB"),A("startTime"),j(A(),15*4-3,"padding")]),Gy=E([re("growthInsideLastX64"),A("rewardAmountOwed")]),ei=E([Re(8),D("bump"),F("nftMint"),F("poolId"),ze("tickLower"),ze("tickUpper"),re("liquidity"),re("feeGrowthInsideLastX64A"),re("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j(Gy,3,"rewardInfos"),j(A(),8,"")]),$B=E([Re(8),D("bump"),F("poolId"),ze("tickLowerIndex"),ze("tickUpperIndex"),re("liquidity"),re("feeGrowthInsideLastX64A"),re("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j(re(),3,"rewardGrowthInside"),j(A(),8,"")]),Xy=E([ze("tick"),bl("liquidityNet"),re("liquidityGross"),re("feeGrowthOutsideX64A"),re("feeGrowthOutsideX64B"),j(re(),3,"rewardGrowthsOutsideX64"),j(kt(),13,"")]),zi=E([Re(8),F("poolId"),ze("startTickIndex"),j(Xy,ft,"ticks"),D("initializedTickCount"),j(D(),115,"")]),im=E([Re(329),j(F(),100,"whitelistMints")]),tm=E([Re(8),F("poolId"),j(j(A(),8),au,"positiveTickArrayBitmap"),j(j(A(),8),au,"negativeTickArrayBitmap")]),JB=E([A(),D("bump"),F("owner"),F("poolId"),F("positionId"),F("nftAccount"),j(A(),8)]),rm=E([Re(8),D("bump"),F("lockOwner"),F("poolId"),F("positionId"),F("nftAccount"),F("lockNftMint"),A("recentEpoch"),j(A(),8)]);om.span;var sm=ke("Raydium_Clmm"),on={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],openPositionWithTokenEx:[77,255,174,82,125,29,201,46],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},am=[188,37,179,131,82,150,84,73],um=[16,72,250,198,14,162,212,19],Ke=class{static createPoolInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f){let y=E([re("sqrtPriceX64"),A("zero")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},...(f==null?void 0:f.map(h=>({pubkey:h,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,zero:Te},g);let P=Buffer.from([...on.createPool,...g]);return new Tt({keys:b,programId:e,data:P})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:r,ammConfigId:s,initialPriceX64:a,extendMintAccount:c}=e,[u,l]=[new H(o.address),new H(r.address)],{publicKey:m}=Ql(t,s,u,l),{publicKey:d}=Zl(t,m),{publicKey:p}=iu(t,m,u),{publicKey:f}=iu(t,m,l),y=ot(t,m).publicKey,b=[this.createPoolInstruction(t,m,n,s,d,u,p,new H(o.programId||Fe),l,f,new H(r.programId||Fe),y,a,c)];return{signers:[],instructions:b,instructionTypes:[z.CreateAccount,z.ClmmCreatePool],address:{poolId:m,observationId:d,exBitmapAccount:y,mintAVault:p,mintBVault:f},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I,T,k,S,x,K,B){let C=E([ze("tickLowerIndex"),ze("tickUpperIndex"),ze("tickArrayLowerStartIndex"),ze("tickArrayUpperStartIndex"),re("liquidity"),A("amountMaxA"),A("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),L=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:Hi,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...L],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:h,tickArrayLowerStartIndex:I,tickArrayUpperStartIndex:T,liquidity:k,amountMaxA:S,amountMaxB:x,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},O);let R=Buffer.from([...on.openPosition,...O]);return new Tt({keys:N,programId:e,data:R})}static openPositionFromLiquidityInstruction22(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I,T,k,S,x,K){let B=E([ze("tickLowerIndex"),ze("tickUpperIndex"),ze("tickArrayLowerStartIndex"),ze("tickArrayUpperStartIndex"),re("liquidity"),A("amountMaxA"),A("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],L=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:Hi,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(B.span);B.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:k,amountMaxB:S,withMetadata:x==="create",baseFlag:!1,optionBaseFlag:0},N);let O=Buffer.from([...on.openPositionWithTokenEx,...N]);return new Tt({keys:L,programId:e,data:O})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new H(e.programId),new H(e.id)],y;if(l)y=new H((await l(1))[0]);else{let K=us.generate();d.push(K),y=K.publicKey}let b=ee.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=ee.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:P}=Ie(p,f,b),{publicKey:h}=Ie(p,f,g),{publicKey:I}=m?J(n.wallet,y,$e):J(n.wallet,y,Fe),{publicKey:T}=_n(y),{publicKey:k}=Et(p,y),{publicKey:S}=wn(p,f,o,r),x=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,y,I,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,r,b,g,s,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,y,I,T,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,r,b,g,s,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(p,f).publicKey:void 0);return{signers:d,instructions:[x],instructionTypes:[z.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:P,tickArrayUpper:h,positionNftAccount:I,metadataAccount:T,personalPosition:k,protocolPosition:S}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new H(e.programId),new H(e.id)],y;if(l)y=new H((await l(1))[0]);else{let K=us.generate();d.push(K),y=K.publicKey}let b=ee.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=ee.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:P}=Ie(p,f,b),{publicKey:h}=Ie(p,f,g),{publicKey:I}=m?J(n.wallet,y,$e):J(n.wallet,y,Fe),{publicKey:T}=_n(y),{publicKey:k}=Et(p,y),{publicKey:S}=wn(p,f,o,r),x=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,y,I,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,r,b,g,u,s,a,c,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,y,I,T,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,r,b,g,u,s,a,c,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(p,f).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:P,tickArrayUpper:h,positionNftAccount:I,metadataAccount:T,personalPosition:k,protocolPosition:S},instructions:[x],signers:d,instructionTypes:[z.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I,T,k,S,x,K,B){let C=E([ze("tickLowerIndex"),ze("tickUpperIndex"),ze("tickArrayLowerStartIndex"),ze("tickArrayUpperStartIndex"),re("liquidity"),A("amountMaxA"),A("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),L=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:Hi,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...L],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:h,tickArrayLowerStartIndex:I,tickArrayUpperStartIndex:T,liquidity:new lu(0),amountMaxA:S==="MintA"?x:K,amountMaxB:S==="MintA"?K:x,withMetadata:k==="create",baseFlag:S==="MintA",optionBaseFlag:1},O);let R=Buffer.from([...on.openPosition,...O]);return new Tt({keys:N,programId:e,data:R})}static openPositionFromBaseInstruction22(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I,T,k,S,x,K){let B=E([ze("tickLowerIndex"),ze("tickUpperIndex"),ze("tickArrayLowerStartIndex"),ze("tickArrayUpperStartIndex"),re("liquidity"),A("amountMaxA"),A("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],L=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:Hi,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(B.span);B.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:h,tickArrayUpperStartIndex:I,liquidity:new lu(0),amountMaxA:k==="MintA"?S:x,amountMaxB:k==="MintA"?x:S,withMetadata:T==="create",baseFlag:k==="MintA",optionBaseFlag:1},N);let O=Buffer.from([...on.openPositionWithTokenEx,...N]);return new Tt({keys:L,programId:e,data:O})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d,p=[];if(l)d=new H((await l(1))[0]);else{let K=us.generate();p.push(K),d=K.publicKey}let[f,y]=[new H(e.programId),new H(e.id)],b=ee.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=ee.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:P}=Ie(f,y,b),{publicKey:h}=Ie(f,y,g),{publicKey:I}=m?J(n.wallet,d,$e):J(n.wallet,d,Fe),{publicKey:T}=_n(d),{publicKey:k}=Et(f,d),{publicKey:S}=wn(f,y,o,r),x=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,y,n.wallet,d,I,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,r,b,g,s,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(f,y).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,y,n.wallet,d,I,T,S,P,h,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,r,b,g,s,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?ot(f,y).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:P,tickArrayUpper:h,positionNftAccount:I,metadataAccount:T,personalPosition:k,protocolPosition:S},instructions:[x],signers:p,instructionTypes:[z.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,r,s){let a=E([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:s?$e:Fe,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...on.closePosition,...u]);return new Tt({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:r}){let s=new H(e.programId),a=r?J(n.wallet,o.nftMint,$e).publicKey:J(n.wallet,o.nftMint,Fe).publicKey,{publicKey:c}=Et(s,o.nftMint),u=[];return u.push(this.closePositionInstruction(s,n.wallet,o.nftMint,a,c,r)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[z.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P){let h=E([re("liquidity"),A("amountMaxA"),A("amountMaxB"),D("optionBaseFlag"),Ye("baseFlag")]),I=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...I],k=Buffer.alloc(h.span);h.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},k);let S=Buffer.from([...on.increaseLiquidity,...k]);return new Tt({keys:T,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:r,amountMaxA:s,amountMaxB:a,nft2022:c}){let[u,l]=[new H(e.programId),new H(e.id)],m=ee.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=ee.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ie(u,l,m),{publicKey:f}=Ie(u,l,d),{publicKey:y}=c?J(o.wallet,n.nftMint,$e):J(o.wallet,n.nftMint,Fe),{publicKey:b}=Et(u,n.nftMint),{publicKey:g}=wn(u,l,n.tickLower,n.tickUpper),P=this.increasePositionFromLiquidityInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),r,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},signers:[],instructions:[P],instructionTypes:[z.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:r,baseAmount:s,otherAmountMax:a,nft2022:c}){let[u,l]=[new H(e.programId),new H(e.id)],m=ee.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=ee.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ie(u,l,m),{publicKey:f}=Ie(u,l,d),{publicKey:y}=c?J(o.wallet,n.nftMint,$e):J(o.wallet,n.nftMint,Fe),{publicKey:b}=Et(u,n.nftMint),{publicKey:g}=wn(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),r,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(u,l).publicKey:void 0)],signers:[],instructionTypes:[z.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P){let h=E([re("liquidity"),A("amountMaxA"),A("amountMaxB"),D("optionBaseFlag"),Ye("baseFlag")]),I=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[]],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...I],k=Buffer.alloc(h.span);h.encode({liquidity:new lu(0),amountMaxA:y==="MintA"?b:g,amountMaxB:y==="MintA"?g:b,baseFlag:y==="MintA",optionBaseFlag:1},k);let S=Buffer.from([...on.increaseLiquidity,...k]);return new Tt({keys:T,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([re("liquidity"),A("amountMinA"),A("amountMinB")]),T=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...y.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,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:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:Nr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],S=Buffer.alloc(I.span);I.encode({liquidity:b,amountMinA:g,amountMinB:P},S);let x=Buffer.from([...on.decreaseLiquidity,...S]);return new Tt({keys:k,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:r,amountMinA:s,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new H(e.programId),new H(e.id)],d=ee.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=ee.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=Ie(l,m,d),{publicKey:y}=Ie(l,m,p),{publicKey:b}=u?J(o.wallet,n.nftMint,$e):J(o.wallet,n.nftMint,c),{publicKey:g}=Et(l,n.nftMint),{publicKey:P}=wn(l,m,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new H(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new H(e.rewardDefaultInfos[k].mint.address)});let I=[],T=this.decreaseLiquidityInstruction(l,o.wallet,b,g,m,P,f,y,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),h,r,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?ot(l,m).publicKey:void 0);return I.push(T),{address:{tickArrayLower:f,tickArrayUpper:y,positionNftAccount:b,personalPosition:g,protocolPosition:P},signers:[],instructions:I,instructionTypes:[z.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g){let P=E([A("amount"),A("otherAmountThreshold"),re("sqrtPriceLimitX64"),Ye("isBaseInput")]),h=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,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:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:Nr,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...h],T=Buffer.alloc(P.span);P.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},T);let k=Buffer.from([...on.swap,...T]);return new Tt({keys:I,programId:e,data:k})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:r,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new H(e.programId),new H(e.id)],[d,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintA.address===r.toString(),g=[this.swapInstruction(l,o.wallet,m,new H(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?f:y,b?y:f,u,n,s,a,c,!0,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[z.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:r,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new H(e.programId),new H(e.id)],[d,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintA.address===r.toBase58(),g=[this.swapInstruction(l,o.wallet,m,new H(e.config.id),b?o.tokenAccountB:o.tokenAccountA,b?o.tokenAccountA:o.tokenAccountB,b?p:d,b?d:p,b?y:f,b?f:y,u,n,s,a,c,!1,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[z.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,r,s,a,c,u,l,m,d){let p=E([A("openTime"),A("endTime"),re("emissionsPerSecondX64")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:te(l),endTime:te(m),emissionsPerSecondX64:d},y);let b=Buffer.from([...on.initReward,...y]);return new Tt({keys:f,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[r,s]=[new H(e.programId),new H(e.id)],a=jl(r,s,o.mint).publicKey,c=Gi(r).publicKey,u=[this.initRewardInstruction(r,n.wallet,s,c,new H(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[z.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,r,s,a,c,u,l,m,d){let p=E([D("rewardIndex"),re("emissionsPerSecondX64"),A("openTime"),A("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],y=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:te(l),endTime:te(m)},y);let b=Buffer.from([...on.setRewardEmissions,...y]);return new Tt({keys:f,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[r,s]=[new H(e.programId),new H(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new H(t.rewardInfos[d].vault),u=new H(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&sm.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Gi(r).publicKey,m=[this.setRewardInstruction(r,n.wallet,s,l,new H(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[z.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,r,s,a){let c=E([D("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:Nr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...on.collectReward,...l]);return new Tt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[r,s]=[new H(e.programId),new H(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new H(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&sm.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(r,n.wallet,s,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[z.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:r,nftMint:s,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new H((await c(1))[0]);else{let g=us.generate();u.push(g),l=g.publicKey}let m=a?J(r,s,$e).publicKey:J(r,s,Fe).publicKey,{publicKey:d}=Et(n,s),p=Jo(e,l).publicKey,f=J(r,l,Fe).publicKey,y=_n(l).publicKey,b=Ke.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:r,lockOwner:r,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:s,authPositionNftAccount:J(t,s,a?$e:Fe).publicKey,positionNftProgram:a?$e:Fe});return{address:{positionId:d,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:m,metadataAccount:y},instructions:[b],signers:u,instructionTypes:[z.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:r,positionNftAccount:s,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:l,lockPositionId:m,lockNftMint:d,lockNftAccount:p,metadataAccount:f,withMetadata:y}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:r,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:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:Hi,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1}],g=E([Ye("withMetadata")]),P=Buffer.alloc(g.span);g.encode({withMetadata:y},P);let h=Buffer.from([...am,...P]);return new Tt({keys:b,programId:e,data:h})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:r}){let{publicKey:s}=J(o,r,Fe),{publicKey:a}=Et(n,r),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:ru(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:Vn.programId,isSigner:!1,isWritable:!1}];return new Tt({keys:c,programId:e,data:Buffer.from(am)})}static harvestLockPositionInstruction(e){let[t,n]=[new H(e.poolKeys.programId),new H(e.poolKeys.id)],o=ee.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),r=ee.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=Ie(t,n,o),{publicKey:a}=Ie(t,n,r),{publicKey:c}=J(e.owner,e.ownerPosition.nftMint,Fe),{publicKey:u}=Et(t,e.ownerPosition.nftMint),{publicKey:l}=wn(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new H(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new H(e.poolKeys.rewardInfos[f].mint.address)});let d=[...m.map(f=>[{pubkey:f.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:ru(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new H(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new H(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new Tt({keys:p,programId:e.programId,data:Buffer.from(um)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:r,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:f,tickArrayUpper:y,userVaultA:b,userVaultB:g,mintA:P,mintB:h,rewardAccounts:I,exTickArrayBitmap:T}){let k=[...T?[{pubkey:T,isSigner:!1,isWritable:!0}]:[],...I.map(x=>[{pubkey:x.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.rewardMint,isSigner:!1,isWritable:!1}]).flat()],S=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Fe,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:In,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},{pubkey:h,isSigner:!1,isWritable:!1},...k];return new Tt({keys:S,programId:e,data:Buffer.from(um)})}};var cm=E([kt("mintAuthorityOption"),F("mintAuthority"),A("supply"),D("decimals"),D("isInitialized"),kt("freezeAuthorityOption"),F("freezeAuthority")]);import{PublicKey as zy}from"@solana/web3.js";import{MintLayout as lm,TOKEN_PROGRAM_ID as Yy}from"@solana/spl-token";var xx=async({connection:i,mint:e})=>{let t=await i.getAccountInfo(new zy(e));return!t||t.data.length!==lm.span?void 0:lm.decode(t.data)},Sx=({mint:i,decimals:e,programId:t=Yy,logoURI:n="",priority:o=3})=>{let r=i.toBase58().substring(0,6);return{address:i.toBase58(),decimals:e,symbol:r,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:r,tags:[],priority:o}},cs=i=>new Oe({mint:i.address,decimals:i.decimals,symbol:i.symbol,name:i.name}),Qi=o=>{var r=o,{amount:i,isRaw:e,name:t}=r,n=Qe(r,["amount","isRaw","name"]);return new Ce(new Oe({mint:It(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),i,e,t)};function Kx(i){return i.address===Tn.address?yt:i}function Cx(i){return i.address===yt.address?Tn:i}var Kt=o=>{var r=o,{address:i,programId:e,decimals:t}=r,n=Qe(r,["address","programId","decimals"]);return _({chainId:101,address:It(i).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},ao=i=>i?U(_({},i),{transferFeeConfigAuthority:i.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:i.withdrawWithheldAuthority.toBase58(),withheldAmount:i.withheldAmount.toString(),olderTransferFee:U(_({},i.olderTransferFee),{epoch:i.olderTransferFee.epoch.toString(),maximumFee:i.olderTransferFee.maximumFee.toString()}),newerTransferFee:U(_({},i.newerTransferFee),{epoch:i.newerTransferFee.epoch.toString(),maximumFee:i.newerTransferFee.maximumFee.toString()})}):void 0;import mm from"bn.js";var mu=new mm(25),ls=new mm(1e4),Hy={4:3,5:3};import{PublicKey as Ee,SystemProgram as fm,SYSVAR_RENT_PUBKEY as jy,TransactionInstruction as Dn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Zy,TOKEN_PROGRAM_ID as ti}from"@solana/spl-token";var du=E([D("instruction"),A("amountIn"),A("minAmountOut")]),pu=E([D("instruction"),A("maxAmountIn"),A("amountOut")]),Dx=E([D("instruction"),D("nonce")]),fu=E([D("instruction"),D("nonce"),A("startTime")]),Ko=E([A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalValue"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),re("swapBaseInAmount"),re("swapQuoteOutAmount"),A("swapBase2QuoteFee"),re("swapQuoteInAmount"),re("swapBaseOutAmount"),A("swapQuote2BaseFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("withdrawQueue"),F("lpVault"),F("owner"),A("lpReserve"),j(A(),3,"padding")]),Qy=E([A("accountType"),A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalsValue"),A("abortTradeFactor"),A("priceTickMultiplier"),A("priceTick"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),re("swapBaseInAmount"),re("swapQuoteOutAmount"),re("swapQuoteInAmount"),re("swapBaseOutAmount"),A("swapQuote2BaseFee"),A("swapBase2QuoteFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("modelDataAccount"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("owner"),j(A(),64,"padding")]),yu=E([D("instruction"),A("baseAmountIn"),A("quoteAmountIn"),A("fixedSide"),A("otherAmountMin")]),bu=E([D("instruction"),A("lpAmount"),A("baseAmountMin"),A("quoteAmountMin")]),Wx={4:Ko,5:Qy},dm=E([A("fee")]);var pm=ke("Raydium_liquidity_instruction");function ym(i){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:r,fixedSide:s,otherAmountMin:a,modelDataPubKey:c=eo}=i,u=Buffer.alloc(yu.span);yu.encode({instruction:3,baseAmountIn:te(o),quoteAmountIn:te(r),otherAmountMin:te(a),fixedSide:s==="base"?at:Fc},u);let l=[w({pubkey:ti,isWritable:!1}),w({pubkey:new Ee(e.id)}),w({pubkey:new Ee(t.authority),isWritable:!1}),w({pubkey:new Ee(t.openOrders),isWritable:!1}),w({pubkey:new Ee(t.targetOrders)}),w({pubkey:new Ee(e.lpMint.address)}),w({pubkey:new Ee(t.vault.A)}),w({pubkey:new Ee(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(w({pubkey:c})),l.push(w({pubkey:new Ee(e.marketId),isWritable:!1}),w({pubkey:n.baseTokenAccount}),w({pubkey:n.quoteTokenAccount}),w({pubkey:n.lpTokenAccount}),w({pubkey:n.owner,isWritable:!1,isSigner:!0}),w({pubkey:new Ee(t.marketEventQueue),isWritable:!1})),new Dn({programId:new Ee(e.programId),keys:l,data:u})}function gu(i){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:r,quoteAmountMin:s,modelDataPubKey:a=eo}=i,c=Ge(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(bu.span);bu.encode({instruction:4,lpAmount:te(o),baseAmountMin:te(r),quoteAmountMin:te(s)},l);let m=[w({pubkey:ti,isWritable:!1}),w({pubkey:c.id}),w({pubkey:c.authority,isWritable:!1}),w({pubkey:c.openOrders}),w({pubkey:c.targetOrders}),w({pubkey:c.mintLp.address}),w({pubkey:c.vault.A}),w({pubkey:c.vault.B})];return u===5?m.push(w({pubkey:a})):(m.push(w({pubkey:c.id})),m.push(w({pubkey:c.id}))),m.push(w({pubkey:c.marketProgramId,isWritable:!1}),w({pubkey:c.marketId}),w({pubkey:c.marketBaseVault}),w({pubkey:c.marketQuoteVault}),w({pubkey:c.marketAuthority,isWritable:!1}),w({pubkey:n.lpTokenAccount}),w({pubkey:n.baseTokenAccount}),w({pubkey:n.quoteTokenAccount}),w({pubkey:n.owner,isWritable:!1,isSigner:!0}),w({pubkey:c.marketEventQueue}),w({pubkey:c.marketBids}),w({pubkey:c.marketAsks})),new Dn({programId:c.programId,keys:m,data:l})}return new Dn({programId:c.programId,keys:[]})}function Pu({programId:i,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:r,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:f,userCoinVault:y,userPcVault:b,userLpVault:g,nonce:P,openTime:h,coinAmount:I,pcAmount:T,ammConfigId:k,feeDestinationId:S}){let x=E([D("instruction"),D("nonce"),A("openTime"),A("pcAmount"),A("coinAmount")]),K=[{pubkey:ti,isSigner:!1,isWritable:!1},{pubkey:Zy,isSigner:!1,isWritable:!1},{pubkey:fm.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,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:k,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],B=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:P,openTime:h,coinAmount:I,pcAmount:T},B),{instruction:new Dn({keys:K,programId:i,data:B}),instructionType:z.AmmV4CreatePool}}function $x(i){let e=E([D("instruction"),D("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[w({pubkey:new Ee(i.id),isWritable:!1}),w({pubkey:new Ee(i.authority),isWritable:!1}),w({pubkey:new Ee(i.openOrders),isWritable:!1}),w({pubkey:new Ee(i.vault.A),isWritable:!1}),w({pubkey:new Ee(i.vault.B),isWritable:!1}),w({pubkey:new Ee(i.mintLp.address),isWritable:!1}),w({pubkey:new Ee(i.marketId),isWritable:!1}),w({pubkey:new Ee(i.marketEventQueue),isWritable:!1})];return new Dn({programId:new Ee(i.programId),keys:n,data:t})}function $y({poolKeys:i,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=eo},r){let s=Ge(i),a=Buffer.alloc(du.span);du.encode({instruction:9,amountIn:te(t),minAmountOut:te(n)},a);let c=[w({pubkey:ti,isWritable:!1}),w({pubkey:s.id}),w({pubkey:s.authority,isWritable:!1}),w({pubkey:s.openOrders})];return r===4&&c.push(w({pubkey:s.targetOrders})),c.push(w({pubkey:s.vault.A}),w({pubkey:s.vault.B})),r===5&&c.push(w({pubkey:o})),c.push(w({pubkey:s.marketProgramId,isWritable:!1}),w({pubkey:s.marketId}),w({pubkey:s.marketBids}),w({pubkey:s.marketAsks}),w({pubkey:s.marketEventQueue}),w({pubkey:s.marketBaseVault}),w({pubkey:s.marketQuoteVault}),w({pubkey:s.marketAuthority,isWritable:!1}),w({pubkey:e.tokenAccountIn}),w({pubkey:e.tokenAccountOut}),w({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Dn({programId:s.programId,keys:c,data:a})}function Jy({poolKeys:i,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=eo},r){let s=Ge(i),a=Buffer.alloc(pu.span);pu.encode({instruction:11,maxAmountIn:te(t),amountOut:te(n)},a);let c=[w({pubkey:ti,isWritable:!1}),w({pubkey:s.id}),w({pubkey:s.authority,isWritable:!1}),w({pubkey:s.openOrders}),w({pubkey:s.targetOrders}),w({pubkey:s.vault.A}),w({pubkey:s.vault.B})];return r===5&&c.push(w({pubkey:o})),c.push(w({pubkey:s.marketProgramId,isWritable:!1}),w({pubkey:s.marketId}),w({pubkey:s.marketBids}),w({pubkey:s.marketAsks}),w({pubkey:s.marketEventQueue}),w({pubkey:s.marketBaseVault}),w({pubkey:s.marketQuoteVault}),w({pubkey:s.marketAuthority,isWritable:!1}),w({pubkey:e.tokenAccountIn}),w({pubkey:e.tokenAccountOut}),w({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Dn({programId:s.programId,keys:c,data:a})}function ms(i){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:r,fixedSide:s}=i;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return $y(U(_({},a),{amountIn:o,minAmountOut:r}),t);if(s==="out")return Jy(U(_({},a),{maxAmountIn:o,amountOut:r}),t);pm.logWithError("invalid params","params",i)}throw pm.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function Jx({poolKeys:i,userKeys:e,startTime:t}){let n=Buffer.alloc(fu.span);fu.encode({instruction:0,nonce:5,startTime:te(t)},n);let o=Ge(i),r=[w({pubkey:ti,isWritable:!1}),w({pubkey:fm.programId,isWritable:!1}),w({pubkey:jy,isWritable:!1}),w({pubkey:o.id}),w({pubkey:o.authority,isWritable:!1}),w({pubkey:o.openOrders}),w({pubkey:o.mintLp.address}),w({pubkey:o.mintA.address,isWritable:!1}),w({pubkey:o.mintB.address,isWritable:!1}),w({pubkey:o.vault.A,isWritable:!1}),w({pubkey:o.vault.B,isWritable:!1}),w({pubkey:o.id}),w({pubkey:o.targetOrders}),w({pubkey:e.lpTokenAccount}),w({pubkey:o.id,isWritable:!1}),w({pubkey:o.marketProgramId,isWritable:!1}),w({pubkey:o.marketId,isWritable:!1}),w({pubkey:e.payer,isSigner:!0})];return new Dn({programId:o.programId,keys:r,data:n})}function bm({poolKeys:i}){let e=E([D("instruction"),D("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[w({pubkey:new Ee(i.id),isWritable:!1}),w({pubkey:new Ee(i.authority),isWritable:!1}),w({pubkey:new Ee(i.openOrders),isWritable:!1}),w({pubkey:new Ee(i.vault.A),isWritable:!1}),w({pubkey:new Ee(i.vault.B),isWritable:!1}),w({pubkey:new Ee(i.mintLp.address),isWritable:!1}),w({pubkey:new Ee(i.marketId),isWritable:!1}),w({pubkey:new Ee(i.marketEventQueue),isWritable:!1})];return{instruction:new Dn({programId:new Ee(i.programId),keys:n,data:t})}}var Ro=5e4,eb=E([A("x"),A("y"),A("price")]),tb=E([A("accountType"),A("status"),A("multiplier"),A("validDataCount"),j(eb,Ro,"DataElement")]);function nb(i,e){return[0,Ro-2]}function ob(i){return[0,Ro-2]}function ib(i){return[0,Ro-2]}function rb(i,e,t){let[n,o]=nb(e,t),r=n,s=o,a=0,c=e*i.multiplier/t;for(;r<=s;){if(a=Math.floor((s+r)/2),a===0||a>=Ro-2)return[a,a,!1];let u=i.DataElement[a].x*i.multiplier/i.DataElement[a].y,l=i.DataElement[a-1].x*i.multiplier/i.DataElement[a-1].y,m=i.DataElement[a+1].x*i.multiplier/i.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];r=a+1}}return[a,a,!1]}function Au(i,e,t){let[n,o,r]=rb(i,e,t);if(!r)return 0;if(n===o){let s=i.DataElement[n].x;return e*i.multiplier/s}else{let s=i.DataElement[n].x,a=i.DataElement[n].y,c=i.DataElement[o].x,u=i.DataElement[o].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*i.multiplier*l/p}}function Co(i,e,t){return e*i.multiplier/t}function gm(i,e,t){return e*t/i.multiplier}function sb(i,e){let[t,n]=ob(e),o=t,r=n,s=0,a=e;for(;o<r;){if(s=Math.floor((r+o)/2),s<=0||s>Ro-2)return[s,s,!1];let c=i.DataElement[s].x,u=i.DataElement[s-1].x,l=i.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)r=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];o=s+1}}return[s,s,!1]}function ab(i,e){let[t,n]=ib(e),o=t,r=n,s=0,a=e;for(;o<=r;){if(s=Math.floor((r+o)/2),s<=0||s>=Ro-2)return[s,s,!1];let c=i.DataElement[s].y,u=i.DataElement[s-1].y,l=i.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)o=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];r=s-1}}return[s,s,!1]}function Pm(i,e,t,n){let o=n?e+t:e-t,[r,s,a]=sb(i,o);if(!a)return[0,0,!1,a];if(r===s)return[i.DataElement[s].price,i.DataElement[s].y,!1,a];{let c=i.DataElement[r].x,u=i.DataElement[s].x,l=i.DataElement[r].price,m=i.DataElement[s].price,d=i.DataElement[r].y,p=i.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let f,y;return n?(f=l+(m-l)*(e-c)/(u-c),y=d-(o-c)*i.multiplier/m):(f=l+(m-l)*(e-c)/(u-c),y=p+(u-o)*i.multiplier/l),[f,y,!1,a]}}}function ub(i,e,t,n){let o=n?e-t:e+t,[r,s,a]=ab(i,o);if(!a)return[0,0,!1,a];if(r===s)return[i.DataElement[s].price,i.DataElement[s].x,!1,a];{let c=i.DataElement[r].x,u=i.DataElement[s].x,l=i.DataElement[r].price,m=i.DataElement[s].price,d=i.DataElement[r].y,p=i.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let f,y;return n?(f=l+(m-l)*(d-e)/(d-p),y=c+m*(d-o)/i.multiplier):(f=l+(m-l)*(d-e)/(d-p),y=u-l*(o-p)/i.multiplier),[f,y,!1,a]}}}function cb(i,e){let t=Pm(i,e,0,!1);return t[3]?t[0]:0}function Am(i,e,t,n){let o=Au(i,e,t),r=Co(i,e,o),s=Co(i,t,o),a=Co(i,n,o),c=!0,[u,l,m,d]=Pm(i,r,a,c);if(!d)return 0;if(m)return n*i.multiplier/u;{let p=s-l;return gm(i,p,o)}}function wm(i,e,t,n){let o=Au(i,e,t),r=Co(i,e,o),s=Co(i,t,o),a=Co(i,n,o),c=!1,[u,l,m,d]=ub(i,s,a,c);if(!d)return 0;if(m)return n*u/i.multiplier;{let p=r-l;return gm(i,p,o)}}function lb(i){let e=tb.decode(i);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 km(i,e,t,n){let o=cb(i,Co(i,e,Au(i,e,t)))/i.multiplier;return n?o:1/o}var ni=class{constructor({connection:e,modelDataPubKey:t=eo}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e,this.modelDataPubKey=t}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(this.modelDataPubKey);e&&(this._layoutData=lb(e==null?void 0:e.data))}}};import{PublicKey as Zi}from"@solana/web3.js";import ji from"bn.js";import{TOKEN_PROGRAM_ID as pb}from"@solana/spl-token";import{PublicKey as mb}from"@solana/web3.js";var db=ke("Raydium_liquidity_serum");function hm({programId:i,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let r=t.concat(Buffer.from([n]),Buffer.alloc(7));o=mb.createProgramAddressSync(r,i)}catch(r){if(r instanceof TypeError)throw r;n++;continue}return{publicKey:o,nonce:n}}throw db.logWithError("unable to find a viable program address nonce","params",{programId:i,marketId:e}),new Error("unable to find a viable program address nonce")}function ds({programId:i}){let{publicKey:e}=ie([Buffer.from("amm_config_account_seed","utf-8")],i);return e}function Lo({name:i,programId:e,marketId:t}){let{publicKey:n}=ie([e.toBuffer(),t.toBuffer(),Buffer.from(i,"utf-8")],e);return n}function fb({programId:i,marketId:e}){let{publicKey:t}=ie([i.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],i);return t}function hu({programId:i}){return ie([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],i)}function Tu({version:i,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:r,quoteDecimals:s,programId:a,marketProgramId:c}){let u=Lo({name:"amm_associated_seed",programId:a,marketId:t}),l=Lo({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=hu({programId:a}),p=Lo({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=Lo({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=Lo({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=fb({programId:a,marketId:t}),g=Lo({name:"target_associated_seed",programId:a,marketId:t}),P=Lo({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:h}=hm({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:r,quoteDecimals:s,lpDecimals:r,version:i,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:f,lpVault:y,openOrders:b,targetOrders:g,withdrawQueue:P,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:h,lookupTableAccount:Zi.default,configId:ds({programId:a})}}var wu;async function xS({connection:i,poolKeysList:e,config:t,modelDataPubKey:n}){return e.find(r=>r.modelDataAccount)&&(wu||(wu=new ni({connection:i,modelDataPubKey:n}),await wu.initStableModelLayout())),await Promise.all(e.map(async r=>{if(r.modelDataAccount){let s=bm({poolKeys:r});return(await zc(i,[s.instruction],"GetPoolData")).map(u=>{let l=Yc(u,"GetPoolData"),m=new ji(Nn(l,"status")),d=Number(Nn(l,"coin_decimals")),p=Number(Nn(l,"pc_decimals")),f=Number(Nn(l,"lp_decimals")),y=new ji(Nn(l,"pool_coin_amount")),b=new ji(Nn(l,"pool_pc_amount")),g=new ji(Nn(l,"pool_lp_supply")),P="0";try{P=Nn(l,"pool_open_time")}catch{}return{status:m,baseDecimals:d,quoteDecimals:p,lpDecimals:f,baseReserve:y,quoteReserve:b,lpSupply:g,startTime:new ji(P)}})[0]}else{let[s,a,c,u]=await i.getMultipleAccountsInfo([new Zi(r.id),new Zi(r.vault.A),new Zi(r.vault.B),new Zi(r.mintLp.address)]);if(s===null)throw Error("fetch pool error");if(a===null)throw Error("fetch vaultAccA error");if(c===null)throw Error("fetch vaultAccB error");if(u===null)throw Error("fetch mintAccLp error");let l=Ko.decode(s.data),m=An.decode(a.data),d=An.decode(c.data),p=cm.decode(u.data);return{status:l.status,baseDecimals:l.baseDecimal.toNumber(),quoteDecimals:l.quoteDecimal.toNumber(),lpDecimals:p.decimals,baseReserve:m.amount.sub(l.baseNeedTakePnl),quoteReserve:d.amount.sub(l.quoteNeedTakePnl),lpSupply:l.lpReserve,startTime:l.poolOpenTime}}}))}var ku={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},ps=i=>{let e={},t=pb.toBase58();return Object.keys(i).map(n=>{let o=i[n],[r,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:Kt({address:r,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:Kt({address:s,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new M(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new M(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new M(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:ku,week:ku,month:ku,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:ds({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new M(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:Kt({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0}}),e};import Je from"bn.js";import{PublicKey as $i}from"@solana/web3.js";import Ji from"bn.js";import{TOKEN_PROGRAM_ID as xm}from"@solana/spl-token";import{SystemProgram as No,SYSVAR_RENT_PUBKEY as bb,Transaction as Tm,TransactionInstruction as gb}from"@solana/web3.js";import{createInitializeAccountInstruction as Im,TOKEN_PROGRAM_ID as Bm}from"@solana/spl-token";function yb(i="accountFlags"){let e=new Jr(i);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Iu=E([Re(5),yb("accountFlags"),F("ownAddress"),A("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),F("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Re(7)]);function Pb({programId:i,marketInfo:e}){let t=E([D("version"),kt("instruction"),A("baseLotSize"),A("quoteLotSize"),en("feeRateBps"),A("vaultSignerNonce"),A("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:bb,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new gb({keys:n,programId:i,data:o})}async function fs({connection:i,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Tm,o=await i.getMinimumBalanceForRentExemption(165);n.add(No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:Bm}),No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:Bm}),Im(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Im(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await i.getMinimumBalanceForRentExemption(Iu.span),space:Iu.span,programId:t.programId}));let r=new Tm;return r.add(No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await i.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await i.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await i.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),No.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await i.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Pb({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[z.CreateAccount,z.CreateAccount,z.InitAccount,z.InitAccount]},{transaction:r,signer:[],instructionTypes:[z.CreateAccount,z.CreateAccount,z.CreateAccount,z.CreateAccount,z.CreateAccount,z.InitMarket]}]}var oi=class extends Xe{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:r,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:m,computeBudgetConfig:d,txTipConfig:p,feePayer:f}){let y=this.scope.ownerPubKey,b=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,g=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-market`}),P=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-request`}),h=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-event`}),I=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-bids`}),T=nt({fromPublicKey:y,programId:r,assignSeed:b&&`${b}-asks`}),k=nt({fromPublicKey:y,programId:xm,assignSeed:b&&`${b}-baseVault`}),S=nt({fromPublicKey:y,programId:xm,assignSeed:b&&`${b}-quoteVault`}),x=0,K=new Ji(100);function B(){let Y=new Ji(0);for(;;)try{return{vaultOwner:$i.createProgramAddressSync([g.publicKey.toBuffer(),Y.toArrayLike(Buffer,"le",8)],r),vaultSignerNonce:Y}}catch{if(Y.iaddn(1),Y.gt(new Ji(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:L}=B(),N=new Ji(Math.round(10**e.decimals*n)),O=new Ji(Math.round(n*10**t.decimals*o));if(N.eq(at))throw Error("lot size is too small");if(O.eq(at))throw Error("tick size or lot size is too small");let R=await fs({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:r,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:k,quoteVault:S,vaultOwner:C,requestQueue:P,eventQueue:h,bids:I,asks:T,feeRateBps:x,quoteDustThreshold:K,vaultSignerNonce:L,baseLotSize:N,quoteLotSize:O,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),v=this.createTxBuilder(f);v.addInstruction({instructions:R[0].transaction.instructions,signers:R[0].signer});for await(let Y of R.slice(1,R.length))v.addInstruction({instructions:Y.transaction.instructions,signers:Y.signer,instructionTypes:Y.instructionTypes});return m===0?v.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:h.publicKey,bids:I.publicKey,asks:T.publicKey,baseVault:k.publicKey,quoteVault:S.publicKey,baseMint:new $i(e.mint),quoteMint:new $i(t.mint)}}):v.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:h.publicKey,bids:I.publicKey,asks:T.publicKey,baseVault:k.publicKey,quoteVault:S.publicKey,baseMint:new $i(e.mint),quoteMint:new $i(t.mint)}})}};var er=class extends Xe{constructor(t){super(t);this.stableLayout=new ni({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:On.MODEL_DATA_PUBKEY})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:r}){let s=new Je(new M(n).mul(10**t[r?"mintA":"mintB"].decimals).toFixed(0)),a=cs(t[r?"mintB":"mintA"]),[c,u]=[new Je(new M(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Je(new M(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Je(new M(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",r?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",r?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=r?"base":"quote";this.logDebug("input side:",m);let d=at;s.isZero()||(d=m==="base"?vr(s.mul(u),c):vr(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=vr(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new et(new Je(1)).add(o),y=new et(new Je(1)).sub(o),b=f.mul(d).quotient,g=y.mul(d).quotient,P=new Ce(a,d),h=new Ce(a,b),I=new Ce(a,g);return this.logDebug("anotherAmount:",P.toFixed(),"maxAnotherAmount:",h.toFixed()),{anotherAmount:P,maxAnotherAmount:h,minAnotherAmount:I,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:r,amountInB:s,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",s),(r.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:s.toFixed()});let{account:f}=this.scope,{bypassAssociatedCheck:y,checkCreateATAOwner:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,P]=[r.token,s.token],h=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),I=await f.getCreatedTokenAccount({mint:P.mint,associatedOnly:!1});!h&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let T=await f.getCreatedTokenAccount({mint:new ut(n.lpMint.address)}),k=[g,P],S=[h,I],x=[r.raw,s.raw],K=r.token.mint.toBase58()===n.mintA.address?"base":"quote",B="base";["quote","base"].includes(K)||this.logAndCreateError("invalid fixedSide","fixedSide",c),K==="quote"?(k.reverse(),S.reverse(),x.reverse(),B=c==="a"?"quote":"base"):K==="base"&&(B=c==="a"?"base":"quote");let[C,L]=k,[N,O]=S,[R,v]=x,Y=o!=null?o:await this.getAmmPoolKeys(n.id),Q=this.createTxBuilder(p),ne=await f.handleTokenAccount({side:"in",amount:R,mint:C.mint,tokenAccount:N,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:de}=ne,ce=Qe(ne,["tokenAccount"]);Q.addInstruction(ce);let Le=await f.handleTokenAccount({side:"in",amount:v,mint:L.mint,tokenAccount:O,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:le}=Le,Ae=Qe(Le,["tokenAccount"]);Q.addInstruction(Ae);let _e=await f.handleTokenAccount({side:"out",amount:0,mint:new ut(n.lpMint.address),tokenAccount:T,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:fe}=_e,oe=Qe(_e,["tokenAccount"]);return Q.addInstruction(oe),Q.addInstruction({instructions:[ym({poolInfo:n,poolKeys:Y,userKeys:{baseTokenAccount:de,quoteTokenAccount:le,lpTokenAccount:fe,owner:this.scope.ownerPubKey},baseAmountIn:R,quoteAmountIn:v,otherAmountMin:a.raw,fixedSide:B})],instructionTypes:[n.pooltype.includes("StablePool")?z.AmmV5AddLiquidity:z.AmmV4AddLiquidity],lookupTableAddress:Y.lookupTableAccount?[Y.lookupTableAccount]:[]}),Q.addCustomComputeBudget(m),Q.addTipInstruction(d),l===0?await Q.buildV0():Q.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,lpAmount:r,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=t,p=o!=null?o:await this.getAmmPoolKeys(n.id),[f,y,b]=[new ut(n.mintA.address),new ut(n.mintB.address),new ut(n.lpMint.address)];this.logDebug("lpAmount:",r),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),r.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",r.toString());let{account:g}=this.scope,P=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});P||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let h=await g.getCreatedTokenAccount({mint:f}),I=await g.getCreatedTokenAccount({mint:y}),T=this.createTxBuilder(d),{bypassAssociatedCheck:k,checkCreateATAOwner:S}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),L=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:h,bypassAssociatedCheck:k,checkCreateATAOwner:S}),{tokenAccount:x}=L,K=Qe(L,["tokenAccount"]);T.addInstruction(K);let N=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:I,bypassAssociatedCheck:k,checkCreateATAOwner:S}),{tokenAccount:B}=N,C=Qe(N,["tokenAccount"]);return T.addInstruction(C),T.addInstruction({instructions:[gu({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:P,baseTokenAccount:x,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:r,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?z.AmmV5RemoveLiquidity:z.AmmV4RemoveLiquidity]}),T.addCustomComputeBudget(l),T.addTipInstruction(m),u===0?await T.buildV0():T.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:r,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=uo,checkCreateATAOwner:p=!0,getEphemeralSigners:f,txVersion:y,feePayer:b}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let g=this.createTxBuilder(b),P={};for(let Y of this.scope.account.tokenAccountRawInfos)(P[Y.accountInfo.mint.toString()]===void 0||J(this.scope.ownerPubKey,Y.accountInfo.mint,uo).publicKey.equals(Y.pubkey))&&(P[Y.accountInfo.mint.toString()]=Y.pubkey);let h=P[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let I=o.add(a!=null?a:new Je(0)),T=t.mintA.address===Oe.WSOL.mint.toString(),k=t.mintB.address===Oe.WSOL.mint.toString(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:uo,mint:new ut(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(x||{}),S===void 0)throw new Error("base token account not found");let{account:K,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:uo,mint:new ut(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(B||{}),K===void 0)throw new Error("quote token account not found");if(P[t.mintA.address]=S,P[t.mintB.address]=K,s!==void 0&&!(a!=null&&a.isZero())){let Y=un[s.programId],Q=xt({programId:new ut(s.programId),poolId:new ut(s.id),owner:this.scope.ownerPubKey,version:Y}),de,ce=await this.scope.connection.getAccountInfo(Q);if(ce&&(de=Zo(Y).decode(ce.data)),Y!==6&&!de){let{instruction:_e,instructionType:he}=Fi({id:new ut(s.id),programId:new ut(s.programId),version:Y,ledger:Q,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[_e],instructionTypes:[he]})}let le=[];for(let _e of s.rewardInfos){let he=_e.mint.address===Oe.WSOL.mint.toString();if(P[_e.mint.address])le.push(P[_e.mint.address]);else{let{account:qt,instructionParams:Zt}=await this.scope.account.getOrCreateTokenAccount({mint:new ut(_e.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!he,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});qt||this.logAndCreateError("farm reward account not found:",_e.mint.address),Zt&&g.addInstruction(Zt),le.push(qt)}}let Ae=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],fe={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:Ae,lpAccount:h,rewardAccounts:le},oe=un[s.programId],ne=oe===6?_i(fe):oe===5?Ei(fe):Vi(fe),Le={3:z.FarmV3Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};g.addInstruction({instructions:[ne],instructionTypes:[Le[oe]]})}let C=await this.getAmmPoolKeys(t.id),L=gu({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:h,baseTokenAccount:S,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:I,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?z.AmmV5RemoveLiquidity:z.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[N,O]=t.mintA.address===n.mintA.address?[S,K]:[K,S],R=await this.scope.clmm.getClmmPoolKeys(n.id),v=await Ke.openPositionFromBaseInstructions(U(_({poolInfo:n,poolKeys:R,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:N,tokenAccountB:O},withMetadata:"create"},r),{base:c,getEphemeralSigners:f}));return g.addInstruction({instructions:[...v.instructions],signers:v.signers,instructionTypes:[...v.instructionTypes],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),y===0?g.sizeCheckBuildV0({computeBudgetConfig:u}):g.sizeCheckBuild({computeBudgetConfig:u})}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:r,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g}){var O;let P=u.feePayer||((O=this.scope.owner)==null?void 0:O.publicKey),h=u.useSOLBalance&&o.mint.equals(ys),I=u.useSOLBalance&&r.mint.equals(ys),T=this.createTxBuilder(g),{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:P,amount:s}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});T.addInstruction(S||{});let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:I?{payer:P,amount:a}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:l,checkCreateATAOwner:m});if(T.addInstruction(K||{}),k===void 0||x===void 0)throw Error("you don't has some token account");let B=Tu({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:r.mint,baseDecimals:o.decimals,quoteDecimals:r.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:B.id,ammAuthority:B.authority,ammOpenOrders:B.openOrders,lpMint:B.lpMint,coinMint:B.baseMint,pcMint:B.quoteMint,coinVault:B.baseVault,pcVault:B.quoteVault,withdrawQueue:B.withdrawQueue,ammTargetOrders:B.targetOrders,poolTempLp:B.lpVault,marketProgramId:B.marketProgramId,marketId:B.marketId,ammConfigId:B.configId,feeDestinationId:f},{instruction:L,instructionType:N}=Pu(U(_({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:x,userLpVault:J(this.scope.ownerPubKey,B.lpMint,d).publicKey,nonce:B.nonce,openTime:c,coinAmount:s,pcAmount:a}));return T.addInstruction({instructions:[L],instructionTypes:[N]}),T.addCustomComputeBudget(y),T.addTipInstruction(b),T.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=wi,marketProgram:n=ca,feeDestinationId:o=la,tokenProgram:r,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:y=!1,lotSize:b=1,tickSize:g=.01,txVersion:P,computeBudgetConfig:h,txTipConfig:I,feePayer:T}){var bo,vo,Fo;let k=this.scope.ownerPubKey,S=m.feePayer||((bo=this.scope.owner)==null?void 0:bo.publicKey),x=m.useSOLBalance&&s.mint.equals(ys),K=m.useSOLBalance&&a.mint.equals(ys),B=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=nt({fromPublicKey:k,programId:n,assignSeed:B&&`${B}-market`}),L=nt({fromPublicKey:k,programId:n,assignSeed:B&&`${B}-request`}),N=nt({fromPublicKey:k,programId:n,assignSeed:B&&`${B}-event`}),O=nt({fromPublicKey:k,programId:n,assignSeed:B&&`${B}-bids`}),R=nt({fromPublicKey:k,programId:n,assignSeed:B&&`${B}-asks`}),v=nt({fromPublicKey:k,programId:uo,assignSeed:B&&`${B}-baseVault`}),Y=nt({fromPublicKey:k,programId:uo,assignSeed:B&&`${B}-quoteVault`}),Q=0,de=new Je(100);function ce(){let Jt=new Je(0);for(;;)try{return{vaultOwner:ut.createProgramAddressSync([C.publicKey.toBuffer(),Jt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Jt}}catch{if(Jt.iaddn(1),Jt.gt(new Je(25555)))throw Error("find vault owner error")}}let{vaultOwner:le,vaultSignerNonce:Ae}=ce(),fe=new Je(Math.round(10**s.decimals*b)),oe=new Je(Math.round(b*10**a.decimals*g));if(fe.eq(at))throw Error("lot size is too small");if(oe.eq(at))throw Error("tick size or lot size is too small");let ne=await fs({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:le,baseMint:s.mint,quoteMint:a.mint,id:C,baseVault:v,quoteVault:Y,requestQueue:L,eventQueue:N,bids:O,asks:R,feeRateBps:Q,quoteDustThreshold:de,vaultSignerNonce:Ae,baseLotSize:fe,quoteLotSize:oe,lowestFeeMarket:d}}),Le=this.createTxBuilder(T);Le.addInstruction({instructions:ne[0].transaction.instructions,signers:ne[0].signer});for await(let Jt of ne.slice(1,ne.length))Le.addInstruction({instructions:Jt.transaction.instructions,signers:Jt.signer,instructionTypes:Jt.instructionTypes});let{account:_e,instructionParams:he}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:x?{payer:S,amount:c}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:f,checkCreateATAOwner:y,assignSeed:x&&B?`${B}-wsol`:void 0});Le.addInstruction(he||{});let{account:qt,instructionParams:Zt}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:K?{payer:S,amount:u}:void 0,notUseTokenAccount:K,skipCloseAccount:!K,associatedOnly:K?!1:f,checkCreateATAOwner:y,assignSeed:K&&B?`${B}-wsol`:void 0});if(Le.addInstruction(Zt||{}),_e===void 0)throw Error("you don't has base token account");if(qt===void 0)throw Error("you don't has quote token account");let it=Tu({version:4,marketVersion:3,marketId:C.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),$t={programId:t,ammId:it.id,ammAuthority:it.authority,ammOpenOrders:it.openOrders,lpMint:it.lpMint,coinMint:it.baseMint,pcMint:it.quoteMint,coinVault:it.baseVault,pcVault:it.quoteVault,withdrawQueue:it.withdrawQueue,ammTargetOrders:it.targetOrders,poolTempLp:it.lpVault,marketProgramId:it.marketProgramId,marketId:it.marketId,ammConfigId:it.configId,feeDestinationId:o},{instruction:vs,instructionType:Fs}=Pu(U(_({},$t),{userWallet:this.scope.ownerPubKey,userCoinVault:_e,userPcVault:qt,userLpVault:J(this.scope.ownerPubKey,it.lpMint,r).publicKey,nonce:it.nonce,openTime:l,coinAmount:c,pcAmount:u}));Le.addInstruction({instructions:[vs],instructionTypes:[Fs]});let Mo=x||K?[((vo=he==null?void 0:he.instructions)==null?void 0:vo[0])||((Fo=Zt==null?void 0:Zt.instructions)==null?void 0:Fo[0])].filter(Jt=>!!Jt):void 0;return P===0?Le.sizeCheckBuildV0({computeBudgetConfig:h,splitIns:Mo,address:_({requestQueue:L.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:Y.publicKey,baseMint:new ut(s.mint),quoteMint:new ut(a.mint)},$t)}):Le.sizeCheckBuild({computeBudgetConfig:h,splitIns:Mo,address:_({requestQueue:L.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:Y.publicKey,baseMint:new ut(s.mint),quoteMint:new ut(a.mint)},$t)})}async getCreatePoolFee({programId:t}){let n=ds({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return dm.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:r,slippage:s}){let[a,c]=[o.toString(),r.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[f,y]=m,[b,g]=d,P=t.version===4,h;if(P)h=new M(y.toString()).div(10**g).div(new M(f.toString()).div(10**b));else{let N=km(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?h=new M(1e6).div(N*1e6):h=new M(N*1e6).div(1e6)}let I=n,T=new Je(0),k=new Je(0);if(!I.isZero())if(P){k=bn(I.mul(mu),ls);let N=I.sub(k),O=f.add(N);T=y.mul(N).div(O)}else{k=I.mul(new Je(2)).div(new Je(1e4));let N=I.sub(k);p==="quote"?T=new Je(Am(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber())):T=new Je(wm(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber()))}let S=new Je(new M(T.toString()).mul(1-s).toFixed(0)),x=T,K=S,B=new M(T.toString()).div(new M(I.sub(k).toString()).toFixed(0));!I.isZero()&&!T.isZero()&&(B=new M(T.toString()).div(10**g).div(new M(I.sub(k).toString()).div(10**b)));let C=h.sub(B).div(h).mul(100);return{amountOut:x,minAmountOut:K,currentPrice:h,executionPrice:B,priceImpact:C,fee:k}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:r,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=o.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new M(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[f,y]=d,b=new M(y.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new M(f.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Je(0),P=n;if(!P.isZero()){P.gt(y)&&(P=y.sub(new Je(1)));let K=y.sub(P);g=f.mul(P).div(K).mul(ls).div(ls.sub(mu))}let h=new Je(new M(g.toString()).mul(1+s).toFixed(0)),I=g,T=h;this.logDebug("amountIn:",new M(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new M(T.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let k=null;!g.isZero()&&!P.isZero()&&(k=new M(P.toString()).div(10**m.decimals).div(new M(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${k.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(k).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(I.toString()),x=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:I,maxAmountIn:T,currentPrice:b,executionPrice:k,priceImpact:x}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:r,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){let p=this.createTxBuilder(d),{associatedOnly:f=!0,inputUseSolBalance:y=!0,outputUseSolBalance:b=!0}=u||{},[g,P]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],h=y&&g.address===$.toBase58(),I=b&&P.address===$.toBase58(),{account:T,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:uo,mint:new ut(g.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:f});p.addInstruction(k||{}),T||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:T,inputTokenUseSolBalance:h,associatedOnly:f});let{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:uo,mint:new ut(P.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:f});p.addInstruction(x||{}),S===void 0&&this.logAndCreateError("output token account not found",{token:P.symbol||P.address,tokenAccountOut:S,outputTokenUseSolBalance:I,associatedOnly:f});let K=n||await this.getAmmPoolKeys(t.id),B=4;return t.pooltype.includes("StablePool")&&(B=5),p.addInstruction({instructions:[ms({version:B,poolKeys:K,userKeys:{tokenAccountIn:T,tokenAccountOut:S,owner:this.scope.ownerPubKey},amountIn:o,amountOut:r,fixedSide:a})],instructionTypes:[B===4?z.AmmV4SwapBaseIn:z.AmmV5SwapBaseIn]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await We(this.scope.connection,t.map(l=>({pubkey:new ut(l)})),n),r={},s=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Ko.decode(m.accountInfo.data);r[String(t[l])]=U(_({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await We(this.scope.connection,s.map(l=>({pubkey:new ut(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 Je(Ab.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(r)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=U(_({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new M(p.toString()).div(new M(10).pow(m.quoteDecimal.toString())).div(new M(d.toString()).div(new M(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=ps({[t]:n}),r=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:r,poolKeys:s[0]}}};import{PublicKey as Z}from"@solana/web3.js";import Vt from"bn.js";import{AccountLayout as Sm,createAssociatedTokenAccountIdempotentInstruction as Km,TOKEN_2022_PROGRAM_ID as co,TOKEN_PROGRAM_ID as tr}from"@solana/spl-token";var nr=class extends Xe{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var S;let{programId:t,owner:n=((S=this.scope.owner)==null?void 0:S.publicKey)||Z.default,mint1:o,mint2:r,ammConfig:s,initialPrice:a,computeBudgetConfig:c,forerunCreate:u,getObserveState:l,txVersion:m,txTipConfig:d,feePayer:p}=e,f=this.createTxBuilder(p),[y,b,g]=new Vt(new Z(o.address).toBuffer()).gt(new Vt(new Z(r.address).toBuffer()))?[r,o,new M(1).div(a)]:[o,r,a],P=ue.priceToSqrtPriceX64(g,y.decimals,b.decimals),h=[],I=[];y.programId===co.toBase58()&&I.push(su(t,new Z(y.address)).publicKey),b.programId===co.toBase58()&&I.push(su(t,new Z(b.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(I)).forEach((x,K)=>{x&&h.push(I[K])});let k=await Ke.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:b,ammConfigId:s.id,initialPriceX64:P,forerunCreate:!l&&u,extendMintAccount:h});return f.addInstruction(k),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:U(_({},k.address),{observationId:k.address.observationId.toBase58(),exBitmapAccount:k.address.exBitmapAccount.toBase58(),programId:t.toString(),id:k.address.poolId.toString(),mintA:y,mintB:b,openTime:"0",vault:{A:k.address.mintAVault.toString(),B:k.address.mintBVault.toString()},rewardInfos:[],config:{id: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:_({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:k.address.poolId.toString(),mintA:y,mintB:b,feeRate:s.tradeFeeRate,openTime:"0",programId:t.toString(),price:g.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:[]},burnPercent:0},Xl),forerunCreate:u}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:d="create",getEphemeralSigners:p,computeBudgetConfig:f,txTipConfig:y,txVersion:b,feePayer:g}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let P=this.createTxBuilder(g),h=null,I=null,T=n.useSOLBalance&&e.mintA.address===$.toString(),k=n.useSOLBalance&&e.mintB.address===$.toString(),[S,x]=s==="MintA"?[a,c]:[c,a],{account:K,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:T||S.isZero()?{payer:this.scope.ownerPubKey,amount:S}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:l,checkCreateATAOwner:m});K&&(h=K),P.addInstruction(B||{});let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:l,checkCreateATAOwner:m});C&&(I=C),P.addInstruction(L||{}),(!h||!I)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:h==null?void 0:h.toBase58(),ownerTokenAccountB:I==null?void 0:I.toBase58()});let N=t||await this.getClmmPoolKeys(e.id),O=await Ke.openPositionFromBaseInstructions({poolInfo:e,poolKeys:N,ownerInfo:U(_({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:I}),tickLower:o,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return P.addInstruction(O),P.addCustomComputeBudget(f),P.addTipInstruction(y),P.versionBuild({txVersion:b,extInfo:_({},O.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:r,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,txTipConfig:f,getEphemeralSigners:y,nft2022:b,feePayer:g}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let P=this.createTxBuilder(g),h=null,I=null,T=n.useSOLBalance&&e.mintA.address===$.toBase58(),k=n.useSOLBalance&&e.mintB.address===$.toBase58(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:T||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:u,checkCreateATAOwner:l});S&&(h=S),P.addInstruction(x||{});let{account:K,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:u,checkCreateATAOwner:l});K&&(I=K),P.addInstruction(B||{}),(h===void 0||I===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),L=await Ke.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:I},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:r,withMetadata:m,getEphemeralSigners:y,nft2022:b});return P.addInstruction(L),P.addCustomComputeBudget(p),P.addTipInstruction(f),P.versionBuild({txVersion:d,extInfo:{address:L.address}})}async increasePositionFromLiquidity(e){var B;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:r,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e,y=this.createTxBuilder(f),b,g,P=c.useSOLBalance&&t.mintA.address===$.toString(),h=c.useSOLBalance&&t.mintB.address===$.toString(),{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Z(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:P||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!P,associatedOnly:P?!1:u,checkCreateATAOwner:l});I&&(b=I),y.addInstruction(T||{});let{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:u,checkCreateATAOwner:l});k&&(g=k),y.addInstruction(S||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=n!=null?n:await this.getClmmPoolKeys(t.id),K=Ke.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:x,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},liquidity:a,amountMaxA:r,amountMaxB:s,nft2022:(B=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:B.owner.equals(co)});return y.addInstruction(K),y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:K.address}})}async increasePositionFromBase(e){var K;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:r,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=this.createTxBuilder(p),y,b,g=a.useSOLBalance&&t.mintA.address===$.toString(),P=a.useSOLBalance&&t.mintB.address===$.toString(),{account:h,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Z(t.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:g||(o==="MintA"?r:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:s}:void 0,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});h&&(y=h),f.addInstruction(I||{});let{account:T,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||(o==="MintA"?s:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:r}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});T&&(b=T),f.addInstruction(k||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=await this.getClmmPoolKeys(t.id),x=Ke.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:S,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:o,baseAmount:r,otherAmountMax:s,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(co)});return f.addInstruction(x),f.addCustomComputeBudget(l),f.addTipInstruction(m),f.versionBuild({txVersion:d,extInfo:{address:x.address}})}async decreaseLiquidity(e){var N;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:r,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let y=this.createTxBuilder(f),b=r.useSOLBalance&&t.mintA.address===$.toString(),g=r.useSOLBalance&&t.mintB.address===$.toString(),P,h,{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Z(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});P=I,T&&y.addInstruction(T);let{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Z(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});h=k,S&&y.addInstruction(S);let x=[];for(let O of t.rewardDefaultInfos){let R=r.useSOLBalance&&O.mint.address===$.toString(),v;if(O.mint.address===t.mintA.address)v=P;else if(O.mint.address===t.mintB.address)v=h;else{let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(O.mint.programId),mint:new Z(O.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:l});v=Y,Q&&y.addInstruction(Q)}x.push(v)}!P&&!h&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let K=n!=null?n:await this.getClmmPoolKeys(t.id),B=(N=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:N.owner.equals(co),C=await Ke.decreaseLiquidityInstructions({poolInfo:t,poolKeys:K,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:h,rewardAccounts:x},liquidity:c,amountMinA:s,amountMinB:a,nft2022:B});y.addInstruction({instructions:C.instructions,instructionTypes:[z.ClmmDecreasePosition]});let L=_({},C.address);if(r.closePosition){let O=await Ke.closePositionInstructions({poolInfo:t,poolKeys:K,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:B});y.addInstruction({endInstructions:O.instructions,endInstructionTypes:O.instructionTypes}),L=_(_({},L),O.address)}return y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:L}})}async lockPosition(e){var f;let{programId:t=qo,authProgramId:n=ki,poolProgramId:o=Jn,ownerPosition:r,payer:s,computeBudgetConfig:a,txTipConfig:c,txVersion:u,getEphemeralSigners:l,feePayer:m}=e,d=this.createTxBuilder(m),p=await Ke.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:r.nftMint,getEphemeralSigners:l,nft2022:(f=await this.scope.connection.getAccountInfo(r.nftMint))==null?void 0:f.owner.equals(co)});return d.addInstruction(p),d.addCustomComputeBudget(a),d.addTipInstruction(c),d.versionBuild({txVersion:u,extInfo:p.address})}async harvestLockPosition(e){let{programId:t=qo,authProgramId:n=ki,clmmProgram:o=Jn,poolKeys:r,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=r||await this.getClmmPoolKeys(s.poolId.toString()),y=this.createTxBuilder(p),b=await this.scope.connection.getAccountInfo(s.positionId);b||this.logger.logWithError("position not found",s.positionId);let g=ei.decode(b.data),P=a.useSOLBalance&&f.mintA.address===$.toString(),h=a.useSOLBalance&&f.mintB.address===$.toString(),I,T,{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new Z(f.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});I=k,S&&y.addInstruction(S);let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new Z(f.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,associatedOnly:h?!1:c,checkCreateATAOwner:u});T=x,K&&y.addInstruction(K);let B={},C=[];for(let le of f.rewardInfos){let Ae=a.useSOLBalance&&le.mint.address===$.toString(),fe=B[le.mint.address];if(!fe){let{account:oe,instructionParams:ne}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(le.mint.programId),mint:new Z(le.mint.address),notUseTokenAccount:Ae,owner:this.scope.ownerPubKey,skipCloseAccount:!Ae,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:Ae?!1:c});fe=oe,ne&&y.addInstruction(ne)}B[le.mint.address]=fe,C.push(fe)}let L=Jo(t,s.lockNftMint).publicKey,N=J(this.scope.ownerPubKey,s.lockNftMint,tr).publicKey,O=ee.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),R=ee.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:v}=Ie(new Z(f.programId),s.poolId,O),{publicKey:Y}=Ie(new Z(f.programId),s.poolId,R),{publicKey:Q}=wn(new Z(f.programId),s.poolId,g.tickLower,g.tickUpper),de=[];for(let le=0;le<f.rewardInfos.length;le++)de.push({poolRewardVault:new Z(f.rewardInfos[le].vault),ownerRewardVault:C[le],rewardMint:new Z(f.rewardInfos[le].mint.address)});let ce=await Ke.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:L,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:N,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:Q,vaultA:new Z(f.vault.A),vaultB:new Z(f.vault.B),tickArrayLower:v,tickArrayUpper:Y,userVaultA:I,userVaultB:T,mintA:new Z(f.mintA.address),mintB:new Z(f.mintB.address),rewardAccounts:de,exTickArrayBitmap:ot(o,s.poolId).publicKey});return y.addInstruction({instructions:[ce],instructionTypes:[z.ClmmHarvestLockPosition]}),y.addCustomComputeBudget(l),y.addTipInstruction(m),y.versionBuild({txVersion:d})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o,computeBudgetConfig:r,txTipConfig:s,feePayer:a}){var m;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let c=this.createTxBuilder(a),u=t!=null?t:await this.getClmmPoolKeys(e.id),l=Ke.closePositionInstructions({poolInfo:e,poolKeys:u,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(m=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:m.owner.equals(co)});return c.addCustomComputeBudget(r),c.addTipInstruction(s),c.addInstruction(l).versionBuild({txVersion:o,extInfo:{address:l.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a,feePayer:c}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(c),l=t.useSOLBalance&&n.mint.address.toString()===$.toString(),m=n.perSecond.mul(n.endTime-n.openTime),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(n.mint.address),mint:new Z(n.mint.address),notUseTokenAccount:!!l,skipCloseAccount:!l,owner:this.scope.ownerPubKey,createInfo:l?{payer:t.feePayer||this.scope.ownerPubKey,amount:new Vt(new M(m.toFixed(0)).gte(m)?m.toFixed(0):m.add(1).toFixed(0))}:void 0,associatedOnly:l?!1:o,checkCreateATAOwner:r});p&&u.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Ke.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{programId:new Z(n.mint.programId),mint:new Z(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:be.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){for(let p of o)p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let m=this.createTxBuilder(l),d={};for(let p of o){let f=n.useSOLBalance&&p.mint.address===$.toString(),y=p.perSecond.mul(p.endTime-p.openTime),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(p.mint.programId),mint:new Z(p.mint.address),notUseTokenAccount:!!f,skipCloseAccount:!f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new Vt(new M(y.toFixed(0)).gte(y)?y.toFixed(0):y.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:r,checkCreateATAOwner:s});g&&m.addInstruction(g),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let P=t!=null?t:await this.getClmmPoolKeys(e.id),h=Ke.initRewardInstructions({poolInfo:e,poolKeys:P,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{programId:new Z(p.mint.programId),mint:new Z(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:be.decimalToX64(p.perSecond)}});d=_(_({},d),h.address),m.addInstruction(h)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txTipConfig:a,txVersion:c,feePayer:u}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let l=this.createTxBuilder(u),m=t.useSOLBalance&&n.mint.equals($),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new Vt(new M(n.perSecond.mul(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.mul(n.endTime-n.openTime))?n.perSecond.mul(n.endTime-n.openTime).toFixed(0):n.perSecond.mul(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:m?!1:o,checkCreateATAOwner:r});p&&l.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Ke.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:be.decimalToX64(n.perSecond)}});return l.addInstruction(y),l.addCustomComputeBudget(s),l.addTipInstruction(a),l.versionBuild({txVersion:c,extInfo:{address:y.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){let m=this.createTxBuilder(l),d={};for(let p of o){p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let f=n.useSOLBalance&&p.mint.address===$.toString(),{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(p.mint.programId),mint:new Z(p.mint.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new Vt(new M(p.perSecond.mul(p.endTime-p.openTime).toFixed(0)).gte(p.perSecond.mul(p.endTime-p.openTime))?p.perSecond.mul(p.endTime-p.openTime).toFixed(0):p.perSecond.mul(p.endTime-p.openTime).add(1).toFixed(0))}:void 0,associatedOnly:f?!1:r,checkCreateATAOwner:s});b&&m.addInstruction(b),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let g=t!=null?t:await this.getClmmPoolKeys(e.id),P=Ke.setRewardInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{mint:new Z(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:be.decimalToX64(p.perSecond)}});m.addInstruction(P),d=_(_({},d),P.address)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txTipConfig:a,txVersion:c,feePayer:u}){let l=e.rewardDefaultInfos.find(g=>g.mint.address===n.toString());l||this.logAndCreateError("reward mint error","not found reward mint",n);let m=this.createTxBuilder(u),d=t.useSOLBalance&&n.equals($),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(l.mint.programId),mint:n,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:o,checkCreateATAOwner:r});f&&m.addInstruction(f),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),b=Ke.collectRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:n});return m.addInstruction(b),m.addCustomComputeBudget(s),m.addTipInstruction(a),m.versionBuild({txVersion:c,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l={};for(let m of n){let d=e.rewardDefaultInfos.find(P=>P.mint.address===m.toString());if(!d){this.logAndCreateError("reward mint error","not found reward mint",m);continue}let p=t.useSOLBalance&&m.equals($),{account:f,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(d.mint.programId),mint:m,notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:r});f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),y&&u.addInstruction(y);let b=await this.getClmmPoolKeys(e.id),g=Ke.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:m});u.addInstruction(g),l=_(_({},l),g.address)}return u.addCustomComputeBudget(s),u.addTipInstruction(a),u.build({address:l})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintA.address,P=c.useSOLBalance&&e.mintA.address===$.toBase58(),h=c.useSOLBalance&&e.mintB.address===$.toBase58(),I;!s||s.equals(new M(0))?I=g?Ft.add(new Vt(1)):_t.sub(new Vt(1)):I=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let T;if(!T){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Z(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});T=x,K&&b.addInstruction(K)}let k;if(!k){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Z(e.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,skipCloseAccount:!h,createInfo:h||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:h?!1:l,checkCreateATAOwner:m});k=x,K&&b.addInstruction(K)}(!T||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:T,ownerTokenAccountB:k,mintAUseSOLBalance:P,mintBUseSOLBalance:h,associatedOnly:l});let S=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Ke.makeSwapBaseInInstructions({poolInfo:e,poolKeys:S,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:T,tokenAccountB:k},inputMint:new Z(n),amountIn:o,amountOutMin:r,sqrtPriceLimitX64:I,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintB.address,P=c.useSOLBalance&&e.mintA.address===$.toBase58(),h=c.useSOLBalance&&e.mintB.address===$.toBase58(),I;!s||s.equals(new M(0))?I=n.toString()===e.mintB.address?Ft.add(new Vt(1)):_t.sub(new Vt(1)):I=ue.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let T;if(!T){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Z(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?r:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});T=x,K&&b.addInstruction(K)}let k;if(!k){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Z(e.mintB.address),notUseTokenAccount:h,owner:this.scope.ownerPubKey,skipCloseAccount:!h,createInfo:h||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:r}:void 0,associatedOnly:h?!1:l,checkCreateATAOwner:m});k=x,K&&b.addInstruction(K)}(!T||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:T,ownerTokenAccountB:k,mintAUseSOLBalance:P,mintBUseSOLBalance:h,associatedOnly:l});let S=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Ke.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:S,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:T,tokenAccountB:k},outputMint:new Z(n),amountOut:o,amountInMax:r,sqrtPriceLimitX64:I,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:r=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u,feePayer:l,lockProgram:m=qo,lockAuth:d=ki,clmmProgram:p=Jn}){var h,I;let f={};for(let T of this.scope.account.tokenAccountRawInfos)r?J(this.scope.ownerPubKey,T.accountInfo.mint,a).publicKey.equals(T.pubkey)&&(f[T.accountInfo.mint.toString()]=T.pubkey):f[T.accountInfo.mint.toString()]=T.pubkey;let y=Object.values(t).flat().map(T=>T.nftMint),b=await We(this.scope.connection,y.map(T=>({pubkey:T}))),g={};b.forEach(T=>{var k,S;g[T.pubkey.toBase58()]=(S=(k=T==null?void 0:T.accountInfo)==null?void 0:k.owner)!=null?S:null});let P=this.createTxBuilder(l);for(let T of Object.values(e)){if(t[T.id]===void 0||!t[T.id].find(O=>!O.liquidity.isZero()||O.rewardInfos.find(R=>!R.rewardAmountOwed.isZero())))continue;let k=T,S=o.useSOLBalance&&k.mintA.address===$.toString(),x=o.useSOLBalance&&k.mintB.address===$.toString(),K=f[k.mintA.address];if(!K)if(S){let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintA.programId,mint:new Z(k.mintA.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:r,checkCreateATAOwner:s});K=O,R&&P.addInstruction(R)}else{let O=new Z(k.mintA.address);K=this.scope.account.getAssociatedTokenAccount(O,new Z(k.mintA.programId)),P.addInstruction({instructions:[Km(this.scope.ownerPubKey,K,this.scope.ownerPubKey,O,new Z(k.mintA.programId))]})}let B=f[k.mintB.address];if(!B)if(x){let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintB.programId,mint:new Z(k.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:r,checkCreateATAOwner:s});B=O,R&&P.addInstruction(R)}else{let O=new Z(k.mintB.address);B=this.scope.account.getAssociatedTokenAccount(O,new Z(k.mintB.programId)),P.addInstruction({instructions:[Km(this.scope.ownerPubKey,B,this.scope.ownerPubKey,O,new Z(k.mintB.programId))]})}f[k.mintA.address]=K,f[k.mintB.address]=B;let C=[];for(let O of k.rewardDefaultInfos){let R=o.useSOLBalance&&O.mint.address===$.toString(),v=f[O.mint.address];if(!v){let{account:Y,instructionParams:Q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Z(O.mint.programId),mint:new Z(O.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,skipCloseAccount:!R,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:R?!1:r});v=Y,Q&&P.addInstruction(Q)}f[O.mint.address]=v,C.push(v)}let L=await this.getClmmPoolKeys(k.id),N=[];for(let O=0;O<L.rewardInfos.length;O++)N.push({poolRewardVault:new Z(L.rewardInfos[O].vault),ownerRewardVault:C[O],rewardMint:new Z(L.rewardInfos[O].mint.address)});for(let O of t[T.id]){let R=(h=n==null?void 0:n[T.id])==null?void 0:h[O.nftMint.toBase58()];if(R){let v=J(this.scope.ownerPubKey,R.lockNftMint,tr).publicKey,Y=ee.getTickArrayStartIndexByTick(O.tickLower,L.config.tickSpacing),Q=ee.getTickArrayStartIndexByTick(O.tickUpper,L.config.tickSpacing),{publicKey:de}=Ie(new Z(L.programId),R.poolId,Y),{publicKey:ce}=Ie(new Z(L.programId),R.poolId,Q),{publicKey:le}=wn(new Z(L.programId),R.poolId,O.tickLower,O.tickUpper),Ae=Jo(m,R.lockNftMint).publicKey,fe=Ke.harvestLockPositionInstructionV2({programId:m,auth:d,lockPositionId:Ae,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:R.lockNftMint,lockNftAccount:v,positionNftAccount:R.nftAccount,positionId:R.positionId,poolId:R.poolId,protocolPosition:le,vaultA:new Z(L.vault.A),vaultB:new Z(L.vault.B),tickArrayLower:de,tickArrayUpper:ce,userVaultA:K,userVaultB:B,mintA:new Z(L.mintA.address),mintB:new Z(L.mintB.address),rewardAccounts:N,exTickArrayBitmap:ot(p,R.poolId).publicKey});P.addInstruction({instructions:[fe],instructionTypes:[z.ClmmHarvestLockPosition],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]})}else{let v=Ke.decreaseLiquidityInstructions({poolInfo:k,poolKeys:L,ownerPosition:O,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:B,rewardAccounts:C},liquidity:new Vt(0),amountMinA:new Vt(0),amountMinB:new Vt(0),nft2022:(I=g[O.nftMint.toBase58()])==null?void 0:I.equals(co)});P.addInstruction(v)}}}return c===0?P.sizeCheckBuildV0({computeBudgetConfig:u}):P.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Gi(e).publicKey);return t?im.decode(t.data).whitelistMints.filter(o=>!o.equals(Z.default)):[]}async getOwnerPositionInfo({programId:e=Jn}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new Vt(1))).map(s=>Et(new Z(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),r=[];return o.forEach(s=>{if(!s)return;let a=ei.decode(s.data);r.push(a)}),r}async getOwnerLockedPositionInfo({programId:e=qo}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new Vt(1))).map(c=>Jo(new Z(e),c.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),r=[];o.forEach(c=>{if(!c)return;let u=rm.decode(c.data);r.push(u)});let s=await this.scope.connection.getMultipleAccountsInfo(r.map(c=>c.positionId)),a=[];return s.forEach(c=>{if(!c)return;let u=ei.decode(c.data);a.push(u)}),r.map((c,u)=>({position:a[u],lockInfo:c}))}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await We(this.scope.connection,e.map(r=>({pubkey:new Z(r)})),t),o={};for(let r=0;r<e.length;r++){let s=n[r];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[r]));let a=xo.decode(s.accountInfo.data),c=ue.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[r])]=U(_({},a),{currentPrice:c,programId:s.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),o=await We(this.scope.connection,Array.from(n).map(c=>({pubkey:new Z(c)}))),r={};o.forEach(c=>{!c.accountInfo||(r[c.pubkey.toBase58()]=nm.decode(c.accountInfo.data))});let s=await ve.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,f;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:Kt({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||tr.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?ao((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:Kt({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||tr.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?ao((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[c].currentPrice,config:U(_({},r[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await ve.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await _o({connection:this.scope.connection,mints:Array.from(n).map(m=>new Z(m))}),{computeClmmPoolInfo:r,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await We(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=em(r[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Sm.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Sm.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=U(_({},r[e]),{exBitmapAccount:r[e].exBitmapAccount.toBase58(),observationId:r[e].observationId.toBase58(),id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:c.config,rewardInfos:r[e].rewardInfos.filter(m=>!m.tokenVault.equals(Z.default)).map(m=>({mint:Kt({address:m.tokenMint.toBase58(),programId:tr.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:r[e],tickData:s}}};import{PublicKey as G}from"@solana/web3.js";import{AccountLayout as _b,NATIVE_MINT as ri,TOKEN_PROGRAM_ID as Dt,createAssociatedTokenAccountIdempotentInstruction as si}from"@solana/spl-token";import Rm from"bn.js";import bs from"bn.js";function Bu(i,e){if(e.isZero())throw Error("divisor is zero");return i.mod(e)}function wb(i,e){if(e.isZero())throw Error("rhs is zero");let t=i.div(e);return Bu(i,e).gt(or)&&(t=t.add(new bs(1))),[t,e]}var or=new bs(0),ir=class{static swapBaseInputWithoutFees(e,t,n){let o=e.mul(n),r=t.add(e);return o.div(r)}static swapBaseOutputWithoutFees(e,t,n){let o=t.mul(e),r=n.sub(e),[s]=wb(o,r);return s}static lpTokensToTradingTokens(e,t,n,o,r){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(r===0)return{tokenAmount0:s,tokenAmount1:a};if(r===1)return Bu(e.mul(n),t).gt(or)&&s.gt(or)&&(s=s.add(new bs(1))),Bu(e.mul(o),t).gt(or)&&a.gt(or)&&(a=a.add(new bs(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import kb from"bn.js";var Yt=class{static tradingFee(e,t){return gi(e,t,Gt)}static protocolFee(e,t){return Fr(e,t,Gt)}static fundFee(e,t){return Fr(e,t,Gt)}static creatorFee(e,t){return gi(e,t,Gt)}static splitCreatorFee(e,t,n){return Fr(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(Gt),o=Gt.sub(t);return n.add(o).sub(new kb(1)).div(o)}};var Cm=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Cm||{}),hb=(t=>(t[t.ZeroForOne=0]="ZeroForOne",t[t.OneForZero=1]="OneForZero",t))(hb||{}),Tb=(t=>(t[t.OneForZero=0]="OneForZero",t[t.ZeroForOne=1]="ZeroForOne",t))(Tb||{}),rr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swapBaseInput(e,t,n,o,r,s,a,c){let u=new Rm(0),l=Yt.tradingFee(e,o),m;c?(u=Yt.creatorFee(e,r),m=e.sub(l).sub(u)):m=e.sub(l);let d=Yt.protocolFee(l,s),p=Yt.protocolFee(l,a),f=ir.swapBaseInputWithoutFees(m,t,n),y;return c?y=f:(u=Yt.creatorFee(f,r),y=f.sub(u)),{newInputVaultAmount:t.add(m),newOutputVaultAmount:n.sub(f),inputAmount:e,outputAmount:y,tradeFee:l,protocolFee:d,fundFee:p,creatorFee:u}}static swapBaseOutput(e,t,n,o,r,s,a,c){let u,l=new Rm(0),m;if(c)m=e;else{let b=Yt.calculatePreFeeAmount(e,r);l=b.sub(e),m=b}let d=ir.swapBaseOutputWithoutFees(m,t,n),p;if(c){let b=Yt.calculatePreFeeAmount(d,o.add(r)),g=b.sub(d);l=Yt.splitCreatorFee(g,o,r),u=g.sub(l),p=b}else{let b=Yt.calculatePreFeeAmount(d,o);u=b.sub(d),p=b}let f=Yt.protocolFee(u,s),y=Yt.fundFee(u,a);return{newInputVaultAmount:t.add(d),newOutputVaultAmount:e.sub(m),inputAmount:p,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import Ze from"bn.js";import{PublicKey as ur,TransactionInstruction as qn,Keypair as Mb,SystemProgram as Ku}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as gs,TOKEN_2022_PROGRAM_ID as Cu,TOKEN_PROGRAM_ID as Wn}from"@solana/spl-token";var Ib=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Bb=Buffer.from("amm_config","utf8"),xb=Buffer.from("pool","utf8"),Sb=Buffer.from("pool_lp_mint","utf8"),Kb=Buffer.from("pool_vault","utf8"),Cb=Buffer.from("observation","utf8"),Rb=Buffer.from("permission","utf8");function ii(i){return ie([Ib],i)}function TC(i,e){return ie([Bb,Nb(e)],i)}function xu(i,e,t,n){return ie([xb,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function Lb(i,e){return ie([Sb,e.toBuffer()],i)}function Lm(i,e,t){return ie([Kb,e.toBuffer(),t.toBuffer()],i)}function sr(i,e){return ie([Cb,e.toBuffer()],i)}function Nb(i){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,i,!1),new Uint8Array(e)}function Su({poolId:i,programId:e,configId:t,mintA:n,mintB:o}){let r=ii(e).publicKey,s=i||xu(e,t,n,o).publicKey,a=Lb(e,s).publicKey,c=Lm(e,s,n).publicKey,u=Lm(e,s,o).publicKey,l=sr(e,s).publicKey;return{poolId:s,configId:t,authority:r,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Ob=Buffer.from("locked_liquidity","utf8");function ar(i,e){return ie([Ob,e.toBuffer()],i)}function Nm(i,e){return ie([Rb,e.toBuffer()],i)}var vb=ke("Raydium_cpmm"),Un={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133],createPermissionPda:Buffer.from([135,136,2,216,137,169,181,202]),closePermissionPda:Buffer.from([156,84,32,118,69,135,70,123]),initializeWithPermission:Buffer.from([63,55,254,65,49,178,89,121]),collectCreatorFee:Buffer.from([20,22,86,123,198,28,219,132])};function Om(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([A("amountMaxA"),A("amountMaxB"),A("openTime")]),T=xu(i,t,r,s).publicKey,k=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!o.equals(T),isWritable:!0},{pubkey:r,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:Wn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:Mr,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1}],S=Buffer.alloc(I.span);return I.encode({amountMaxA:g,amountMaxB:P,openTime:h},S),new qn({keys:k,programId:i,data:Buffer.from([...Un.initialize,...S])})}function Mm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f){let y=E([A("lpAmount"),A("amountMaxA"),A("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Wn,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(y.span);return vb.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new qn({keys:b,programId:i,data:Buffer.from([...Un.deposit,...g])})}function vm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f){let y=E([A("lpAmount"),A("amountMinA"),A("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Wn,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:In,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new qn({keys:b,programId:i,data:Buffer.from([...Un.withdraw,...g])})}function Ps(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y){let b=E([A("amountIn"),A("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,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}],P=Buffer.alloc(b.span);return b.encode({amountIn:f,amounOutMin:y},P),new qn({keys:g,programId:i,data:Buffer.from([...Un.swapBaseInput,...P])})}function Fm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y){let b=E([A("amountInMax"),A("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,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}],P=Buffer.alloc(b.span);return b.encode({amountInMax:f,amountOut:y},P),new qn({keys:g,programId:i,data:Buffer.from([...Un.swapBaseOutput,...P])})}async function _m(i){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:o,getEphemeralSigners:r}=i,s=[],[a,c]=[new ur(t.id),new ur(t.lpMint.address)],u;if(r)u=new ur((await r(1))[0]);else{let g=Mb.generate();s.push(g),u=g.publicKey}let{publicKey:l}=J(o,u,Wn),{publicKey:m}=_n(u),{publicKey:d}=ar(i.lockProgram,u),{publicKey:p}=J(e.wallet,c,Wn),{publicKey:f}=J(i.lockAuthProgram,c,Wn),y=Fb({programId:i.lockProgram,auth:i.lockAuthProgram,payer:e.feePayer,liquidityOwner:e.wallet,nftOwner:o,nftMint:u,nftAccount:l,poolId:a,lockPda:d,mintLp:c,userLpVault:p,lockLpVault:f,poolVaultA:new ur(n.vault.A),poolVaultB:new ur(n.vault.B),metadataAccount:m,lpAmount:i.lpAmount,withMetadata:(b=i.withMetadata)!=null?b:!0});return{address:{nftMint:u,nftAccount:l,metadataAccount:m,lockPda:d,userLpVault:p,lockLpVault:f},instructions:[y],signers:s,instructionTypes:[z.CpmmLockLp],lookupTableAddress:[]}}function Fb({programId:i,auth:e,payer:t,liquidityOwner:n,nftOwner:o,nftMint:r,nftAccount:s,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:f,lpAmount:y,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{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:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Ku.programId,isSigner:!1,isWritable:!1},{pubkey:Wn,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1}],P=E([A("lpAmount"),Ye("withMetadata")]),h=Buffer.alloc(P.span);P.encode({lpAmount:y,withMetadata:b},h);let I=Buffer.from([...Un.lockCpLiquidity,...h]);return new qn({keys:g,programId:i,data:I})}function Ru({programId:i,nftOwner:e,auth:t,nftAccount:n,lockPda:o,poolId:r,mintLp:s,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:f,cpmmProgram:y,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:y!=null?y:to,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:ma,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Wn,isSigner:!1,isWritable:!1},{pubkey:Cu,isSigner:!1,isWritable:!1},{pubkey:In,isSigner:!1,isWritable:!1}],P=E([A("lpFeeAmount")]),h=Buffer.alloc(P.span);P.encode({lpFeeAmount:f},h);let I=Buffer.from([...Un.collectCpFee,...h]);return new qn({keys:g,programId:i,data:I})}function Lu(i,e,t,n,o,r,s,a,c,u,l,m,d){let p=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:Ku.programId,isSigner:!1,isWritable:!1}];return new qn({keys:p,programId:i,data:Un.collectCreatorFee})}function Em(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I,T,k){let S=E([A("amountA"),A("amountB"),A("openTime"),D("feeOn")]),x=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:P,isSigner:!1,isWritable:!0},{pubkey:Wn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:gs,isSigner:!1,isWritable:!1},{pubkey:Ku.programId,isSigner:!1,isWritable:!1}],K=Buffer.alloc(S.span);return S.encode({amountA:h,amountB:I,openTime:T,feeOn:k},K),new qn({keys:x,programId:i,data:Buffer.from([...Un.initializeWithPermission,...K])})}var Vm=E([Re(8),D("bump"),Ye("disableCreatePool"),en("index"),A("tradeFeeRate"),A("protocolFeeRate"),A("fundFeeRate"),A("createPoolFee"),F("protocolOwner"),F("fundOwner"),A("creatorFeeRate"),j(A(),15)]),As=E([Re(8),F("configId"),F("poolCreator"),F("vaultA"),F("vaultB"),F("mintLp"),F("mintA"),F("mintB"),F("mintProgramA"),F("mintProgramB"),F("observationId"),D("bump"),D("status"),D("lpDecimals"),D("mintDecimalA"),D("mintDecimalB"),A("lpAmount"),A("protocolFeesMintA"),A("protocolFeesMintB"),A("fundFeesMintA"),A("fundFeesMintB"),A("openTime"),A("epoch"),D("feeOn"),Ye("enableCreatorFee"),j(D(),6),A("creatorFeesMintA"),A("creatorFeesMintB"),j(A(),28)]),FC=E([Re(8),F("configId"),j(A(),30)]);var Dm=(n=>(n[n.BothToken=0]="BothToken",n[n.OnlyTokenA=1]="OnlyTokenA",n[n.OnlyTokenB=2]="OnlyTokenB",n))(Dm||{});var cr=class extends Xe{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 G(m)}))),o={},r=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=As.decode(d.accountInfo.data);o[String(e[m])]=U(_({},p),{programId:d.accountInfo.owner}),r.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...r],d=await We(this.scope.connection,m.map(p=>({pubkey:new G(p)})));for(let p=0;p<m.length;p++){let f=d[p].accountInfo;if(f===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Vm.decode(f.data)}}let c={},u=await We(this.scope.connection,s.map(m=>({pubkey:new G(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 Ze(_b.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA).sub(d.creatorFeesMintA),f=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB).sub(d.creatorFeesMintB);l[m]=U(_({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new M(f.toString()).div(new M(10).pow(d.mintDecimalB)).div(new M(p.toString()).div(new M(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var c,u,l,m;let r=e[o],[s,a]=[r.mintA.toBase58(),r.mintB.toBase58()];return U(_({},n),{[o]:U(_({},r),{id:new G(o),configInfo:r.configInfo,version:7,authority:ii(r.programId).publicKey,mintA:Kt({address:s,decimals:r.mintDecimalA,programId:r.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?ao((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:Kt({address:a,decimals:r.mintDecimalB,programId:r.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?ao((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await _o({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=Kt({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?ao(n[t.mintA.toBase58()].feeConfig):void 0}}),r=Kt({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?ao(n[t.mintB.toBase58()].feeConfig):void 0}}),s=Kt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Dt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:r,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new M(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new M(t.vaultBAmount.toString()).div(10**r.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:r,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:ii(t.programId).publicKey.toBase58(),mintLp:s,config:a,observationId:sr(t.programId,new G(e)).publicKey.toBase58()},rpcData:t}}async createPool(f){var y=f,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=y,p=Qe(y,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer"]);var v,Y,Q;let b=r.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),g=new Ze(new G(p.mintA.address).toBuffer()).lte(new Ze(new G(p.mintB.address).toBuffer())),[P,h]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[I,T]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],k=r.useSOLBalance&&P.address===ri.toBase58(),S=r.useSOLBalance&&h.address===ri.toBase58(),[x,K]=[new G(P.address),new G(h.address)],B=this.createTxBuilder(d),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:x,tokenProgram:P.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:b,amount:I}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:s,checkCreateATAOwner:a});B.addInstruction(L||{});let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:new G(h.address),tokenProgram:h.programId,owner:this.scope.ownerPubKey,createInfo:S?{payer:b,amount:T}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:s,checkCreateATAOwner:a});if(B.addInstruction(O||{}),C===void 0||N===void 0)throw Error("you don't has some token account");let R=Su({poolId:e,programId:t,configId:new G(u.id),mintA:x,mintB:K});return B.addInstruction({instructions:[Om(t,this.scope.ownerPubKey,new G(u.id),R.authority,R.poolId,x,K,R.lpMint,C,N,J(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new G((Y=P.programId)!=null?Y:Dt),new G((Q=h.programId)!=null?Q:Dt),R.observationId,I,T,o)],instructionTypes:[z.CpmmCreatePool]}),B.addCustomComputeBudget(l),B.addTipInstruction(m),B.versionBuild({txVersion:c,extInfo:{address:U(_({},R),{mintA:P,mintB:h,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:r,slippage:s,computeResult:a,computeBudgetConfig:c,txTipConfig:u,config:l,txVersion:m,feePayer:d}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:p}=this.scope,{bypassAssociatedCheck:f,checkCreateATAOwner:y}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:P,anotherAmount:h}=a||this.computePairAmount({poolInfo:U(_({},t),{lpAmount:new M(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new et(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(o.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),I=h.amount,T=t.mintA.address===ri.toString(),k=t.mintB.address===ri.toString(),S=this.createTxBuilder(d),[x,K]=[new G(t.mintA.address),new G(t.mintB.address)],{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:T||(r?o:I).isZero()?{payer:this.scope.ownerPubKey,amount:r?o:I}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!1,checkCreateATAOwner:y});S.addInstruction(C||{});let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(r?I:o).isZero()?{payer:this.scope.ownerPubKey,amount:r?I:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:y});S.addInstruction(N||{}),!B&&!L&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let O=await p.getCreatedTokenAccount({mint:new G(t.lpMint.address)}),de=await p.handleTokenAccount({side:"out",amount:0,mint:new G(t.lpMint.address),tokenAccount:O,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:R}=de,v=Qe(de,["tokenAccount"]);S.addInstruction(v);let Y=n!=null?n:await this.getCpmmPoolKeys(t.id),Q=new et(new Ze(1)).sub(s);return S.addInstruction({instructions:[Mm(new G(t.programId),this.scope.ownerPubKey,new G(Y.authority),new G(t.id),R,B,L,new G(Y.vault.A),new G(Y.vault.B),x,K,new G(t.lpMint.address),a?a==null?void 0:a.liquidity:Q.mul(g).quotient,r?P.amount:I,r?I:P.amount)],instructionTypes:[z.CpmmAddLiquidity],lookupTableAddress:Y.lookupTableAccount?[Y.lookupTableAccount]:[]}),S.addCustomComputeBudget(c),S.addTipInstruction(u),S.versionBuild({txVersion:m})}async withdrawLiquidity(e){var v,Y;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:r,computeBudgetConfig:s,txTipConfig:a,txVersion:c,feePayer:u,closeWsol:l=!0}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let m=new et(new Ze(1)).sub(r),d=await this.getRpcPoolInfo(t.id),[p,f]=[m.mul(o.mul(d.baseReserve).div(d.lpAmount)).quotient,m.mul(o.mul(d.quoteReserve).div(d.lpAmount)).quotient],y=await this.scope.fetchEpochInfo(),[b,g]=[Ne(p,t.mintA.extensions.feeConfig,y,!1),Ne(f,t.mintB.extensions.feeConfig,y,!1)],{account:P}=this.scope,h=this.createTxBuilder(u),[I,T]=[new G(t.mintA.address),new G(t.mintB.address)],k=I.equals($),S=T.equals($),x,K,{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(k&&l),associatedOnly:!k,checkCreateATAOwner:!1});x=B,C&&h.addInstruction(C);let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(S&&l),associatedOnly:!S,checkCreateATAOwner:!1});K=L,N&&h.addInstruction(N),(!x||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",P.tokenAccounts);let O=await P.getCreatedTokenAccount({mint:new G(t.lpMint.address)});O||this.logAndCreateError("cannot found lp token account","tokenAccounts",P.tokenAccounts);let R=n!=null?n:await this.getCpmmPoolKeys(t.id);return h.addInstruction({instructions:[vm(new G(t.programId),this.scope.ownerPubKey,new G(R.authority),new G(t.id),O,x,K,new G(R.vault.A),new G(R.vault.B),I,T,new G(t.lpMint.address),o,p.sub((v=b.fee)!=null?v:new Ze(0)),f.sub((Y=g.fee)!=null?Y:new Ze(0)))],instructionTypes:[z.CpmmWithdrawLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),h.addCustomComputeBudget(s),h.addTipInstruction(a),h.versionBuild({txVersion:c})}async swap(e){var C,L,N,O,R,v;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:r,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,{bypassAssociatedCheck:f,checkCreateATAOwner:y,associatedOnly:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[P,h]=[new G(t.mintA.address),new G(t.mintB.address)];r?a.inputAmount=a.inputAmount.mul(new Ze((1+c)*1e4)).div(new Ze(1e4)):a.outputAmount=a.outputAmount.mul(new Ze((1-c)*1e4)).div(new Ze(1e4));let I=t.mintA.address===$.toBase58(),T=t.mintB.address===$.toBase58(),{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:P,tokenProgram:new G((C=t.mintA.programId)!=null?C:Dt),owner:this.scope.ownerPubKey,createInfo:I||!o?{payer:this.scope.ownerPubKey,amount:o?a.inputAmount:0}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:b,checkCreateATAOwner:y});S&&g.addInstruction(S);let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:h,tokenProgram:new G((L=t.mintB.programId)!=null?L:Dt),owner:this.scope.ownerPubKey,createInfo:T||o?{payer:this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:b,checkCreateATAOwner:y});K&&g.addInstruction(K),(!k||!x)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:k,mintBTokenAcc:x,mintAUseSOLBalance:I,mintBUseSOLBalance:T,associatedOnly:b});let B=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[r?Fm(new G(t.programId),this.scope.ownerPubKey,new G(B.authority),new G(B.config.id),new G(t.id),o?k:x,o?x:k,new G(B.vault[o?"A":"B"]),new G(B.vault[o?"B":"A"]),new G((R=t[o?"mintA":"mintB"].programId)!=null?R:Dt),new G((v=t[o?"mintB":"mintA"].programId)!=null?v:Dt),o?P:h,o?h:P,sr(new G(t.programId),new G(t.id)).publicKey,a.inputAmount,a.outputAmount):Ps(new G(t.programId),this.scope.ownerPubKey,new G(B.authority),new G(B.config.id),new G(t.id),o?k:x,o?x:k,new G(B.vault[o?"A":"B"]),new G(B.vault[o?"B":"A"]),new G((N=t[o?"mintA":"mintB"].programId)!=null?N:Dt),new G((O=t[o?"mintB":"mintA"].programId)!=null?O:Dt),o?P:h,o?h:P,sr(new G(t.programId),new G(t.id)).publicKey,s,a.outputAmount)],instructionTypes:[r?z.CpmmSwapBaseOut:z.ClmmSwapBaseIn]}),g.addCustomComputeBudget(l),g.addTipInstruction(m),g.versionBuild({txVersion:d})}async lockLp(e){var d,p,f,y,b;let{poolInfo:t,lpAmount:n,computeBudgetConfig:o,txTipConfig:r,txVersion:s,feePayer:a,feeNftOwner:c}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let u=this.createTxBuilder(a),l=(d=e.poolKeys)!=null?d:await this.getCpmmPoolKeys(t.id),m=await _m({poolInfo:t,poolKeys:l,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(p=e.feePayer)!=null?p:this.scope.ownerPubKey},feeNftOwner:c!=null?c:this.scope.ownerPubKey,lockProgram:(f=e.programId)!=null?f:hi,lockAuthProgram:(y=e.authProgram)!=null?y:Ti,lpAmount:n,withMetadata:(b=e.withMetadata)!=null?b:!0,getEphemeralSigners:e.getEphemeralSigners});return u.addInstruction(m),u.addCustomComputeBudget(o),u.addTipInstruction(r),u.versionBuild({txVersion:s,extInfo:m.address})}async harvestLockLp(e){var L;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:r=hi,authProgram:s=Ti,cpmmProgram:a,computeBudgetConfig:c,txTipConfig:u,txVersion:l,closeWsol:m=!0}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let d=e.feePayer||this.scope.ownerPubKey,p=this.createTxBuilder(d),[f,y]=[new G(t.mintA.address),new G(t.mintB.address)],b=f.equals($),g=y.equals($),P,h,{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(b&&m),associatedOnly:!b,checkCreateATAOwner:!1});P=I,T&&p.addInstruction(T);let{account:k,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&m),associatedOnly:!g,checkCreateATAOwner:!1});h=k,S&&p.addInstruction(S),(!P||!h)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:P,tokenAccountB:h});let x=(L=e.poolKeys)!=null?L:await this.getCpmmPoolKeys(t.id),{publicKey:K}=J(d,o,Dt),{publicKey:B}=ar(r,o),{publicKey:C}=J(s,new G(t.lpMint.address),Dt);return p.addInstruction({instructions:[Ru({programId:r,nftOwner:this.scope.ownerPubKey,auth:s,nftMint:o,nftAccount:K,lockPda:B,poolId:new G(t.id),mintLp:new G(x.mintLp.address),userVaultA:P,userVaultB:h,poolVaultA:new G(x.vault.A),poolVaultB:new G(x.vault.B),mintA:f,mintB:y,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[z.CpmmCollectLockFee]}),p.addCustomComputeBudget(c),p.addTipInstruction(u),p.versionBuild({txVersion:l})}async harvestMultiLockLp(e){var d;let{lockInfo:t,programId:n=hi,authProgram:o=Ti,cpmmProgram:r,computeBudgetConfig:s,txVersion:a,closeWsol:c=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u),m={};for(let p of t){let{poolInfo:f,lpFeeAmount:y,nftMint:b}=p;if(y.isZero())continue;let[g,P]=[new G(f.mintA.address),new G(f.mintB.address)],h=g.equals($),I=P.equals($),T=m[f.mintA.address],k=m[f.mintB.address];if(!T)if(h){let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new G(f.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});T=C,L&&l.addInstruction(L),m[f.mintA.address]=C}else{let C=new G(f.mintA.address);T=this.scope.account.getAssociatedTokenAccount(C,new G(f.mintA.programId)),l.addInstruction({instructions:[si(this.scope.ownerPubKey,T,this.scope.ownerPubKey,C,new G(f.mintA.programId))]}),m[f.mintA.address]=T}if(!k)if(I){let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new G(f.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});k=C,L&&l.addInstruction(L),m[f.mintB.address]=C}else{let C=new G(f.mintB.address);k=this.scope.account.getAssociatedTokenAccount(C,new G(f.mintB.programId)),l.addInstruction({instructions:[si(this.scope.ownerPubKey,k,this.scope.ownerPubKey,C,new G(f.mintB.programId))]}),m[f.mintB.address]=k}(!T||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:T,tokenAccountB:k});let S=(d=p.poolKeys)!=null?d:await this.getCpmmPoolKeys(f.id),{publicKey:x}=J(u,b,Dt),{publicKey:K}=ar(n,b),{publicKey:B}=J(o,new G(f.lpMint.address),Dt);l.addInstruction({instructions:[Ru({programId:n,nftOwner:this.scope.ownerPubKey,auth:o,nftMint:b,nftAccount:x,lockPda:K,poolId:new G(f.id),mintLp:new G(S.mintLp.address),userVaultA:T,userVaultB:k,poolVaultA:new G(S.vault.A),poolVaultB:new G(S.vault.B),mintA:g,mintB:P,lockLpVault:B,lpFeeAmount:y,cpmmProgram:r==null?void 0:r.programId,cpmmAuthProgram:r==null?void 0:r.authProgram})],instructionTypes:[z.CpmmCollectLockFee]})}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:s}):l.sizeCheckBuild({computeBudgetConfig:s})}async createPoolWithPermission(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,feeOn:p}=b,f=Qe(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var Y,Q,de;console.log("***this method only available for wallet with permissions***");let g=r.feePayer||((Y=this.scope.owner)==null?void 0:Y.publicKey),P=new Ze(new G(f.mintA.address).toBuffer()).lte(new Ze(new G(f.mintB.address).toBuffer())),[h,I]=P?[f.mintA,f.mintB]:[f.mintB,f.mintA],[T,k]=P?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],S=r.useSOLBalance&&h.address===ri.toBase58(),x=r.useSOLBalance&&I.address===ri.toBase58(),[K,B]=[new G(h.address),new G(I.address)],C=this.createTxBuilder(d),{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:K,tokenProgram:h.programId,owner:this.scope.ownerPubKey,createInfo:S?{payer:g,amount:T}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:s,checkCreateATAOwner:a});C.addInstruction(N||{});let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new G(I.address),tokenProgram:I.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:k}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:s,checkCreateATAOwner:a});if(C.addInstruction(R||{}),L===void 0||O===void 0)throw Error("you don't has some token account");let v=Su({poolId:e,programId:t,configId:new G(u.id),mintA:K,mintB:B});return C.addInstruction({instructions:[Em(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new G(u.id),v.authority,v.poolId,K,B,v.lpMint,L,O,J(this.scope.ownerPubKey,v.lpMint).publicKey,v.vaultA,v.vaultB,n,new G((Q=h.programId)!=null?Q:Dt),new G((de=I.programId)!=null?de:Dt),v.observationId,Nm(t,this.scope.ownerPubKey).publicKey,T,k,o,p)],instructionTypes:[z.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(m),C.versionBuild({txVersion:c,extInfo:{address:U(_({},v),{mintA:h,mintB:I,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=to,txVersion:o,computeBudgetConfig:r,txTipConfig:s,feePayer:a}){let c=a||this.scope.ownerPubKey,u=this.createTxBuilder(c),l=t!=null?t:await this.getCpmmPoolKeys(e.id),[m,d,p,f]=[new G(e.mintA.address),new G(e.mintB.address),new G(e.mintA.programId),new G(e.mintB.programId)],y=this.scope.account.getAssociatedTokenAccount(m,p),b=this.scope.account.getAssociatedTokenAccount(d,f);return u.addInstruction({instructions:[si(this.scope.ownerPubKey,y,this.scope.ownerPubKey,m,new G(e.mintA.programId)),si(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,new G(e.mintB.programId))]}),u.addInstruction({instructions:[Lu(n,this.scope.ownerPubKey,new G(l.authority),new G(l.id),new G(l.config.id),new G(l.vault.A),new G(l.vault.B),m,d,y,b,p,f)],instructionTypes:[]}),u.addCustomComputeBudget(r),u.addTipInstruction(s),u.versionBuild({txVersion:o})}async collectMultiCreatorFees({poolInfoList:e,programId:t=to,txVersion:n,computeBudgetConfig:o,feePayer:r}){let s=r||this.scope.ownerPubKey,a=this.createTxBuilder(s),c={},u=await this.scope.api.fetchPoolKeysById({idList:e.map(l=>l.id)});for(let l of e){let m=u.find(P=>P.id===l.id)||await this.getCpmmPoolKeys(l.id),[d,p,f,y]=[new G(l.mintA.address),new G(l.mintB.address),new G(l.mintA.programId),new G(l.mintB.programId)],b=c[l.mintA.address]||this.scope.account.getAssociatedTokenAccount(d,f),g=c[l.mintB.address]||this.scope.account.getAssociatedTokenAccount(p,y);c[l.mintA.address]||a.addInstruction({instructions:[si(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,f)]}),c[l.mintB.address]||a.addInstruction({instructions:[si(this.scope.ownerPubKey,g,this.scope.ownerPubKey,p,y)]}),c[l.mintA.address]=b,c[l.mintB.address]=g,a.addInstruction({instructions:[Lu(t,this.scope.ownerPubKey,new G(m.authority),new G(m.id),new G(m.config.id),new G(m.vault.A),new G(m.vault.B),d,p,b,g,f,y)],instructionTypes:[]})}return n===0?a.sizeCheckBuildV0({computeBudgetConfig:o}):a.sizeCheckBuild({computeBudgetConfig:o})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let r=n.toString()===e.mintB.address,s=e.feeOn===0||e.feeOn===2,a=r?rr.swapBaseInput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,s):rr.swapBaseOutput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,s),c=new M(a.outputAmount.toString()).div(a.inputAmount.toString()),u=a.outputAmount.mul(new Ze((1-o)*1e4)).div(new Ze(1e4));return{allTrade:a.inputAmount.eq(t),amountIn:t,amountOut:a.outputAmount,minAmountOut:u,executionPrice:c,fee:a.tradeFee,priceImpact:e.poolPrice.sub(c).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:r,epochInfo:s,baseIn:a}){var I,T,k,S,x,K,B,C,L;let c=1-Number(r.toSignificant())/100,u=new Ze(new M(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=Ne(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((I=l.fee)!=null?I:new Ze(0)),d=new Ze(new M(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(T=l.fee)==null?void 0:T.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${r.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=m.mul(d).div(p==="base"?t:n),y={amount:at,fee:void 0,expirationTime:void 0};if(!m.isZero()){let N=Eb(f,t,n,d);this.logDebug("lpAmountData:",{amountA:N.amountA.toString(),amountB:N.amountB.toString()}),y=Ne(N[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new et(new Ze(1)).add(r),g=new et(new Ze(1)).sub(r),P=Ne(b.mul(y.amount.sub((S=y.fee)!=null?S:new Ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),h=Ne(g.mul(y.amount.sub((x=y.fee)!=null?x:new Ze(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",y.amount.toString(),"anotherAmountFee:",(B=(K=y.fee)==null?void 0:K.toString())!=null?B:0,"maxAnotherAmount:",P.amount.toString(),"maxAnotherAmountFee:",(L=(C=P.fee)==null?void 0:C.toString())!=null?L:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:P,minAnotherAmount:h,liquidity:f}}};function Eb(i,e,t,n){let o=i.mul(e).div(n);!o.isZero()&&!i.mul(e).mod(n).isZero()&&(o=o.add(new Ze(1)));let r=i.mul(t).div(n);return!r.isZero()&&!i.mul(t).mod(n).isZero()&&(r=r.add(new Ze(1))),{amountA:o,amountB:r}}import{PublicKey as Ve,SystemProgram as $b}from"@solana/web3.js";import{createTransferInstruction as td,TOKEN_PROGRAM_ID as De,TOKEN_2022_PROGRAM_ID as ci,createAssociatedTokenAccountIdempotentInstruction as Yu,createSyncNativeInstruction as Jb}from"@solana/spl-token";import ct from"bn.js";var Wm={[qr.toBase58()]:3},qm={3:qr};var Nu=E([Re(5),Re(8),F("ownAddress"),A("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),F("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Re(7)]),Um={3:Nu};import{PublicKey as Gm}from"@solana/web3.js";var ws=ke("Serum"),ks=class{static getProgramId(e){let t=qm[e];return t||ws.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Wm[t];return n||ws.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Um[e];return t||ws.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,r;for(;o<100;){try{let s=n.concat(Buffer.from([o]),Buffer.alloc(7));r=Gm.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:r,nonce:o}}return ws.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Gm.default,nonce:o}}};import{PublicKey as V,SystemProgram as lr,TransactionInstruction as mr}from"@solana/web3.js";import xn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ou,TOKEN_2022_PROGRAM_ID as Mu,TOKEN_PROGRAM_ID as lo}from"@solana/spl-token";function s1(i,e,t,n,o,r,s,a,c,u,l,m){let d=E([D("instruction"),A("amountIn"),A("amountOut")]),p=[{pubkey:lr.programId,isSigner:!1,isWritable:!1},{pubkey:lo,isSigner:!1,isWritable:!1},{pubkey:new V(t.programId),isSigner:!1,isWritable:!1},{pubkey:new V(t.id),isSigner:!1,isWritable:!0},{pubkey:new V(n.id),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let y=Ge(t);p.push({pubkey:y.config.id,isSigner:!1,isWritable:!1},{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:y.mintA.address.equals(c)?y.vault.A:y.vault.B,isSigner:!1,isWritable:!0},{pubkey:y.mintA.address.equals(c)?y.vault.B:y.vault.A,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let y=Ge(t);p.push({pubkey:y.authority,isSigner:!1,isWritable:!1},{pubkey:y.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:new V("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:y.openOrders,isSigner:!1,isWritable:!0},{pubkey:y.vault.A,isSigner:!1,isWritable:!0},{pubkey:y.vault.B,isSigner:!1,isWritable:!0},{pubkey:y.marketId,isSigner:!1,isWritable:!0},{pubkey:y.marketBids,isSigner:!1,isWritable:!0},{pubkey:y.marketAsks,isSigner:!1,isWritable:!0},{pubkey:y.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0})}else{let y=Ge(t);p.push({pubkey:y.authority,isSigner:!1,isWritable:!1},{pubkey:y.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:y.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:y.openOrders,isSigner:!1,isWritable:!0},{pubkey:y.vault.A,isSigner:!1,isWritable:!0},{pubkey:y.vault.B,isSigner:!1,isWritable:!0},{pubkey:y.marketId,isSigner:!1,isWritable:!0},{pubkey:y.marketBids,isSigner:!1,isWritable:!0},{pubkey:y.marketAsks,isSigner:!1,isWritable:!0},{pubkey:y.marketEventQueue,isSigner:!1,isWritable:!0},...y.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:y.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:y.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:y.id,isSigner:!1,isWritable:!0},{pubkey:y.id,isSigner:!1,isWritable:!0}])}let f=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},f),new mr({keys:p,programId:i,data:f})}function a1(i,e,t,n,o,r,s,a,c,u){let l=E([D("instruction")]),m=[{pubkey:lr.programId,isSigner:!1,isWritable:!1},{pubkey:lo,isSigner:!1,isWritable:!1},{pubkey:new V(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new V(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new V(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=Ge(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(f=>({pubkey:f,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=Ge(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 V("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=Ge(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 mr({keys:m,programId:i,data:d})}function Vb(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f){var k;let y=[],b=[w({pubkey:lo,isWritable:!1}),w({pubkey:Mu,isWritable:!1}),w({pubkey:Ou,isWritable:!1}),w({pubkey:lr.programId,isWritable:!1}),w({pubkey:e,isSigner:!0})];b.push(w({pubkey:t})),b.push(w({pubkey:o}));let g=[c,u],P=[l,m],h=[r,s,a];for(let S=0;S<g.length;S++){let x=g[S],K=h[S]===x.mintA.address;if(b.push(w({pubkey:new V(x.programId),isWritable:!1})),S===g.length-1?b.push(w({pubkey:o})):b.push(w({pubkey:n})),b.push(w({pubkey:new V(h[S])})),b.push(w({pubkey:new V(h[S+1])})),x.version===6){let B=P[S];b.push(w({pubkey:new V(B.config.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(K?B.vault.A:B.vault.B)})),b.push(w({pubkey:new V(K?B.vault.B:B.vault.A)})),b.push(w({pubkey:new V(x.observationId)})),b.push(w({pubkey:In})),b.push(w({pubkey:ot(new V(x.programId),new V(x.id)).publicKey})),y.push(vu(x.sqrtPriceX64.toString(),K));for(let C of(k=f[S])!=null?k:[])b.push(w({pubkey:new V(C)}))}else if(x.version===5){let B=P[S];b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.authority),isWritable:!1})),b.push(w({pubkey:new V(B.marketProgramId)})),b.push(w({pubkey:new V(B.marketAuthority)})),b.push(w({pubkey:Ur,isWritable:!1})),b.push(w({pubkey:new V(B.openOrders)})),b.push(w({pubkey:new V(B.vault.A)})),b.push(w({pubkey:new V(B.vault.B)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.marketId)})),b.push(w({pubkey:new V(B.marketBids)})),b.push(w({pubkey:new V(B.marketAsks)})),b.push(w({pubkey:new V(B.marketEventQueue)})),b.push(w({pubkey:new V(B.marketBaseVault)})),b.push(w({pubkey:new V(B.marketQuoteVault)}))}else if(x.version===4){let B=P[S],C=x.status!==1;b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(B.authority),isWritable:!1})),b.push(w({pubkey:new V(C?B.id:B.marketProgramId)})),b.push(w({pubkey:new V(C?B.id:B.marketAuthority)})),b.push(w({pubkey:new V(C?B.id:B.openOrders)})),b.push(w({pubkey:new V(B.vault.A)})),b.push(w({pubkey:new V(B.vault.B)})),b.push(w({pubkey:new V(C?B.id:B.marketId)})),b.push(w({pubkey:new V(C?B.id:B.marketBids)})),b.push(w({pubkey:new V(C?B.id:B.marketAsks)})),b.push(w({pubkey:new V(C?B.id:B.marketEventQueue)})),b.push(w({pubkey:new V(C?B.id:B.marketBaseVault)})),b.push(w({pubkey:new V(C?B.id:B.marketQuoteVault)}))}else if(x.version===7){let B=P[S];b.push(w({pubkey:new V(B.authority)})),b.push(w({pubkey:new V(B.config.id)})),b.push(w({pubkey:new V(B.id)})),b.push(w({pubkey:new V(K?B.vault.A:B.vault.B)})),b.push(w({pubkey:new V(K?B.vault.B:B.vault.A)})),b.push(w({pubkey:new V(x.observationId)}))}else throw Error("pool type error")}let I=E([D("insId"),A("amountIn"),A("amountOut"),j(re(),y.length,"clmmPriceLimit")]),T=Buffer.alloc(I.span);return I.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},T),new mr({keys:b,programId:i,data:T})}function vu(i,e){if(i)if(e){let t=new xn(i).div(new xn(25));return t.gt(os)?t:os}else{let t=new xn(i).mul(new xn(25));return t.lt(is)?t:is}else return e?os:is}function Xm({routeProgram:i,ownerInfo:e,inputMint:t,swapInfo:n}){var o,r,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ge(m),p=t.equals(d.mintA.address)?Ft.add(tn):_t.sub(tn);return Ke.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((r=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?r:new xn(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:[Ps(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 V(m[d?"mintA":"mintB"].address),new V(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?z.CpmmSwapBaseIn:z.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[ms({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 xn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?z.AmmV5SwapBaseIn:z.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],f=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Vb(i,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,f,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new xn(0)),n.remainingAccounts)],instructionTypes:[z.RouteSwap],lookupTableAddress:[p.lookupTableAccount,f.lookupTableAccount].filter(y=>y!==void 0),address:{}}}else throw Error("route type error")}function u1({programId:i,wallet:e,amount:t,inputAccount:n,outputAccount:o,routeInfo:r,poolKeys:s}){var d;if(r.success===!1)throw Error("route info error");let a=[],c=[w({pubkey:lo,isWritable:!1}),w({pubkey:Mu,isWritable:!1}),w({pubkey:Ou,isWritable:!1}),w({pubkey:lr.programId,isWritable:!1}),w({pubkey:e,isSigner:!0})],u={[r.data.inputMint]:n,[r.data.outputMint]:o};c.push(w({pubkey:u[r.data.inputMint]})),c.push(w({pubkey:u[r.data.outputMint]}));for(let p=0;p<s.length;p++){let f=r.data.routePlan[p],y=s[p],b=f.inputMint===y.mintA.address;if(c.push(w({pubkey:new V(y.programId),isWritable:!1})),p===s.length-1)c.push(w({pubkey:u[f.outputMint]}));else{let g=f.outputMint;if(u[g]===void 0){let P=J(e,new V(g),y.programId===Nt.CLMM_PROGRAM_ID.toBase58()||y.programId===Nt.CREATE_CPMM_POOL_PROGRAM.toBase58()?new V(b?y.mintB.programId:y.mintA.programId):lo).publicKey;u[g]=P}c.push(w({pubkey:u[g]}))}if(c.push(w({pubkey:new V(f.inputMint)})),c.push(w({pubkey:new V(f.outputMint)})),y.programId===Nt.CLMM_PROGRAM_ID.toBase58()){let g=y;c.push(w({pubkey:new V(g.config.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(b?g.vault.A:g.vault.B)})),c.push(w({pubkey:new V(b?g.vault.B:g.vault.A)})),c.push(w({pubkey:new V(g.observationId)})),c.push(w({pubkey:In,isWritable:!1})),c.push(w({pubkey:new V(g.exBitmapAccount)})),a.push(vu(f.lastPoolPriceX64,b));for(let P of(d=f.remainingAccounts)!=null?d:[])c.push(w({pubkey:new V(P)}))}else if(y.programId===Nt.AMM_STABLE.toBase58()){let g=y;c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.authority),isWritable:!1})),c.push(w({pubkey:new V(g.marketProgramId),isWritable:!1})),c.push(w({pubkey:new V(g.marketAuthority),isWritable:!1})),c.push(w({pubkey:Ur,isWritable:!1})),c.push(w({pubkey:new V(g.openOrders)})),c.push(w({pubkey:new V(g.vault.A)})),c.push(w({pubkey:new V(g.vault.B)})),c.push(w({pubkey:new V(g.marketId)})),c.push(w({pubkey:new V(g.marketBids)})),c.push(w({pubkey:new V(g.marketAsks)})),c.push(w({pubkey:new V(g.marketEventQueue)})),c.push(w({pubkey:new V(g.marketBaseVault)})),c.push(w({pubkey:new V(g.marketQuoteVault)}))}else if(y.programId===Nt.AMM_V4.toBase58()){let g=y;c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.authority),isWritable:!1})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.vault.A)})),c.push(w({pubkey:new V(g.vault.B)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(g.id)}))}else if(y.programId===Nt.CREATE_CPMM_POOL_PROGRAM.toBase58()){let g=y;c.push(w({pubkey:new V(g.authority)})),c.push(w({pubkey:new V(g.config.id)})),c.push(w({pubkey:new V(g.id)})),c.push(w({pubkey:new V(b?g.vault.A:g.vault.B)})),c.push(w({pubkey:new V(b?g.vault.B:g.vault.A)})),c.push(w({pubkey:new V(g.observationId)}))}else throw Error("pool type error")}let l=E([D("insId"),A("amountIn"),A("amountOut"),j(re(),a.length,"clmmPriceLimit")]),m=Buffer.alloc(l.span);return l.encode({insId:0,amountIn:t,amountOut:new xn(r.data.otherAmountThreshold),clmmPriceLimit:a},m),new mr({keys:c,programId:i,data:m})}function c1({programId:i,wallet:e,inputAccount:t,outputAccount:n,routeInfo:o,poolKeys:r}){var m;if(o.success===!1)throw Error("route info error");let s=[],a=[w({pubkey:lo,isWritable:!1}),w({pubkey:Mu,isWritable:!1}),w({pubkey:Ou,isWritable:!1}),w({pubkey:lr.programId,isWritable:!1}),w({pubkey:e,isSigner:!0})],c={[o.data.inputMint]:t,[o.data.outputMint]:n};for(let d=r.length-1;d>=0;d--){let p=o.data.routePlan[d],f=r[d],y=p.inputMint===f.mintA.address;if(a.push(w({pubkey:new V(f.programId)})),d===0)a.push(w({pubkey:c[p.inputMint]}));else{let b=p.inputMint;if(c[b]===void 0){let g=J(e,new V(b),f.programId===Nt.CLMM_PROGRAM_ID.toBase58()||f.programId===Nt.CREATE_CPMM_POOL_PROGRAM.toBase58()?new V(y?f.mintA.programId:f.mintB.programId):lo).publicKey;c[b]=g}a.push(w({pubkey:c[b]}))}if(d===r.length-1)a.push(w({pubkey:c[p.outputMint]}));else{let b=p.outputMint;if(c[b]===void 0){let g=J(e,new V(b),f.programId===Nt.CLMM_PROGRAM_ID.toBase58()||f.programId===Nt.CREATE_CPMM_POOL_PROGRAM.toBase58()?new V(y?f.mintB.programId:f.mintA.programId):lo).publicKey;c[b]=g}a.push(w({pubkey:c[b]}))}if(a.push(w({pubkey:new V(p.inputMint)})),a.push(w({pubkey:new V(p.outputMint)})),f.programId===Nt.CLMM_PROGRAM_ID.toBase58()){let b=f;a.push(w({pubkey:new V(b.config.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(y?b.vault.A:b.vault.B)})),a.push(w({pubkey:new V(y?b.vault.B:b.vault.A)})),a.push(w({pubkey:new V(b.observationId)})),a.push(w({pubkey:In,isWritable:!1})),a.push(w({pubkey:new V(b.exBitmapAccount)})),s.push(vu(p.lastPoolPriceX64,y));for(let g of(m=p.remainingAccounts)!=null?m:[])a.push(w({pubkey:new V(g)}))}else if(f.programId===Nt.AMM_STABLE.toBase58()){let b=f;a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.authority),isWritable:!1})),a.push(w({pubkey:new V(b.marketProgramId),isWritable:!1})),a.push(w({pubkey:new V(b.marketAuthority),isWritable:!1})),a.push(w({pubkey:Ur,isWritable:!1})),a.push(w({pubkey:new V(b.openOrders)})),a.push(w({pubkey:new V(b.vault.A)})),a.push(w({pubkey:new V(b.vault.B)})),a.push(w({pubkey:new V(b.marketId)})),a.push(w({pubkey:new V(b.marketBids)})),a.push(w({pubkey:new V(b.marketAsks)})),a.push(w({pubkey:new V(b.marketEventQueue)})),a.push(w({pubkey:new V(b.marketBaseVault)})),a.push(w({pubkey:new V(b.marketQuoteVault)}))}else if(f.programId===Nt.AMM_V4.toBase58()){let b=f;a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.authority),isWritable:!1})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.vault.A)})),a.push(w({pubkey:new V(b.vault.B)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(b.id)}))}else if(f.programId===Nt.CREATE_CPMM_POOL_PROGRAM.toBase58()){let b=f;a.push(w({pubkey:new V(b.authority)})),a.push(w({pubkey:new V(b.config.id)})),a.push(w({pubkey:new V(b.id)})),a.push(w({pubkey:new V(y?b.vault.A:b.vault.B)})),a.push(w({pubkey:new V(y?b.vault.B:b.vault.A)})),a.push(w({pubkey:new V(b.observationId)}))}else throw Error("pool type error")}let u=E([D("insId"),A("amountIn"),A("amountOut"),j(re(),s.length,"clmmPriceLimit")]),l=Buffer.alloc(u.span);return u.encode({insId:1,amountIn:new xn(o.data.otherAmountThreshold),amountOut:new xn(o.data.outputAmount),clmmPriceLimit:s},l),new mr({keys:a,programId:i,data:l})}import{ASSOCIATED_TOKEN_PROGRAM_ID as hs,TOKEN_2022_PROGRAM_ID as Qb,TOKEN_PROGRAM_ID as pr}from"@solana/spl-token";import{SystemProgram as Ht,TransactionInstruction as Ct}from"@solana/web3.js";import Xn from"bn.js";var mo=E([A(),A("epoch"),D("curveType"),en("index"),A("migrateFee"),A("tradeFeeRate"),A("maxShareFeeRate"),A("minSupplyA"),A("maxLockRate"),A("minSellRateA"),A("minMigrateRateA"),A("minFundRaisingB"),F("mintB"),F("protocolFeeOwner"),F("migrateFeeOwner"),F("migrateToAmmWallet"),F("migrateToCpmmWallet"),j(A(),16)]),Db=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),A("startTime"),A("totalAllocatedShare")]),kn=E([A(),A("epoch"),D("bump"),D("status"),D("mintDecimalsA"),D("mintDecimalsB"),D("migrateType"),A("supply"),A("totalSellA"),A("virtualA"),A("virtualB"),A("realA"),A("realB"),A("totalFundRaisingB"),A("protocolFee"),A("platformFee"),A("migrateFee"),Db.replicate("vestingSchedule"),F("configId"),F("platformId"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("creator"),D("mintProgramFlag"),D("cpmmCreatorFeeOn"),j(D(),62)]),d1=E([A(),A("epoch"),F("poolId"),F("beneficiary"),A("claimedAmount"),A("tokenShareAmount"),j(A(),8)]),Fu=E([D("migrateType"),D("migrateCpmmFeeOn"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod")]),Wb=E([A("epoch"),D("index"),F("configId"),Fu.replicate("bondingCurveParam"),j(A(),50)]),Gn=E([A(),A("epoch"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),j(D(),64,"name"),j(D(),256,"web"),j(D(),256,"img"),F("cpConfigId"),A("creatorFeeRate"),F("transferFeeExtensionAuth"),j(D(),180),gl(Wb,"platformCurve")]);var qb=Buffer.from("vault_auth_seed","utf8"),Ub=Buffer.from("global_config","utf8"),Gb=Buffer.from("pool_vesting","utf8"),Xb=Buffer.from("platform_config","utf8"),zb=Buffer.from("platform_fee_vault_auth_seed","utf8"),Yb=Buffer.from("creator_fee_vault_auth_seed","utf8");function rn(i){return ie([qb],i)}function g1(i,e,t,n){return ie([Ub,e.toBuffer(),Hb(t),ss(n)],i)}function ai(i,e,t){return ie([nu,e.toBuffer(),t.toBuffer()],i)}function _u(i,e,t){return ie([ou,e.toBuffer(),t.toBuffer()],i)}function po(i){return ie([Buffer.from("__event_authority","utf8")],i)}function Hb(i){let e=new ArrayBuffer(1);return new DataView(e).setUint8(0,i),new Uint8Array(e)}function Eu(i,e){return ie([Xb,e.toBuffer()],i)}function dr(i,e,t){return ie([Gb,e.toBuffer(),t.toBuffer()],i)}function Sn(i,e,t){return ie([e.toBuffer(),t.toBuffer()],i)}function Vu(i){return ie([zb],i)}function Kn(i,e,t){return ie([e.toBuffer(),t.toBuffer()],i)}function Du(i){return ie([Yb],i)}var Rt={initialize:Buffer.from([175,175,109,31,13,152,155,237]),initializeV2:Buffer.from([67,153,175,39,218,16,38,32]),buyExactIn:Buffer.from([250,234,13,123,213,156,19,236]),buyExactOut:Buffer.from([24,211,116,40,105,3,153,56]),sellExactIn:Buffer.from([149,39,222,155,211,124,152,26]),sellExactOut:Buffer.from([95,200,71,34,8,9,11,166]),createVestingAccount:Buffer.from([129,178,2,13,217,172,230,218]),claimVestedToken:Buffer.from([49,33,104,30,189,157,79,35]),createPlatformConfig:Buffer.from([176,90,196,175,253,113,220,20]),claimPlatformFee:Buffer.from([156,39,208,135,76,237,61,72]),updatePlaformConfig:Buffer.from([195,60,76,129,146,45,67,143]),initializeWithToken2022:Buffer.from([37,190,126,222,44,154,171,17]),claimPlatformFeeFromVault:Buffer.from([117,241,198,168,248,218,80,29]),claimCreatorFee:Buffer.from([26,97,138,203,132,171,141,252]),updatePlatformCurveParam:Buffer.from([138,144,138,250,220,128,4,57]),removePlatformCurveParam:Buffer.from([27,30,62,169,93,224,24,145])};function C1(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){throw new Error("*** launchlab initialize has been deprecated, please use initializeV2 instead! ***")}function Ym(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I){let T=E([D("decimals"),ht("name"),ht("symbol"),ht("uri")]),k=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),D("cpmmCreatorFeeOn")]),S=E([D("index"),A("supply"),A("totalFundRaisingB"),D("migrateType")]),x=E([D("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),D("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:pr,isSigner:!1,isWritable:!1},{pubkey:pr,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}],B=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),C=Buffer.alloc(k.span),L=Buffer.alloc(b.type==="ConstantCurve"?x.span:S.span);return T.encode({decimals:d,name:p,symbol:f,uri:y},B),b.type==="ConstantCurve"?x.encode(U(_({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="FixedCurve"?S.encode(U(_({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="LinearCurve"&&S.encode(U(_({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),L),k.encode({totalLockedAmount:g,cliffPeriod:P,unlockPeriod:h,cpmmCreatorFeeOn:I},C),new Ct({keys:K,programId:i,data:Buffer.from([...Rt.initializeV2,...B,...L,...C])})}function Hm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h,I){let T=E([D("decimals"),ht("name"),ht("symbol"),ht("uri")]),k=E([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),D("cpmmCreatorFeeOn"),D("transferFeeExtensionParamsOption"),E([en("transferFeeBasePoints"),A("maxinumFee")]).replicate("transferFeeExtensionParams")]),S=E([D("index"),A("supply"),A("totalFundRaisingB"),D("migrateType")]),x=E([D("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),D("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Qb,isSigner:!1,isWritable:!1},{pubkey:pr,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}],B=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),C=Buffer.alloc(k.span),L=Buffer.alloc(y.type==="ConstantCurve"?x.span:S.span);return T.encode({decimals:m,name:d,symbol:p,uri:f},B),y.type==="ConstantCurve"?x.encode(U(_({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="FixedCurve"?S.encode(U(_({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="LinearCurve"&&S.encode(U(_({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),L),k.encode({totalLockedAmount:b,cliffPeriod:g,unlockPeriod:P,cpmmCreatorFeeOn:h,transferFeeExtensionParamsOption:I?1:0,transferFeeExtensionParams:I!=null?I:{transferFeeBasePoints:0,maxinumFee:new Xn(0)}},C),new Ct({keys:K,programId:i,data:Buffer.from([...Rt.initializeWithToken2022,...B,...L,...C])})}function Ts(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([A("amountB"),A("minAmountA"),A("shareFeeRate")]),T=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}];h&&T.push({pubkey:h,isSigner:!1,isWritable:!0}),T.push({pubkey:Ht.programId,isSigner:!1,isWritable:!1}),T.push({pubkey:f,isSigner:!1,isWritable:!0}),T.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(I.span);return I.encode({amountB:b,minAmountA:g,shareFeeRate:P!=null?P:new Xn(0)},k),new Ct({keys:T,programId:i,data:Buffer.from([...Rt.buyExactIn,...k])})}function Qm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([A("amountA"),A("maxAmountB"),A("shareFeeRate")]),T=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}];h&&T.push({pubkey:h,isSigner:!1,isWritable:!0}),T.push({pubkey:Ht.programId,isSigner:!1,isWritable:!1}),T.push({pubkey:f,isSigner:!1,isWritable:!0}),T.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(I.span);return I.encode({amountA:b,maxAmountB:g,shareFeeRate:P!=null?P:new Xn(0)},k),new Ct({keys:T,programId:i,data:Buffer.from([...Rt.buyExactOut,...k])})}function Is(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([A("amountA"),A("minAmountB"),A("shareFeeRate")]),T=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}];h&&T.push({pubkey:h,isSigner:!1,isWritable:!0}),T.push({pubkey:Ht.programId,isSigner:!1,isWritable:!1}),T.push({pubkey:f,isSigner:!1,isWritable:!0}),T.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(I.span);return I.encode({amountA:b,minAmountB:g,shareFeeRate:P!=null?P:new Xn(0)},k),new Ct({keys:T,programId:i,data:Buffer.from([...Rt.sellExactIn,...k])})}function jm(i,e,t,n,o,r,s,a,c,u,l,m,d,p,f,y,b,g,P,h){let I=E([A("amountB"),A("maxAmountA"),A("shareFeeRate")]),T=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:po(i).publicKey,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1}];h&&T.push({pubkey:h,isSigner:!1,isWritable:!0}),T.push({pubkey:Ht.programId,isSigner:!1,isWritable:!1}),T.push({pubkey:f,isSigner:!1,isWritable:!0}),T.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(I.span);return I.encode({amountB:b,maxAmountA:g,shareFeeRate:P!=null?P:new Xn(0)},k),new Ct({keys:T,programId:i,data:Buffer.from([...Rt.sellExactOut,...k])})}function qu(i,e,t,n,o,r,s,a,c){let u=E([]),l=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:hs,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new Ct({keys:l,programId:i,data:Buffer.from([...Rt.claimVestedToken,...m])})}function Uu(i,e,t,n,o,r){let s=E([A("shareAmount")]),a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Ht.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({shareAmount:r},c),new Ct({keys:a,programId:i,data:Buffer.from([...Rt.createVestingAccount,...c])})}function Gu(i,e,t,n,o,r,s,a,c){let u=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Ht.programId,isSigner:!1,isWritable:!0},{pubkey:hs,isSigner:!1,isWritable:!0}];return new Ct({keys:u,programId:i,data:Rt.claimPlatformFee})}function Zm(i,e,t,n,o,r,s,a,c,u,l,m,d){let p=E([A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),ht("name"),ht("web"),ht("img"),A("creatorFeeRate")]),f=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],y=Buffer.alloc(8*5+Buffer.from(l,"utf-8").length+Buffer.from(m,"utf-8").length+Buffer.from(d,"utf-8").length+4*3);return p.encode({platformScale:a.platformScale,creatorScale:a.creatorScale,burnScale:a.burnScale,feeRate:c,name:l,web:m,img:d,creatorFeeRate:u},y),new Ct({keys:f,programId:i,data:Buffer.from([...Rt.createPlatformConfig,...y])})}function $m(i,e,t,n){let o=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],r;if(n.type==="updateClaimFeeWallet"){let s=E([D("index"),F("value")]);r=Buffer.alloc(s.span),s.encode({index:0,value:n.value},r)}else if(n.type==="updateLockNftWallet"){let s=E([D("index"),F("value")]);r=Buffer.alloc(s.span),s.encode({index:1,value:n.value},r)}else if(n.type==="migrateCpLockNftScale"){let s=E([D("index"),A("platformScale"),A("creatorScale"),A("burnScale")]);r=Buffer.alloc(s.span),s.encode(_({index:2},n.value),r)}else if(n.type==="updateFeeRate"){let s=E([D("index"),A("value")]);r=Buffer.alloc(s.span),s.encode({index:3,value:n.value},r)}else if(n.type==="updateImg"||n.type==="updateName"||n.type==="updateWeb"){let s=E([D("index"),ht("value")]);r=Buffer.alloc(Buffer.from(n.value,"utf-8").length+4+1*1),n.type==="updateName"?s.encode({index:4,value:n.value},r):n.type==="updateWeb"?s.encode({index:5,value:n.value},r):n.type==="updateImg"&&s.encode({index:6,value:n.value},r)}else if(n.type==="updateCpConfigId"){o.push({pubkey:n.value,isSigner:!1,isWritable:!1});let s=E([D("index")]);r=Buffer.alloc(s.span),s.encode({index:7},r)}else if(n.type==="updateAll"){o.push({pubkey:n.value.cpConfigId,isSigner:!1,isWritable:!1});let s=E([D("index"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),ht("name"),ht("web"),ht("img"),F("transferFeeExtensionAuth"),A("creatorFeeRate")]);r=Buffer.alloc(1+32+32+8*4+4*3+Buffer.from(n.value.name,"utf-8").length+Buffer.from(n.value.web,"utf-8").length+Buffer.from(n.value.img,"utf-8").length+32+8),s.encode({index:8,platformClaimFeeWallet:n.value.platformClaimFeeWallet,platformLockNftWallet:n.value.platformLockNftWallet,platformScale:n.value.migrateCpLockNftScale.platformScale,creatorScale:n.value.migrateCpLockNftScale.creatorScale,burnScale:n.value.migrateCpLockNftScale.burnScale,feeRate:n.value.feeRate,name:n.value.name,web:n.value.web,img:n.value.img,transferFeeExtensionAuth:n.value.transferFeeExtensionAuth,creatorFeeRate:n.value.creatorFeeRate},r)}else throw Error("updateInfo params type error");return new Ct({keys:o,programId:i,data:Buffer.from([...Rt.updatePlaformConfig,...r])})}function Xu(i,e,t,n,o,r,s,a){let c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:hs,isSigner:!1,isWritable:!1}];return new Ct({keys:c,programId:i,data:Rt.claimPlatformFeeFromVault})}function zu(i,e,t,n,o,r,s){let a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1},{pubkey:hs,isSigner:!1,isWritable:!1}];return new Ct({keys:a,programId:i,data:Rt.claimCreatorFee})}var zm=255,Wu=new Xn("18446744073709551615");function R1(i,e,t,n,o,r){let s=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:Ht.programId,isSigner:!1,isWritable:!1}],a=Buffer.alloc(1*2+8*6+D().span);return D().encode(o,a),Fu.encode({migrateType:r.migrateType?r.migrateType:zm,migrateCpmmFeeOn:r.migrateCpmmFeeOn?r.migrateCpmmFeeOn:zm,supply:r.supply?r.supply:new Xn(0),totalSellA:r.totalSellA?r.totalSellA:new Xn(0),totalFundRaisingB:r.totalFundRaisingB?r.totalFundRaisingB:new Xn(0),totalLockedAmount:r.totalLockedAmount?r.totalLockedAmount:Wu,cliffPeriod:r.cliffPeriod?r.cliffPeriod:Wu,unlockPeriod:r.unlockPeriod?r.unlockPeriod:Wu},a,1),new Ct({keys:s,programId:i,data:Buffer.from([...Rt.updatePlatformCurveParam,...a])})}function L1(i,e,t,n){let o=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],r=Buffer.alloc(D().span);return D().encode(n,r),new Ct({keys:o,programId:i,data:Buffer.from([...Rt.removePlatformCurveParam,...r,1,2])})}var Jm=(t=>(t[t.OnlyTokenB=0]="OnlyTokenB",t[t.BothToken=1]="BothToken",t))(Jm||{});import Bs from"bn.js";var fo=class{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){throw Error()}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:s,decimalB:a}){throw Error()}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){throw Error()}static buyExactIn({poolInfo:e,amount:t}){throw Error()}static buyExactOut({poolInfo:e,amount:t}){throw Error()}static sellExactIn({poolInfo:e,amount:t}){throw Error()}static sellExactOut({poolInfo:e,amount:t}){throw Error()}};var xs=class extends fo{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.add(e.realB).toString()).div(e.virtualA.sub(e.realA).toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:s,decimalB:a}){return new M(o.sub(r).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),r=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB.add(r)).toString()).div(e.virtualA.sub(e.realA.add(o)).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){if(e.lte(n))throw Error("supply need gt total sell");let s=e.sub(n).sub(o);if(s.lte(new Bs(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(r);if(a.lte(new Bs(0)))throw Error("tfMinusMf <= 0");let c=a.mul(n).mul(n).div(s),u=a.mul(n).div(s).sub(t),l=c.div(u),m=t.mul(t).div(u);if(l.lt(new Bs(0))||m.lt(new Bs(0)))throw Error("invalid input 0");return{a:l,b:m,c:n}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static getAmountOut({amountIn:e,inputReserve:t,outputReserve:n}){let o=e.mul(n),r=t.add(e);return o.div(r)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let o=t.mul(e),r=n.sub(e);return ko(o,r)}};import ln from"bn.js";import Ss from"bn.js";var Ks=class extends fo{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:s,decimalB:a}){return new M(o.sub(r).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),r=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB).add(r).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){let s=e.sub(o);if(s.lte(new Ss(0)))throw Error("invalid input 1");let a=new Ss(2).mul(t).sub(r),u=t.mul(s).div(a);if(u.lt(new Ss(0))||t.lt(new Ss(0)))throw Error("invalid input 0");return{a:u,b:t,c:u}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualB,initOutput:e.virtualA})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualB,initOutput:e.virtualA})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualA,initOutput:e.virtualB})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualA,initOutput:e.virtualB})}static getAmountOut({amountIn:e,initInput:t,initOutput:n}){return n.mul(e).div(t)}static getAmountIn({amountOut:e,initInput:t,initOutput:n}){let o=t.mul(e);return ko(o,n)}};import Qt from"bn.js";import ui from"bn.js";var fr=class{static _multipler(e){return new M(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new M(e.toString()).div(this._Q64).mul(this._multipler(t)).div(this._multipler(n))}static getPriceX64({price:e,decimalA:t,decimalB:n}){let o=e.mul(this._multipler(n)).div(this._multipler(t));return new ui(o.mul(this._Q64).toFixed(0))}};fr._Q64=new M(new ui(1).shln(64).toString());function Q1({supply:i,totalFundRaisingB:e,totalLockedAmount:t,totalSellA:n,migrateType:o,decimalsA:r}){let s=i.sub(n).sub(t),a=new ui(new M(s.mul(e).toString()).sqrt().toFixed(0));if(o==="amm"){if(a.gt(new ui(10).pow(new ui(r))))return!0}else if(o==="cpmm"){if(a.gt(new ui(100)))return!0}else throw Error("migrate type error");return!1}var Cs=class extends fo{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualA.mul(e.realA).toString()).div(fr._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:r,decimalA:s,decimalB:a}){return new M(o.sub(r).toString()).div(e.sub(t).sub(n).toString()).mul(10**(s-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),r=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB).add(r).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:r}){let s=e.sub(o);if(s.lte(new Qt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new Qt(3)).sub(r),u=t.mul(new Qt(2)).mul(s).div(a),l=u.mul(u),m=t.mul(new Qt(2)).mul(pt).div(l);if(!m.gt(new Qt(0)))throw Error("a need gt 0");if(!Wi.gt(m))throw Error("a need lt u64 max");if(m.lt(new Qt(0))||u.lt(new Qt(0)))throw Error("invalid input 0");return{a:m,b:new Qt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new Qt(2).mul(n).mul(pt).div(e.virtualA);return new Qt(new M(o.toString()).sqrt().toFixed(0)).sub(e.realA)}static buyExactOut({poolInfo:e,amount:t}){let n=e.realA.add(t),o=n.mul(n);return ko(e.virtualA.mul(o),new Qt(2).mul(pt)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),r=ko(e.virtualA.mul(o),new Qt(2).mul(pt));return e.realB.sub(r)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new Qt(2).mul(n).mul(pt).div(e.virtualA),r=new Qt(new M(o.toString()).sqrt().toFixed(0));return e.realA.sub(r)}};var Wt=class{static getPoolCurvePointByPoolInfo({curveType:e,pointCount:t,poolInfo:n}){return this.getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n.supply,totalFundRaising:n.totalFundRaisingB,totalSell:n.totalSellA,totalLockedAmount:n.vestingSchedule.totalLockedAmount,migrateFee:n.migrateFee,decimalA:n.mintDecimalsA,decimalB:n.mintDecimalsB})}static getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n,totalFundRaising:o,totalSell:r,totalLockedAmount:s,migrateFee:a,decimalA:c,decimalB:u}){if(t<3)throw Error("point count < 3");let l=this.getCurve(e),m=l.getInitParam({supply:n,totalFundRaising:o,totalSell:r,totalLockedAmount:s,migrateFee:a}),d=l.getPoolInitPriceByInit(U(_({},m),{decimalA:c,decimalB:u})),p=o.div(new ln(t-1)),f=new ln(0),y=[{price:d,totalSellSupply:0}],{a:b,b:g}=m,P=f,h=f;for(let I=1;I<t;I++){let T=I!==t-1?p:o.sub(h),k=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:P,realB:h,totalFundRaisingB:o,totalSellA:r},amountB:T,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});P=P.add(k.amountA.amount),h=h.add(k.amountB);let S=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:P,realB:h},decimalA:c,decimalB:u,curveType:e});y.push({price:S,totalSellSupply:new M(P.toString()).div(10**c).toNumber()})}return y}static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n,curveType:o}){return this.getCurve(o).getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n})}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o,curveType:r}){return this.getCurve(r).getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o})}static getPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getEndPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getPoolEndPriceReal({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolEndPriceReal({poolInfo:e,decimalA:n,decimalB:o})}static checkParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,decimals:r,config:s,migrateType:a}){if(Number(r)!==6)throw Error("decimals = 6");if(e.mul(s.maxLockRate).div(Gt).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(s.minSupplyA.mul(new ln(10**r))))throw Error("supply lt min supply");let u=e.mul(s.minSellRateA).div(Gt);if(n.lt(u))throw Error("invalid input");if(t.lt(s.minFundRaisingB))throw Error("total fund raising lt min fund raising");let l=e.sub(n).sub(o),m=e.mul(s.minMigrateRateA).div(Gt);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(o),p=new ln(new M(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new ln(10).pow(new ln(r));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new ln(100);if(p.lte(f))throw Error("check migrate lp error")}else throw Error("migrate type error")}static buyExactIn({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a}),m=this.calculateFee({amount:t,feeRate:l}),d=t.sub(m),p=this.getCurve(r),f=p.buyExactIn({poolInfo:e,amount:d}),y=e.totalSellA.sub(e.realA),b,g,P;if(f.gt(y)){b=y;let I=p.buyExactOut({poolInfo:e,amount:b});g=this.calculatePreFee({postFeeAmount:I,feeRate:l}),P=g.sub(I)}else b=f,g=t,P=m;let h=this.splitFee({totalFee:P,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a});return{amountA:da(b,c,u),amountB:g,splitFee:h}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=e.totalSellA.sub(e.realA),m=pa(t,c,u),d=m.fee?m.amount.add(m.fee):m.amount;t.gt(l)&&(d=l);let f=this.getCurve(r).buyExactOut({poolInfo:e,amount:d}),y=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a}),b=this.calculatePreFee({postFeeAmount:f,feeRate:y}),g=b.sub(f),P=this.splitFee({totalFee:g,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:b,splitFee:P}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.getCurve(r),m=da(t,c,u),d=m.fee?m.amount.sub(m.fee):m.amount,p=l.sellExactIn({poolInfo:e,amount:d}),f=this.calculateFee({amount:p,feeRate:this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a})}),y=this.splitFee({totalFee:f,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a});return{amountA:m,amountB:p.sub(f),splitFee:y}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:r,shareFeeRate:s,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a}),m=this.calculatePreFee({postFeeAmount:t,feeRate:l});if(e.realB.lt(m))throw Error("Insufficient liquidity");let d=m.sub(t),f=Wt.getCurve(r).sellExactOut({poolInfo:e,amount:m});if(f.gt(e.realA))throw Error();let y=this.splitFee({totalFee:d,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:s,creatorFeeRate:a});return{amountA:pa(f,c,u),amountB:t,splitFee:y}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:r}){let s=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:r}),a=s.isZero()?new ln(0):e.mul(n).div(s),c=s.isZero()?new ln(0):e.mul(o).div(s),u=s.isZero()?new ln(0):e.mul(r).div(s),l=e.sub(a).sub(c).sub(u);return{platformFee:a,shareFee:c,protocolFee:l,creatorFee:u}}static calculateFee({amount:e,feeRate:t}){return gi(e,t,Gt)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Gt),o=Gt.sub(t);return n.add(o).sub(new ln(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new ln(1e6)))throw Error("total fee rate gt 1_000_000");return e.add(t).add(n).add(o)}static getCurve(e){switch(e){case 0:return xs;case 1:return Ks;case 2:return Cs}throw Error("find curve error")}};import{NATIVE_MINT as zn,TOKEN_2022_PROGRAM_ID as Oo,TOKEN_PROGRAM_ID as Ue,createAssociatedTokenAccountIdempotentInstruction as jt,createSyncNativeInstruction as jb,getTransferFeeConfig as Rs,unpackMint as Ls}from"@solana/spl-token";import me from"bn.js";import{PublicKey as ed,SystemProgram as Zb}from"@solana/web3.js";var Ns={initPriceX64:new me("515752397214619"),supply:new me(1e15),totalSellA:new me(7931e11),totalFundRaisingB:new me(85e9),totalFundRaisingBUSD:new me(125e8),totalLockedAmount:new me("0"),cliffPeriod:new me("0"),unlockPeriod:new me("0"),decimals:6,virtualA:new me("1073471847374405"),virtualB:new me("30050573465"),realA:new me(0),realB:new me(0),protocolFee:new me(0),platformId:new ed("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new me(0),cliffPeriod:new me(0),unlockPeriod:new me(0),startTime:new me(0),totalAllocatedShare:new me(0)}},yo=new me(1e4),jR=new Set(["USDCoctVLVnvTXBEuP9s8hntucdJokbo17RwHuNXemT","USD1ttGY1N17NEEHLmELoaybftRBUSErhqYiQzvEmuB"]),yr=class extends Xe{constructor(e){super(e)}async createLaunchpad(L){var N=L,{programId:e=mt,authProgramId:t,platformId:n=Ns.platformId,mintA:o,decimals:r=6,mintBDecimals:s=9,name:a,symbol:c,uri:u,migrateType:l,configId:m,configInfo:d,platformFeeRate:p,txVersion:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g,buyAmount:P,minMintAAmount:h,slippage:I,associatedOnly:T=!0,checkCreateATAOwner:k=!1,extraSigners:S,token2022:x,transferFeeExtensionParams:K,creatorFeeOn:B=0}=N,C=Qe(N,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","platformFeeRate","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn"]);var Jt,wr,tc,nc,oc,ic,rc,sc,ac,uc,cc;let O=this.createTxBuilder(g);t=t!=null?t:rn(e).publicKey,x=!!K,x&&(l="cpmm");let R=d;if(!R&&m){let sn=await this.scope.connection.getAccountInfo(m);sn&&(R=mo.decode(sn.data))}R||this.logAndCreateError("config not found");let v=R.mintB,Y=R.curveType,{publicKey:Q}=ai(e,o,v),{publicKey:de}=_u(e,Q,o),{publicKey:ce}=_u(e,Q,v),{publicKey:le}=_n(o);this.logDebug(`create token: ${o.toBase58()}, mintB: ${v.toBase58()}, decimals A:${r}/B:${s}, config:${m.toBase58()}`),c.length>10&&this.logAndCreateError("Symbol length should shorter than 11"),u||this.logAndCreateError("uri should not empty");let fe=(await this.scope.api.fetchLaunchConfigs()).find(sn=>sn.key.pubKey===m.toBase58()),oe=(Jt=C==null?void 0:C.supply)!=null?Jt:new me(fe.defaultParams.supplyInit),ne=(wr=C==null?void 0:C.totalSellA)!=null?wr:new me(fe.defaultParams.totalSellA),Le=(tc=C==null?void 0:C.totalFundRaisingB)!=null?tc:new me(fe.defaultParams.totalFundRaisingB),_e=(nc=C==null?void 0:C.totalLockedAmount)!=null?nc:new me(0),he=p;if(!p){let sn=await this.scope.connection.getAccountInfo(n);sn||this.logAndCreateError("platform id not found:",n.toString()),he=Gn.decode(sn.data).feeRate}let Zt=Wt.getCurve(R.curveType).getInitParam({supply:oe,totalFundRaising:Le,totalSell:ne,totalLockedAmount:_e,migrateFee:R.migrateFee}),it;try{it=await this.scope.token.getTokenInfo(v)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let $t={epoch:new me(896),bump:254,status:0,mintDecimalsA:r,mintDecimalsB:(oc=it==null?void 0:it.decimals)!=null?oc:s,supply:oe,totalSellA:ne,mintA:new ed(o),mintB:v,virtualA:Zt.a,virtualB:Zt.b,realA:Ns.realA,realB:Ns.realB,migrateFee:R.migrateFee,migrateType:l==="amm"?0:1,protocolFee:Ns.protocolFee,platformFee:he,platformId:n,configId:m,vaultA:de,vaultB:ce,creator:this.scope.ownerPubKey,totalFundRaisingB:Le,vestingSchedule:{totalLockedAmount:_e,cliffPeriod:new me(0),unlockPeriod:new me(0),startTime:new me(0),totalAllocatedShare:new me(0)},mintProgramFlag:x?1:0,cpmmCreatorFeeOn:B},vs=Wt.getCurve(R.curveType),{c:Fs}=vs.getInitParam({supply:$t.supply,totalFundRaising:$t.totalFundRaisingB,totalLockedAmount:_e,totalSell:R.curveType===0?$t.totalSellA:new me(0),migrateFee:R.migrateFee});try{Wt.checkParam({supply:$t.supply,totalFundRaising:$t.totalFundRaisingB,totalSell:Fs,totalLockedAmount:_e,decimals:$t.mintDecimalsA,config:R,migrateType:l}),this.logDebug("check init params success")}catch(sn){this.logAndCreateError(`check create mint params failed, ${sn.message}`)}O.addInstruction({instructions:[x?Hm(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Q,o,v,de,ce,r,a,c,u||"https://",{type:Y===0?"ConstantCurve":Y===1?"FixedCurve":Y===2?"LinearCurve":"ConstantCurve",totalSellA:ne,migrateType:l,supply:oe,totalFundRaisingB:Le},_e,(ic=C==null?void 0:C.cliffPeriod)!=null?ic:new me(0),(rc=C==null?void 0:C.unlockPeriod)!=null?rc:new me(0),B,K):Ym(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Q,o,v,de,ce,le,r,a,c,u||"https://",{type:Y===0?"ConstantCurve":Y===1?"FixedCurve":Y===2?"LinearCurve":"ConstantCurve",totalSellA:ne,migrateType:l,supply:oe,totalFundRaisingB:Le},_e,(sc=C==null?void 0:C.cliffPeriod)!=null?sc:new me(0),(ac=C==null?void 0:C.unlockPeriod)!=null?ac:new me(0),B)]});let Mo=x?await this.scope.connection.getEpochInfo():void 0,bo=K?{epoch:BigInt((Mo==null?void 0:Mo.epoch)||0),maximumFee:BigInt((uc=K==null?void 0:K.maxinumFee.toString())!=null?uc:0),transferFeeBasisPoints:(cc=K==null?void 0:K.transferFeeBasePoints)!=null?cc:0}:void 0,vo={amountA:{amount:new me(0),fee:void 0,expirationTime:void 0},amountB:new me(0),splitFee:{platformFee:new me(0),shareFee:new me(0),protocolFee:new me(0),creatorFee:new me(0)}},Fo;if(S!=null&&S.length&&O.addInstruction({signers:S}),!C.createOnly){let{builder:sn,extInfo:id}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:x?Oo:void 0,mintA:o,mintB:v,poolInfo:$t,buyAmount:P,minMintAAmount:h,shareFeeRate:C.shareFeeRate,shareFeeReceiver:C.shareFeeReceiver,configInfo:R,platformFeeRate:he,slippage:I,associatedOnly:T,checkCreateATAOwner:k,skipCheckMintA:!bo,transferFeeConfigA:bo?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:bo,newerTransferFee:bo}:void 0,fromCreate:!0});O.addInstruction(_({},sn.AllTxData)),vo=_({},id),Fo=(this.scope.cluster==="devnet"||f===1)&&C.shareFeeReceiver?[sn.allInstructions[0]]:void 0}return O.addTipInstruction(b),f===0?O.sizeCheckBuildV0({computeBudgetConfig:y,swapInfo:vo,splitIns:Fo,address:U(_({},$t),{poolId:Q})}):O.sizeCheckBuild({computeBudgetConfig:y,swapInfo:vo,splitIns:Fo,address:U(_({},$t),{poolId:Q})})}async buyToken({programId:e=mt,authProgramId:t,mintA:n,mintAProgram:o=Ue,mintB:r=zn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,buyAmount:p,minMintAAmount:f,slippage:y,shareFeeRate:b=new me(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:h=!1,fromCreate:I=!1,transferFeeConfigA:T,skipCheckMintA:k=!1}){var ne,Le,_e;p.lte(new me(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let S=this.createTxBuilder(d),{publicKey:x}=ai(e,n,r);t=t!=null?t:rn(e).publicKey;let K=T;if(!k)if(K)o=Oo;else{let he=await this.scope.connection.getAccountInfo(n);if(he&&he.owner.equals(Oo)){o=he.owner;let qt=Ls(n,he,o);K=Rs(qt)||void 0}}let B=this.scope.account.getAssociatedTokenAccount(n,o),C=r.equals(zn),L=I&&C,N=L?this.scope.account.getAssociatedTokenAccount(r,Ue):null,O=C;if(S.addInstruction({instructions:[jt(this.scope.ownerPubKey,B,this.scope.ownerPubKey,n,o),...L?[jt(this.scope.ownerPubKey,N,this.scope.ownerPubKey,r,Ue),Zb.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N,lamports:BigInt(p.toString())}),jb(N)]:[]]}),!L){let{account:he,instructionParams:qt}=await this.scope.account.getOrCreateTokenAccount({mint:r,owner:this.scope.ownerPubKey,createInfo:O?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!O,notUseTokenAccount:O,associatedOnly:O?!1:P,checkCreateATAOwner:h});he&&(N=he),S.addInstruction(qt||{})}N===void 0&&this.logAndCreateError(`cannot found mintB(${r.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let R=s;if(!R){let he=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});he||this.logAndCreateError("cannot found pool:",x.toBase58()),R=kn.decode(he.data)}let v=a,Y=await We(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(he=>({pubkey:he})));if(!v){let he=Y.find(qt=>qt.pubkey.equals(R.configId));(!he||!he.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=mo.decode(he.accountInfo.data)}let Q=Y.find(he=>he.pubkey.equals(R.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let de=Gn.decode(Q.accountInfo.data);c=c||de.feeRate;let ce=Wt.buyExactIn({poolInfo:R,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:de.creatorFeeRate,transferFeeConfigA:K,slot:await this.scope.connection.getSlot()}),le=new M(ce.amountA.amount.toString()).sub((Le=(ne=ce.amountA.fee)==null?void 0:ne.toString())!=null?Le:0),Ae=y?new M(yo.sub(y).toNumber()/yo.toNumber()).clampedTo(0,1):new M(1),fe=f!=null?f:y?new me(le.mul(Ae).toFixed(0)):ce.amountA.amount.sub((_e=ce.amountA.fee)!=null?_e:new me(0));ce.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${ce.amountA.toString()}, input ${r.toBase58()} amount: ${ce.amountB.toString()}`);let oe=g?J(g,r,Ue).publicKey:void 0;return oe&&S.addInstruction({instructions:[jt(this.scope.ownerPubKey,oe,g,r)]}),S.addInstruction({instructions:[Ts(e,this.scope.ownerPubKey,t,R.configId,R.platformId,x,B,N,R.vaultA,R.vaultB,n,r,o,Ue,Sn(e,R.platformId,r).publicKey,Kn(e,R.creator,r).publicKey,ce.amountB.lt(p)?ce.amountB:p,fe,b,oe)]}),S.addCustomComputeBudget(l),S.addTipInstruction(m),S.versionBuild({txVersion:u,extInfo:U(_({},ce),{decimalOutAmount:le,minDecimalOutAmount:new M(fe.toString())})})}async buyTokenExactOut({programId:e=mt,authProgramId:t,mintA:n,mintAProgram:o=Ue,mintB:r=zn,poolInfo:s,configInfo:a,transferFeeConfigA:c,platformFeeRate:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p,maxBuyAmount:f,outAmount:y,slippage:b,shareFeeRate:g=new me(0),shareFeeReceiver:P,associatedOnly:h=!0,checkCreateATAOwner:I=!1,skipCheckMintA:T=!1}){y.lte(new me(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let k=this.createTxBuilder(p),{publicKey:S}=ai(e,n,r);t=t!=null?t:rn(e).publicKey;let x=s;if(!x){let oe=await this.scope.connection.getAccountInfo(S,{commitment:"processed"});oe||this.logAndCreateError("cannot found pool:",S.toBase58()),x=kn.decode(oe.data)}let K=a,B=await We(this.scope.connection,[K?void 0:x.configId,x.platformId].filter(Boolean).map(oe=>({pubkey:oe})));if(!K){let oe=B.find(ne=>ne.pubkey.equals(x.configId));(!oe||!oe.accountInfo)&&this.logAndCreateError("config not found: ",x.configId.toBase58()),K=mo.decode(oe.accountInfo.data)}let C=B.find(oe=>oe.pubkey.equals(x.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",x.configId.toBase58());let L=Gn.decode(C.accountInfo.data);u=u||L.feeRate;let N=c;if(!T)if(N)o=Oo;else{let oe=await this.scope.connection.getAccountInfo(n);if(oe&&oe.owner.equals(Oo)){o=oe.owner;let ne=Ls(n,oe,o);N=Rs(ne)||void 0}}let O=Wt.buyExactOut({poolInfo:x,amountA:y,protocolFeeRate:K.tradeFeeRate,platformFeeRate:u,curveType:K.curveType,shareFeeRate:g,creatorFeeRate:L.creatorFeeRate,transferFeeConfigA:N,slot:await this.scope.connection.getSlot()}),R=new M(O.amountB.toString()),v=b?new M(yo.add(b).toNumber()/yo.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new M(1),Y=(f!=null?f:b)?new me(R.mul(v).toFixed(0)):O.amountB,Q=this.scope.account.getAssociatedTokenAccount(n,o),de=null,ce=r.equals(zn);k.addInstruction({instructions:[jt(this.scope.ownerPubKey,Q,this.scope.ownerPubKey,n,o)]});let{account:le,instructionParams:Ae}=await this.scope.account.getOrCreateTokenAccount({mint:r,owner:this.scope.ownerPubKey,createInfo:ce?{payer:this.scope.ownerPubKey,amount:O.amountB}:void 0,skipCloseAccount:!ce,notUseTokenAccount:ce,associatedOnly:ce?!1:h,checkCreateATAOwner:I});le&&(de=le),k.addInstruction(Ae||{}),de===void 0&&this.logAndCreateError(`cannot found mintB(${r.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let fe=P?J(P,r,Ue).publicKey:void 0;return fe&&k.addInstruction({instructions:[jt(this.scope.ownerPubKey,fe,P,r)]}),k.addInstruction({instructions:[Qm(e,this.scope.ownerPubKey,t,x.configId,x.platformId,S,Q,de,x.vaultA,x.vaultB,n,r,o,Ue,Sn(e,x.platformId,r).publicKey,Kn(e,x.creator,r).publicKey,y,Y,g,fe)]}),k.addCustomComputeBudget(m),k.addTipInstruction(d),k.versionBuild({txVersion:l,extInfo:{maxSpentAmount:Y,outAmount:y}})}async sellToken({programId:e=mt,authProgramId:t,mintAProgram:n=Ue,mintA:o,mintB:r=zn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,sellAmount:p,minAmountB:f,slippage:y,shareFeeRate:b=new me(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:h=!1,skipCheckMintA:I=!1}){t=t!=null?t:rn(e).publicKey;let T=this.createTxBuilder(d);p.lte(new me(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:k}=ai(e,o,r),S;if(!I){let ne=await this.scope.connection.getAccountInfo(o);if(ne&&ne.owner.equals(Oo)){n=ne.owner;let Le=Ls(o,ne,n);S=Rs(Le)||void 0}}let x=null,K=null,B=r.equals(zn),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:h});C&&(x=C),T.addInstruction(L||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:r,owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:B?!1:P,checkCreateATAOwner:h});N&&(K=N),T.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=s;if(!R){let ne=await this.scope.connection.getAccountInfo(k,{commitment:"processed"});ne||this.logAndCreateError("cannot found pool",k.toBase58()),R=kn.decode(ne.data)}let v=a,Y=await We(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(ne=>({pubkey:ne})));if(!v){let ne=Y.find(Le=>Le.pubkey.equals(R.configId));(!ne||!ne.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=mo.decode(ne.accountInfo.data)}let Q=Y.find(ne=>ne.pubkey.equals(R.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let de=Gn.decode(Q.accountInfo.data);c=c||de.feeRate;let ce=Wt.sellExactIn({poolInfo:R,amountA:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:de.creatorFeeRate,transferFeeConfigA:S,slot:await this.scope.connection.getSlot()}),le=new M(ce.amountB.toString()),Ae=y?new M(yo.sub(y).toNumber()/yo.toNumber()).clampedTo(0,1):new M(1),fe=f!=null?f:y?new me(le.mul(Ae).toFixed(0)):ce.amountB;fe.lte(new me(0))&&this.logAndCreateError(`out ${r.toBase58()} amount should be gt 0`);let oe=g?J(g,r,Ue).publicKey:void 0;return oe&&T.addInstruction({instructions:[jt(this.scope.ownerPubKey,oe,g,r)]}),T.addInstruction({instructions:[Is(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,x,K,R.vaultA,R.vaultB,o,r,n,Ue,Sn(e,R.platformId,r).publicKey,Kn(e,R.creator,r).publicKey,ce.amountA.amount.lt(p)?ce.amountA.amount:p,fe,b,oe)]}),T.addCustomComputeBudget(l),T.addTipInstruction(m),T.versionBuild({txVersion:u,extInfo:{outAmount:fe}})}async sellTokenExactOut({programId:e=mt,authProgramId:t,mintAProgram:n=Ue,mintA:o,mintB:r=zn,poolInfo:s,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,inAmount:p,maxSellAmount:f,slippage:y,shareFeeRate:b=new me(0),shareFeeReceiver:g,associatedOnly:P=!0,checkCreateATAOwner:h=!1,skipCheckMintA:I=!1}){t=t!=null?t:rn(e).publicKey;let T=this.createTxBuilder(d);f!=null&&f.lte(new me(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:k}=ai(e,o,r),S;if(!I){let ne=await this.scope.connection.getAccountInfo(o);if(ne&&ne.owner.equals(Oo)){n=ne.owner;let Le=Ls(o,ne,n);S=Rs(Le)||void 0}}let x=null,K=null,B=r.equals(zn),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:h});C&&(x=C),T.addInstruction(L||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:r,owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:B?!1:P,checkCreateATAOwner:h});N&&(K=N),T.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=s;if(!R){let ne=await this.scope.connection.getAccountInfo(k,{commitment:"processed"});ne||this.logAndCreateError("cannot found pool",k.toBase58()),R=kn.decode(ne.data)}let v=a,Y=await We(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(ne=>({pubkey:ne})));if(!v){let ne=Y.find(Le=>Le.pubkey.equals(R.configId));(!ne||!ne.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=mo.decode(ne.accountInfo.data)}let Q=Y.find(ne=>ne.pubkey.equals(R.platformId));(!Q||!Q.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let de=Gn.decode(Q.accountInfo.data);c=c||de.feeRate;let ce=Wt.sellExactOut({poolInfo:R,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:de.creatorFeeRate,transferFeeConfigA:S,slot:await this.scope.connection.getSlot()}),le=new M(ce.amountA.amount.toString()),Ae=y?new M(yo.add(y).toNumber()/yo.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new M(1),fe=(f!=null?f:y)?new me(le.mul(Ae).toFixed(0)):ce.amountA.amount,oe=g?J(g,r,Ue).publicKey:void 0;return oe&&T.addInstruction({instructions:[jt(this.scope.ownerPubKey,oe,g,r)]}),T.addInstruction({instructions:[jm(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,x,K,R.vaultA,R.vaultB,o,r,n,Ue,Sn(e,R.platformId,r).publicKey,Kn(e,R.creator,r).publicKey,p,fe,b,oe)]}),T.addCustomComputeBudget(l),T.addTipInstruction(m),T.versionBuild({txVersion:u,extInfo:{maxSellAmount:fe}})}async createPlatformConfig({programId:e=mt,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,cpConfigId:r,migrateCpLockNftScale:s,transferFeeExtensionAuth:a,creatorFeeRate:c,feeRate:u,name:l,web:m,img:d,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b}){let g=this.createTxBuilder(b),{publicKey:P}=Eu(e,t);return g.addInstruction({instructions:[Zm(e,t,n,o,P,r,a,s,u,c,l,m,d)]}),g.addCustomComputeBudget(f),g.addTipInstruction(y),g.versionBuild({txVersion:p,extInfo:{platformId:P}})}async updatePlatformConfig({programId:e=mt,platformAdmin:t,platformId:n,updateInfo:o,txVersion:r,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Eu(e,t).publicKey;return u.addInstruction({instructions:[$m(e,t,l,o)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:r})}async claimPlatformFee({programId:e=mt,authProgramId:t,platformId:n,poolId:o,platformClaimFeeWallet:r,mintB:s,vaultB:a,mintBProgram:c=Ue,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){var g;let p=this.createTxBuilder(d);t=t!=null?t:rn(e).publicKey;let f=s,y=a;if(!f){let P=await this.scope.connection.getAccountInfo(o,{commitment:"processed"});P||this.logAndCreateError("cannot found pool:",o.toBase58());let h=kn.decode(P.data),I=await this.scope.connection.getAccountInfo(h.configId,{commitment:"processed"});I||this.logAndCreateError("cannot found config:",h.configId.toBase58()),f=mo.decode(I.data).mintB,y=y!=null?y:h.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(g=y==null?void 0:y.toBase58())!=null?g:"");let b=J(this.scope.ownerPubKey,f,Ue).publicKey;return p.addInstruction({instructions:[jt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[Gu(e,r,t,o,n,y,b,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=mt,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:r,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:rn(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:kn.span},{memcmp:{offset:kn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=kn.decode(m.account.data);if(d.platformFee.lte(new me(0)))return;let p=J(this.scope.ownerPubKey,d.mintB,Ue).publicKey;u.addInstruction({instructions:[jt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[Gu(e,o,t,m.pubkey,n,d.vaultB,p,d.mintB,Ue)]})}),u.addTipInstruction(a),r===0?u.sizeCheckBuildV0({computeBudgetConfig:s}):u.sizeCheckBuild({computeBudgetConfig:s})}async createVesting({programId:e=mt,poolId:t,beneficiary:n,shareAmount:o,txVersion:r,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=await this.getRpcPoolInfo({poolId:t});o.add(l.vestingSchedule.totalAllocatedShare).gt(l.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount");let m=dr(e,t,n).publicKey;return u.addInstruction({instructions:[Uu(e,this.scope.ownerPubKey,n,t,m,o)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:r})}async createMultipleVesting({programId:e=mt,poolId:t,beneficiaryList:n,txVersion:o,computeBudgetConfig:r,feePayer:s}){let a=this.createTxBuilder(s);n.length===0&&this.logAndCreateError("beneficiaryList is null");let c=await this.getRpcPoolInfo({poolId:t});return n.reduce((l,m)=>l.add(m.shareAmount),c.vestingSchedule.totalAllocatedShare).gt(c.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount"),n.forEach(l=>{let m=dr(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Uu(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:r}):a.sizeCheckBuild({computeBudgetConfig:r})}async claimVesting({programId:e=mt,poolId:t,poolInfo:n,vestingRecord:o,txVersion:r,computeBudgetConfig:s,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=rn(e).publicKey,m=o||dr(e,t,this.scope.ownerPubKey).publicKey,d=n;if(!d){let f=await this.scope.connection.getAccountInfo(t);f||this.logAndCreateError("pool not found"),d=kn.decode(f.data)}let p=J(this.scope.ownerPubKey,d.mintA,Ue).publicKey;return u.addInstruction({instructions:[jt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[qu(e,this.scope.ownerPubKey,l,t,m,p,d.vaultA,d.mintA,Ue)]}),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:r})}async claimMultiVesting({programId:e=mt,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:r,computeBudgetConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=_({},n),l=rn(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=_(_({},u),d.poolInfoMap)}return t.forEach(d=>{let p=d.toBase58(),f=u[p];f||this.logAndCreateError(`pool info not found: ${p}`);let y=o[p]||dr(e,d,this.scope.ownerPubKey).publicKey,b=J(this.scope.ownerPubKey,f.mintA,Ue).publicKey;c.addInstruction({instructions:[jt(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[qu(e,this.scope.ownerPubKey,l,d,y,b,f.vaultA,f.mintA,Ue)]})}),r===0?c.sizeCheckBuildV0({computeBudgetConfig:s}):c.sizeCheckBuild({computeBudgetConfig:s})}async claimVaultPlatformFee({programId:e=mt,platformId:t,mintB:n,mintBProgram:o=Ue,claimFeeWallet:r,txVersion:s,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=Sn(e,t,n).publicKey,d=Vu(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,o);return l.addInstruction({instructions:[jt(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,o),Xu(e,t,r!=null?r:this.scope.ownerPubKey,d,m,p,n,o)]}),l.addCustomComputeBudget(a),l.addTipInstruction(c),l.versionBuild({txVersion:s})}async claimMultipleVaultPlatformFee({programId:e=mt,platformList:t,unwrapSol:n=!0,txVersion:o,computeBudgetConfig:r,feePayer:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1}){let u=this.createTxBuilder(s),l={};return t.forEach(async m=>{var b,g;let d=Vu(e).publicKey,p=Sn(e,m.id,m.mintB).publicKey,f=m.mintB.equals(zn)&&n,y=l[m.mintB.toBase58()];if(!y){let{account:P,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintB,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:a,checkCreateATAOwner:c});P&&(y=P),u.addInstruction(h||{}),y===void 0&&this.logAndCreateError(`cannot found platform ${m.id.toBase58()} mintB(${m.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}u.addInstruction({instructions:[Xu(e,m.id,(b=m.claimFeeWallet)!=null?b:this.scope.ownerPubKey,p,d,y,m.mintB,(g=m.mintBProgram)!=null?g:Ue)]})}),o===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async claimCreatorFee({programId:e=mt,mintB:t,mintBProgram:n=Ue,txVersion:o,computeBudgetConfig:r,txTipConfig:s,feePayer:a}){let c=this.createTxBuilder(a),u=Kn(e,this.scope.ownerPubKey,t).publicKey,l=Du(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[jt(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),zu(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(r),c.addTipInstruction(s),c.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=mt,mintBList:t,txVersion:n,computeBudgetConfig:o,feePayer:r}){let s=this.createTxBuilder(r);return t.forEach(a=>{var p;let c=a.pubKey,u=(p=a.programId)!=null?p:Ue,l=Kn(e,this.scope.ownerPubKey,c).publicKey,m=Du(e).publicKey,d=this.scope.account.getAssociatedTokenAccount(c,u);s.addInstruction({instructions:[jt(this.scope.ownerPubKey,d,this.scope.ownerPubKey,c,u),zu(e,this.scope.ownerPubKey,m,l,d,c,u)]})}),n==0?s.sizeCheckBuildV0({computeBudgetConfig:o}):s.sizeCheckBuild({computeBudgetConfig:o})}async getRpcPoolInfo({poolId:e}){return(await this.getRpcPoolsInfo({poolIdList:[e]})).poolInfoMap[e.toBase58()]}async getRpcPoolsInfo({poolIdList:e,config:t}){let n=await We(this.scope.connection,e.map(c=>({pubkey:c})),t),o={},r=[];for(let c=0;c<e.length;c++){let u=n[c];if(u===null||!u.accountInfo)throw Error("fetch pool info error: "+e[c].toBase58());let l=kn.decode(u.accountInfo.data);o[e[c].toBase58()]=U(_({},l),{poolId:e[c],programId:u.accountInfo.owner}),r.push(l.configId)}let s=await We(this.scope.connection,r.map(c=>({pubkey:c})),t),a={};for(let c=0;c<r.length;c++){let u=s[c];if(u===null||!u.accountInfo)throw Error("fetch config info error: "+r[c].toBase58());let l=mo.decode(u.accountInfo.data);a[r[c].toBase58()]=U(_({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((c,u)=>U(_({},c),{[u]:U(_({},o[u]),{configInfo:a[o[u].configId.toBase58()]})}),{})}}};var Yn=new ct(0),br=class extends Xe{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals($));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1,feePayer:r}=e,s=await this.getWSolAccounts(),a=this.createTxBuilder(r);a.addCustomComputeBudget(e.computeBudgetConfig);let c=te(t);for(let u=0;u<s.length;u++)c.gte(s[u].amount)?(a.addInstruction({instructions:[vn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(s[u].amount)):a.addInstruction({instructions:[vn({tokenAccount:s[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:o})}async wrapWSol(e,t,n,o){let r=this.createTxBuilder(o),s=await io({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return r.addInstruction(s),r.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:r,txVersion:s,feePayer:a}){let c=this.createTxBuilder(a),u=e.amountIn,l=e.amountOut,m=u.amount.token.mint.equals($),d=l.amount.token.mint.equals($),p=u.amount.token.mint,f=l.amount.token.mint,{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?ci:De,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!m,createInfo:m?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&c.addInstruction(b),y===void 0)throw Error("input account check error");let g;if(e.routeType==="route"&&!d)g=this.scope.account.getAssociatedTokenAccount(f,l.amount.token.isToken2022?ci:De);else{let{account:T,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?ci:De,mint:f,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});g=T,k&&c.addInstruction(k)}d&&c.addInstruction({endInstructions:[vn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:De})],endInstructionTypes:[z.CloseAccount]});let P;if(e.routeType==="route"){let T=e.middleToken;P=this.scope.account.getAssociatedTokenAccount(T.mint,T.isToken2022?ci:De)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),I=Xm({routeProgram:r,inputMint:p,swapInfo:U(_({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:P,destinationToken:g}});if(e.feeConfig!==void 0){let T=this.createTxBuilder();T.addInstruction({instructions:[td(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[z.TransferAmount]}),T.addInstruction(I);let{transactions:k}=s===0?await T.sizeCheckBuildV0():await T.sizeCheckBuild();k.length<2&&c.addInstruction({instructions:[td(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[z.TransferAmount]})}return c.addInstruction(I),s===0?c.sizeCheckBuildV0({computeBudgetConfig:o,address:I.address}):c.sizeCheckBuild({computeBudgetConfig:o,address:I.address})}async swapClmmToLaunchMint({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:r,priceLimit:s,slippage:a=.01,shareFeeRate:c=new ct(0),shareFeeReceiver:u,launchPlatformInfo:l,slot:m,mintInfo:d,epochInfo:p,ownerInfo:f={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:g}){let P=(f==null?void 0:f.feePayer)||this.scope.ownerPubKey,h=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:I,clmmComputeAmount:{maxClmmAmountIn:T,clmmAmountOut:k,remainingAccounts:S},launchPoolInfo:x,launchAuthProgramId:K,launchSwapInfo:B,outAmount:C,minOutAmount:L}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:r,slippage:a,epochInfo:h,shareFeeRate:c,launchPlatformInfo:l,slot:m,mintInfo:d}),N=e.toString()===I.poolInfo.mintA.address,O=f.useSOLBalance&&I.poolInfo.mintA.address===$.toBase58(),R=f.useSOLBalance&&I.poolInfo.mintB.address===$.toBase58(),v={},Y;!s||s.equals(new M(0))?Y=N?Ft.add(new ct(1)):_t.sub(new ct(1)):Y=ue.priceToSqrtPriceX64(s,I.poolInfo.mintA.decimals,I.poolInfo.mintB.decimals);let Q=this.createTxBuilder(P),[de,ce]=[new Ve(I.poolInfo.mintA.address),new Ve(I.poolInfo.mintB.address)],[le,Ae]=[new Ve(I.poolInfo.mintA.programId),new Ve(I.poolInfo.mintB.programId)],fe=this.scope.account.getAssociatedTokenAccount(de,le),oe=this.scope.account.getAssociatedTokenAccount(ce,Ae);Q.addInstruction({instructions:[Yu(this.scope.ownerPubKey,fe,this.scope.ownerPubKey,de,le),Yu(this.scope.ownerPubKey,oe,this.scope.ownerPubKey,ce,Ae)]}),(N&&O||!N&&R)&&Q.addInstruction({instructions:[$b.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N?fe:oe,lamports:BigInt(T.toString())}),Jb(N?fe:oe)]}),v[I.poolInfo.mintA.address]=fe,v[I.poolInfo.mintB.address]=oe,(!fe||!oe)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:fe,ownerTokenAccountB:oe}),Q.addInstruction(n?Ke.makeSwapBaseOutInstructions({poolInfo:I.poolInfo,poolKeys:I.poolKeys,observationId:I.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:fe,tokenAccountB:oe},outputMint:N?ce:de,amountOut:k,amountInMax:T,sqrtPriceLimitX64:Y,remainingAccounts:S}):Ke.makeSwapBaseInInstructions({poolInfo:I.poolInfo,poolKeys:I.poolKeys,observationId:I.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:fe,tokenAccountB:oe},inputMint:new Ve(e),amountIn:t,amountOutMin:k,sqrtPriceLimitX64:Y,remainingAccounts:S}));let ne=x.mintProgramFlag===0?De:ci,Le=this.scope.account.getAssociatedTokenAccount(x.mintA,ne),_e=v[x.mintB.toBase58()];if(Q.addInstruction({instructions:[Yu(this.scope.ownerPubKey,Le,this.scope.ownerPubKey,x.mintA,ne)]}),!_e){let he=x.mintB.equals($),{account:qt,instructionParams:Zt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:De,mint:x.mintB,notUseTokenAccount:he,owner:this.scope.ownerPubKey,skipCloseAccount:!he,createInfo:he?{payer:this.scope.ownerPubKey,amount:k}:void 0,associatedOnly:!1,checkCreateATAOwner:y});_e=qt,Zt&&Q.addInstruction(Zt)}return Q.addInstruction({instructions:[Ts(x.programId,this.scope.ownerPubKey,K,x.configId,x.platformId,new Ve(r),Le,_e,x.vaultA,x.vaultB,x.mintA,x.mintB,ne,De,Sn(x.programId,x.platformId,x.mintB).publicKey,Kn(x.programId,x.creator,x.mintB).publicKey,B.amountB.lt(k)?B.amountB:k,L,c,u)]}),Q.addCustomComputeBudget(b),Q.versionBuild({txVersion:g,extInfo:{routes:[{mint:new Ve(e),amount:n?T:t,decimal:I.poolInfo[N?"mintA":"mintB"].decimals},{mint:N?ce:de,amount:k,decimal:I.poolInfo[N?"mintB":"mintA"].decimals},{mint:x.mintA,amount:C,decimal:x.mintDecimalsA}],outAmount:C,minOutAmount:L}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:r,slippage:s,epochInfo:a,shareFeeRate:c=new ct(0),clmmPoolData:u,launchPoolInfo:l,launchPlatformInfo:m,slot:d,mintInfo:p}){var O,R,v,Y,Q,de;let f=s>0?new M(s).div(2).toDecimalPlaces(4,M.ROUND_DOWN).toNumber():s,y=u!=null?u:await this.scope.clmm.getPoolInfoFromRpc(o.toString());if(e.toString()!==y.poolInfo.mintA.address&&e.toString()!==y.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let b=e.toString()===y.poolInfo.mintA.address,g=y.poolInfo[b?"mintB":"mintA"],P=n?await ve.computeAmountIn({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountOut:t,baseMint:new Ve(y.poolInfo[b?"mintB":"mintA"].address),slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}):await ve.computeAmountOutFormat({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountIn:t,tokenOut:g,slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}),h=l;if(h||(h=await this.scope.launchpad.getRpcPoolInfo({poolId:new Ve(r)})),g.address!==h.mintB.toBase58())throw new Error(`clmm swap mint(${g.address}) != launch pool mintB(${h.mintB.toBase58()})`);let I=m;if(!I){let ce=await this.scope.connection.getAccountInfo(h.platformId);I=Gn.decode(ce.data)}let T=p!=null?p:await this.scope.token.getTokenInfo(h.mintA),k=rn(h.programId).publicKey,S=T.extensions.feeConfig?{transferFeeConfigAuthority:Ve.default,withdrawWithheldAuthority:Ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((R=(O=T.extensions.feeConfig.olderTransferFee.epoch)!=null?O:a==null?void 0:a.epoch)!=null?R:0),maximumFee:BigInt(T.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:T.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((Y=(v=T.extensions.feeConfig.newerTransferFee.epoch)!=null?v:a==null?void 0:a.epoch)!=null?Y:0),maximumFee:BigInt(T.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:T.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,x=n?t:P.minAmountOut.amount.raw,K=Wt.buyExactIn({poolInfo:h,amountB:x,protocolFeeRate:h.configInfo.tradeFeeRate,platformFeeRate:I.feeRate,curveType:h.configInfo.curveType,shareFeeRate:c,creatorFeeRate:I.creatorFeeRate,transferFeeConfigA:S,slot:d!=null?d:await this.scope.connection.getSlot()}),B=K.amountA.amount.sub((Q=K.amountA.fee)!=null?Q:new ct(0)),C=new M(B.toString()),L=new ct(1e4),N=f?new M(L.sub(new ct(f*1e4)).toNumber()/L.toNumber()).clampedTo(0,1):new M(1);return{clmmPoolData:y,clmmComputeAmount:{maxClmmAmountIn:n?P.maxAmountIn.amount:t,clmmAmountOut:x,remainingAccounts:P.remainingAccounts},clmmComputeInfo:P,launchPoolInfo:h,launchAuthProgramId:k,launchMintTransferFeeConfig:S,launchSwapInfo:K,outAmount:K.amountA.amount.sub((de=K.amountA.fee)!=null?de:new ct(0)),minOutAmount:new ct(C.mul(N).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:r=.01,shareFeeRate:s=new ct(0),shareFeeReceiver:a,ownerInfo:c={useSOLBalance:!0},checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}){let d=(c==null?void 0:c.feePayer)||this.scope.ownerPubKey,p=await this.scope.fetchEpochInfo(),{clmmPoolData:f,clmmComputeAmount:{remainingAccounts:y},launchPoolInfo:b,launchAuthProgramId:g,launchSwapInfo:P,minLaunchOutAmount:h,outAmount:I,minOutAmount:T}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:r,epochInfo:p,shareFeeRate:s}),k=this.createTxBuilder(d),S={},x=b.mintProgramFlag===0?De:ci,{account:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:x,mint:b.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:u});if(!K)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);let B=b.mintB.equals($),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:De,mint:b.mintB,notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:u});if(L&&k.addInstruction(L),!C)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);S[b.mintB.toBase58()]=C,k.addInstruction({instructions:[Is(b.programId,this.scope.ownerPubKey,g,b.configId,b.platformId,new Ve(n),K,C,b.vaultA,b.vaultB,b.mintA,b.mintB,x,De,Sn(b.programId,b.platformId,b.mintB).publicKey,Kn(b.programId,b.creator,b.mintB).publicKey,P.amountA.amount.lt(e)?P.amountA.amount:e,h,s,a)]});let N=b.mintB.toString()===f.poolInfo.mintA.address,O=c.useSOLBalance&&f.poolInfo.mintA.address===$.toBase58(),R=c.useSOLBalance&&f.poolInfo.mintB.address===$.toBase58(),v;!o||o.equals(new M(0))?v=N?Ft.add(new ct(1)):_t.sub(new ct(1)):v=ue.priceToSqrtPriceX64(o,f.poolInfo.mintA.decimals,f.poolInfo.mintB.decimals);let[Y,Q]=[new Ve(f.poolInfo.mintA.address),new Ve(f.poolInfo.mintB.address)],[de,ce]=[new Ve(f.poolInfo.mintA.programId),new Ve(f.poolInfo.mintB.programId)],le=O?void 0:this.scope.account.getAssociatedTokenAccount(Y,de),Ae=R?void 0:this.scope.account.getAssociatedTokenAccount(Q,ce);if(!le){let{account:fe,instructionParams:oe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:de,mint:Y,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:N?e:0},associatedOnly:!1,checkCreateATAOwner:u});le=fe,oe&&k.addInstruction(oe)}if(!Ae){let{account:fe,instructionParams:oe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ce,mint:Q,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:N?0:e},associatedOnly:!1,checkCreateATAOwner:u});Ae=fe,oe&&k.addInstruction(oe)}return S[f.poolInfo.mintA.address]=le,S[f.poolInfo.mintB.address]=Ae,(!le||!Ae)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:le,ownerTokenAccountB:Ae}),k.addInstruction(Ke.makeSwapBaseInInstructions({poolInfo:f.poolInfo,poolKeys:f.poolKeys,observationId:f.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:le,tokenAccountB:Ae},inputMint:new Ve(f.poolKeys[N?"mintA":"mintB"].address),amountIn:h,amountOutMin:T,sqrtPriceLimitX64:v,remainingAccounts:y})),k.addCustomComputeBudget(l),k.versionBuild({txVersion:m,extInfo:{routes:[{mint:b.mintA,amount:e,decimal:b.mintDecimalsA},{mint:b.mintB,amount:h,decimal:b.mintDecimalsB},{mint:new Ve(f.poolKeys[N?"mintB":"mintA"].address),amount:I,decimal:f.poolKeys[N?"mintB":"mintA"].decimals}],outAmount:I,minOutAmount:T}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:r,shareFeeRate:s=new ct(0),clmmPoolData:a,launchPoolInfo:c,launchPlatformInfo:u}){var C,L,N,O;let l=o>0?new M(o).div(2).toDecimalPlaces(4,M.ROUND_DOWN).toNumber():o,m=c;m||(m=await this.scope.launchpad.getRpcPoolInfo({poolId:new Ve(n)}));let d=m.mintB,p=a!=null?a:await this.scope.clmm.getPoolInfoFromRpc(t.toString());if(d.toString()!==p.poolInfo.mintA.address&&d.toString()!==p.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let f=d.toString()===p.poolInfo.mintA.address,y=p.poolInfo[f?"mintB":"mintA"],b=u;if(!b){let R=await this.scope.connection.getAccountInfo(m.platformId);b=Gn.decode(R.data)}let g=await this.scope.token.getTokenInfo(m.mintA),P=rn(m.programId).publicKey,h=g.extensions.feeConfig?{transferFeeConfigAuthority:Ve.default,withdrawWithheldAuthority:Ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((L=(C=g.extensions.feeConfig.olderTransferFee.epoch)!=null?C:r==null?void 0:r.epoch)!=null?L:0),maximumFee:BigInt(g.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((O=(N=g.extensions.feeConfig.newerTransferFee.epoch)!=null?N:r==null?void 0:r.epoch)!=null?O:0),maximumFee:BigInt(g.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,I=Wt.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:b.feeRate,curveType:m.configInfo.curveType,shareFeeRate:s,creatorFeeRate:b.creatorFeeRate,transferFeeConfigA:h,slot:await this.scope.connection.getSlot()}),T=I.amountB,k=new M(T.toString()),S=new ct(1e4),x=l?new M(S.sub(new ct(l*1e4)).toNumber()/S.toNumber()).clampedTo(0,1):new M(1),K=new ct(k.mul(x).toFixed(0)),B=await ve.computeAmountOutFormat({poolInfo:p.computePoolInfo,tickArrayCache:p.tickData[t.toString()],amountIn:K,tokenOut:y,slippage:l,epochInfo:r!=null?r:await this.scope.fetchEpochInfo()});return B.amountOut.amount,B.minAmountOut,{clmmPoolData:p,clmmComputeAmount:B,launchPoolInfo:m,launchAuthProgramId:P,launchMintTransferFeeConfig:h,launchSwapInfo:I,minLaunchOutAmount:K,outAmount:B.amountOut.amount.raw,minOutAmount:B.minAmountOut.amount.raw}}async fetchRoutePoolBasicInfo(e){let{amm:t=wi,clmm:n=Jn,cpmm:o=to}=e||{},r=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Ko.offsetOf("baseMint"),length:64}}),s=E([F("baseMint"),F("quoteMint")]),a=r.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=E([F("mintA"),F("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:xo.span}],dataSlice:{offset:xo.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:f.mintA,mintB:f.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:As.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:r}){e=e.toString()===Ve.default.toString()?$:e,t=t.toString()===Ve.default.toString()?$: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:De,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:De,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:De,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:De,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:De,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:De,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:De,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:De,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of r)(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:De,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:De,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:De,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:De,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let f of p.in)for(let y of p.out)f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f),y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(y=>[y.mintA.toBase58(),y.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let r=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),s=ps(r),a={};Object.values(s).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new Ve(y.mintA.address),programId:De,mintAuthority:null,supply:BigInt(0),decimals:y.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(y.mintB.address),a[y.mintB.address]={address:new Ve(y.mintB.address),programId:De,mintAuthority:null,supply:BigInt(0),decimals:y.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(y=>y.id.toBase58()),!0);Object.values(c).forEach(y=>{let[b,g]=[y.mintA.toBase58(),y.mintB.toBase58()];y.mintProgramA.equals(De)?(o.delete(b),a[b]={address:y.mintA,programId:y.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),y.mintProgramB.equals(De)?(o.delete(g),a[g]={address:y.mintB,programId:y.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await _o({connection:this.scope.connection,mints:Array.from(o).map(y=>new Ve(y))});a=_(_({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((y,b)=>U(_({},y),{[b]:U(_({},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:r,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:r,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,P,h,I,T,k,S,x,K;let m=l===void 0?new ct(0):e.raw.mul(new ct(l.feeBps.toNumber())).div(new ct(1e4)),d=e.raw.sub(m),p=new Ce(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},y=U(_({},t),{address:It(t.address).toString()}),b=[];for(let B of n)try{b.push(U(_({},this.computeAmountOut({itemPool:B,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:p})),{feeConfig:f}))}catch(C){this.logDebug("direct error",B.version,B.id.toString(),C.message)}this.logDebug("direct done");for(let[B,C]of Object.entries(o)){let L={chainId:101,address:B,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},N=C.in.map(R=>{try{return{pool:R,data:this.computeAmountOut({itemPool:R,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:L,amountIn:p})}}catch(v){this.logDebug("route in error",R.version,R.id.toString(),v.message);return}}).sort((R,v)=>{var de,ce,le,Ae;let Y=R===void 0?Yn:R.data.amountOut.amount.raw.sub((ce=(de=R.data.amountOut.fee)==null?void 0:de.raw)!=null?ce:Yn),Q=v===void 0?Yn:v.data.amountOut.amount.raw.sub((Ae=(le=v.data.amountOut.fee)==null?void 0:le.raw)!=null?Ae:Yn);return Y.lt(Q)?1:-1})[0];if(N===void 0)continue;let O=new Ce(cs(L),N.data.amountOut.amount.raw.sub((P=(g=N.data.amountOut.fee)==null?void 0:g.raw)!=null?P:Yn));for(let R of C.out)try{let v=this.computeAmountOut({itemPool:R,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:O});b.push(U(_({},v),{allTrade:!!(N.data.allTrade&&v.allTrade),amountIn:N.data.amountIn,amountOut:v.amountOut,minAmountOut:v.minAmountOut,currentPrice:void 0,executionPrice:new M(new gt({baseToken:N.data.amountIn.amount.token,denominator:N.data.amountIn.amount.raw,quoteToken:v.amountOut.amount.token,numerator:v.amountOut.amount.raw.sub((I=(h=v.amountOut.fee)==null?void 0:h.raw)!=null?I:Yn)}).toFixed()),priceImpact:new M(N.data.priceImpact.add(v.priceImpact).toFixed()),fee:[N.data.fee[0],v.fee[0]],routeType:"route",poolInfoList:[N.pool,R],remainingAccounts:[N.data.remainingAccounts[0],v.remainingAccounts[0]],minMiddleAmountFee:(T=v.amountOut.fee)!=null&&T.raw?new Ce(N.data.amountOut.amount.token,((S=(k=N.data.amountOut.fee)==null?void 0:k.raw)!=null?S:Yn).add((K=(x=v.amountOut.fee)==null?void 0:x.raw)!=null?K:Yn)):void 0,middleToken:N.data.amountOut.amount.token,poolReady:N.data.poolReady&&v.poolReady,poolType:[N.data.poolType,v.poolType],feeConfig:f,expirationTime:gn(N.data.expirationTime,v.expirationTime)}))}catch(v){this.logDebug("route out error",R.version,R.id.toString(),v.message)}}return b.filter(B=>(B.allTrade||this.logDebug(`pool ${B.poolInfoList.map(C=>C.id.toString()).join(",")} filter out since not all trade`),B.allTrade)).sort((B,C)=>B.amountOut.amount.raw.sub(C.amountOut.amount.raw).gt(Yn)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:r,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:f,executionPrice:y,priceImpact:b,fee:g,remainingAccounts:P,executionPriceX64:h}=ve.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:r,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new M(f.toFixed()),executionPrice:new M(y.toFixed()),priceImpact:new M(b.toFixed()),fee:[g],remainingAccounts:[P],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[h],expirationTime:gn(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:f}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Qi(U(_({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Qi(U(_({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new Ce(c.token,f)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:f}=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:Qi(U(_({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Qi(U(_({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new Ce(c.token,f)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}let r=new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString()));if(r.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 Ve(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Nu.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:ks.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:U(_({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=_({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:hu({programId:new Ve(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({observationId:u.observationId.toBase58(),programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:ii(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:Kt({address:u.mintLp.toBase58(),programId:De.toBase58(),decimals:u.lpDecimals}),config:U(_({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as eg,Transaction as Hu,TransactionInstruction as tg}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ng}from"@solana/spl-token";import nd from"bn.js";var Lt=class extends Xe{static getPdaPoolId(e,t){return ie([Lt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ie([Lt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new nd(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:r}){if(n.length===0)return[];let s=n.map(l=>Lt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Lt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Lt.getPdaOwnerId(t,m,o,l).publicKey));let c=await dn(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],f=a[l],y=c[d],b=c[n.length+l];if(!(y&&b)||y.data.length!==Lt.POOL_LAYOUT.span||b.data.length!==Lt.OWNER_LAYOUT.span)continue;let g=Lt.POOL_LAYOUT.decode(y.data),P=Lt.OWNER_LAYOUT.decode(b.data),h=g.openTime.toNumber(),I=g.endTime.toNumber(),T=P.tokenInfo.map(x=>x.debtAmount.gt(new nd(0))).filter(x=>!x).length!==3,k=r>h&&r<I&&g.status===1,S=T&&k;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:P.lpAmount,project:Lt.VERSION_PROJECT[m],openTime:h,endTime:I,canClaim:S,canClaimErrorType:T?k?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,K)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:P.tokenInfo[K].debtAmount.add(P.tokenInfo[K].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),r=t.wallet||this.scope.ownerPubKey,s=[];for(let u of e.tokenInfo){let{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(Oe.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!u.mintAddress.equals(Oe.WSOL.mint),associatedOnly:u.mintAddress.equals(Oe.WSOL.mint)?!1:t.associatedOnly});m&&o.addInstruction(m),s.push(l)}o.addInstruction({instructions:[Lt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,ownerPda:e.ownerAccountId,claimAddress:s}})]});let{transaction:a,signers:c}=o.build();return[{transaction:a,signer:c}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let o=this.createTxBuilder(n),r=t.wallet||this.scope.ownerPubKey,s={};for(let l of e){let m=[];for(let d of l.tokenInfo){let{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({mint:d.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:d.mintAddress.equals(Oe.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!d.mintAddress.equals(Oe.WSOL.mint),associatedOnly:d.mintAddress.equals(Oe.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),p&&(s[d.mintAddress.toString()]=p,m.push(p))}o.addInstruction({instructions:[Lt.makeClaimInstruction({programId:l.programId,poolInfo:l,ownerInfo:{wallet:r,ownerPda:l.ownerAccountId,claimAddress:m}})]})}let{transaction:a,signers:c}=o.build(),u=o.allInstructions;return Wr(u,[r,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Hu().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:c},{transaction:new Hu().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Hu().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=E([]),r=[{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:ng,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new tg({keys:r,programId:e,data:a})}},mn=Lt;mn.CLAIMED_NUM=3,mn.POOL_LAYOUT=E([Re(8),D("bump"),D("status"),A("openTime"),A("endTime"),F("ammId"),j(E([D("mintDecimals"),F("mintAddress"),F("mintVault"),A("perLpLoss"),A("totalClaimedAmount")]),Lt.CLAIMED_NUM,"tokenInfo"),j(A(),10,"padding")]),mn.OWNER_LAYOUT=E([Re(8),D("bump"),D("version"),F("poolId"),F("owner"),A("lpAmount"),j(E([F("mintAddress"),A("debtAmount"),A("claimedAmount")]),Lt.CLAIMED_NUM,"tokenInfo"),j(A(),4,"padding")]),mn.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new eg(e)),mn.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},mn.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Pr}from"@solana/web3.js";import od from"bn.js";import{SYSVAR_CLOCK_PUBKEY as og,TransactionInstruction as ju}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Zu}from"@solana/spl-token";var Qu=E([D("instruction"),ll("amount")]),gr=E([D("instruction")]);function lN({programId:i,amount:e,instructionKeys:t}){let n=[{pubkey:Mr,isSigner:!1,isWritable:!1},{pubkey:Zu,isSigner:!1,isWritable:!1},{pubkey:rt,isSigner:!1,isWritable:!1},{pubkey:Js,isSigner:!1,isWritable:!1},...Object.entries(t).map(([r,s])=>({pubkey:s,isSigner:r==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(r)}))],o=Buffer.alloc(Qu.span);return Qu.encode({instruction:1,amount:Number(e)},o),new ju({keys:n,programId:i,data:o})}function Os({programId:i},e){let t=[{pubkey:Zu,isSigner:!1,isWritable:!1},{pubkey:Js,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,r])=>({pubkey:r,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(gr.span);return gr.encode({instruction:2},n),new ju({keys:t,programId:i,data:n})}function $u(i){let{poolConfig:e,userKeys:t,side:n}=i,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,r=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(gr.span);gr.encode({instruction:2},s);let a=[{pubkey:Zu,isWritable:!1,isSigner:!1},{pubkey:og,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new ju({programId:e.programId,keys:a,data:s})}var ig={[Ii.IDO_PROGRAM_ID_V1.toString()]:1,[Ii.IDO_PROGRAM_ID_V2.toString()]:2,[Ii.IDO_PROGRAM_ID_V3.toString()]:3,[Ii.IDO_PROGRAM_ID_V4.toString()]:4},li=class extends Xe{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:r,feePayer:s}){let a=this.createTxBuilder(s),c=ig[t.programId];c||this.logAndCreateError("invalid version",c);let u=Ge(t),[l,m]=[!new od(e.coin).isZero(),!new od(e.pc).isZero()],d=u.projectInfo.mint.address.equals($),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!d,notUseTokenAccount:d,associatedOnly:d?!1:n,checkCreateATAOwner:o});!p&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&f&&a.addInstruction(f);let y=u.buyInfo.mint.address.equals($),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:o});if(!p&&m&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),m&&g&&a.addInstruction(g),(!p||!b)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),c===3)return a.addInstruction({instructions:[...l?[Os({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[Os({programId:new Pr(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:b,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:r});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[Os({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:p,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:r});let P={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:p,quoteTokenAccount:b,ledgerAccount:new Pr(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[$u(U(_({},P),{side:"base"}))]:[],...m?[$u(U(_({},P),{side:"quote"}))]:[]]}).versionBuild({txVersion:r})}};import{PublicKey as rg}from"@solana/web3.js";import{MintLayout as sg,TOKEN_2022_PROGRAM_ID as Ju,TOKEN_PROGRAM_ID as ec}from"@solana/spl-token";var Ar=class extends Xe{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Set;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:r,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Set(s),this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Tn.address,Tn),this._mintGroup.official.add(Tn.address),r.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,U(_({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ju.toBase58():ec.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,U(_({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ju.toBase58():ec.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,U(_({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Ju.toBase58():ec.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return Tn;let r=(await this.scope.api.getTokenInfo([n]))[0];if(r)return this._mintGroup.extra.add(n),this._tokenMap.set(n,U(_({},r),{priority:2})),r;let s=await this.scope.connection.getAccountInfo(new rg(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=sg.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 Ms=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:r,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed",loopMultiTxStatus:l}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new yn(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=r,this._apiCacheTime=c||5*60*1e3,this.logger=ke("Raydium"),this.farm=new Di({scope:this,moduleName:"Raydium_Farm"}),this.account=new Ri({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new er({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Ar({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new br({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new nr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new cr({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new mn({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new oi({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new li({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new yr({scope:this,moduleName:"Raydium_lauchpad"}),this.availability={};let m=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:m,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=ag({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:r,logRequests:s,urlConfigs:a}=t,c=new Yr({cluster:n,timeout:o,urlConfigs:a,logCount:r,logRequests:s}),u=new Ms(U(_({},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 yn(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(tl);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw console.error(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){if(this.cluster==="devnet")return[];let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(o=>U(_({},o),{mintAuthority:o.mint_authority||void 0,freezeAuthority:o.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var uO=i=>i;export{Ag as ACCOUNT_TYPE_SIZE,Nt as ALL_PROGRAM_ID,Ny as AMM_CONFIG_SEED,Np as AMM_STABLE,wi as AMM_V4,aP as ANAMint,Pt as API_URLS,qb as AUTH_SEED,pd as AccountType,Yr as Api,Wl as BIT_PRECISION,bn as BNDivCeil,ho as BNLayout,aA as BN_100,uA as BN_1000,cA as BN_10000,sA as BN_FIVE,Fc as BN_ONE,Po as BN_TEN,rA as BN_THREE,iA as BN_TWO,at as BN_ZERO,Lk as BitStructure,cl as Blob,Fu as BondingCurveParam,ki as CLMM_LOCK_AUTH_ID,qo as CLMM_LOCK_PROGRAM_ID,Jn as CLMM_PROGRAM_ID,Js as CLOCK_PROGRAM_ID,Ub as CONFIG_SEED,ma as CREATE_CPMM_POOL_AUTH,Ep as CREATE_CPMM_POOL_FEE_ACC,to as CREATE_CPMM_POOL_PROGRAM,Yb as CREATOR_FEE_VAULT_AUTH_SEED,nr as Clmm,nm as ClmmConfigLayout,Ke as ClmmInstrument,ir as ConstantProductCurve,Vm as CpmmConfigInfoLayout,Jm as CpmmCreatorFeeOn,Yt as CpmmFee,FC as CpmmPermission,As as CpmmPoolInfoLayout,bi as Currency,go as CurrencyAmount,Wt as Curve,fo as CurveBase,rr as CurveCalculator,On as DEVNET_PROGRAM_ID,$c as DEV_API_URLS,AT as DEV_FARM_LOCK_MINT,wT as DEV_FARM_LOCK_VAULT,qA as DEV_LAUNCHPAD_AUTH,WA as DEV_LAUNCHPAD_PROGRAM,Go as DEV_LOOKUP_TABLE_CACHE,eb as DataElement,uP as ETHMint,au as EXTENSION_TICKARRAY_BITMAP_SIZE,Sl as FARM_LOCK_MINT,Kl as FARM_LOCK_VAULT,sa as FARM_PROGRAM_ID_V3,aa as FARM_PROGRAM_ID_V4,ua as FARM_PROGRAM_ID_V5,Wo as FARM_PROGRAM_ID_V6,un as FARM_PROGRAM_TO_VERSION,Rl as FARM_VERSION_TO_LEDGER_LAYOUT,Cl as FARM_VERSION_TO_STATE_LAYOUT,la as FEE_DESTINATION_ID,rs as FEE_RATE_DENOMINATOR,Gt as FEE_RATE_DENOMINATOR_VALUE,Vy as FETCH_TICKARRAY_COUNT,Ly as Fee,Dm as FeeOn,Ks as FixedPriceCurve,Pe as Fraction,Ii as IDO_ALL_PROGRAM,Mp as IDO_PROGRAM_ID_V1,vp as IDO_PROGRAM_ID_V2,Fp as IDO_PROGRAM_ID_V3,_p as IDO_PROGRAM_ID_V4,Or as INSTRUCTION_PROGRAM_ID,z as InstructionType,jc as JupTokenType,Vp as LAUNCHPAD_AUTH,Wp as LAUNCHPAD_CONFIG,Dp as LAUNCHPAD_PLATFORM,mt as LAUNCHPAD_PROGRAM,ls as LIQUIDITY_FEES_DENOMINATOR,mu as LIQUIDITY_FEES_NUMERATOR,Ur as LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL,Hy as LIQUIDITY_VERSION_TO_SERUM_VERSION,Wx as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Ti as LOCK_CPMM_AUTH,hi as LOCK_CPMM_PROGRAM,Ob as LOCK_LIQUIDITY_SEED,ql as LOG_B_2_X32,Ul as LOG_B_P_ERR_MARGIN_LOWER_X64,Gl as LOG_B_P_ERR_MARGIN_UPPER_X64,Uo as LOOKUP_TABLE_CACHE,xs as LaunchConstantProductCurve,mo as LaunchpadConfig,kn as LaunchpadPool,Ns as LaunchpadPoolInitParam,d1 as LaunchpadVesting,Ki as Layout,Cs as LinearPriceCurve,Be as LiquidityMath,rm as LockClPositionLayoutV2,JB as LockPositionLayout,ud as LogLevel,Es as Logger,Iu as MARKET_STATE_LAYOUT_V2,Nu as MARKET_STATE_LAYOUT_V3,Um as MARKET_VERSION_TO_STATE_LAYOUT,Xc as MAX_BASE64_SIZE,_t as MAX_SQRT_PRICE_X64,is as MAX_SQRT_PRICE_X64_SUB_ONE,vt as MAX_TICK,Nr as MEMO_PROGRAM_ID,In as MEMO_PROGRAM_ID2,an as METADATA_PROGRAM_ID,Ft as MIN_SQRT_PRICE_X64,os as MIN_SQRT_PRICE_X64_ADD_ONE,St as MIN_TICK,eo as MODEL_DATA_PUBKEY,ks as Market,fr as MathLaunch,be as MathUtil,Wi as MaxU64,Dl as MaxUint128,Fn as NEGATIVE_ONE,sP as NRVMint,_y as OBSERVATION_SEED,tn as ONE,ca as OPEN_BOOK_PROGRAM,vy as OPERATION_SEED,om as ObservationInfoLayout,qy as ObservationLayout,im as OperationLayout,Ra as OptionLayout,yn as Owner,Jg as PAIMint,zb as PLATFORM_FEE_VAULT_AUTH_SEED,Xb as PLATFORM_SEED,$l as POOL_LOCK_ID_SEED,Oy as POOL_REWARD_VAULT_SEED,nu as POOL_SEED,Fy as POOL_TICK_ARRAY_BITMAP_SEED,ou as POOL_VAULT_SEED,Gb as POOL_VESTING_SEED,Hl as POSITION_SEED,et as Percent,Gn as PlatformConfig,Wb as PlatformCurveParam,Zc as PoolFetchType,xo as PoolInfoLayout,ve as PoolUtils,ei as PositionInfoLayout,Gy as PositionRewardInfoLayout,Xi as PositionUtils,gt as Price,$B as ProtocolPositionLayout,ns as Q128,pt as Q64,$g as RAYMint,rt as RENT_PROGRAM_ID,Ms as Raydium,Uy as RewardInfo,Cm as RoundDirection,Hs as Rounding,Op as Router,Wm as SERUM_PROGRAMID_TO_VERSION,qr as SERUM_PROGRAM_ID_V3,qm as SERUM_VERSION_TO_PROGRAMID,Jc as SESSION_KEY,bt as SOLMint,Tn as SOL_INFO,cm as SPL_MINT_LAYOUT,eP as SRMMint,Aa as STORAGE_KEY,Ey as SUPPORT_MINT_SEED,Mr as SYSTEM_PROGRAM_ID,ue as SqrtPriceMath,ni as StableLayout,La as Structure,Bo as SwapMath,Io as TICK_ARRAY_BITMAP_SIZE,My as TICK_ARRAY_SEED,ft as TICK_ARRAY_SIZE,OI as TICK_SPACINGS,yt as TOKEN_WSOL,En as TickArrayBitmap,tm as TickArrayBitmapExtensionLayout,Yi as TickArrayBitmapExtensionUtils,zi as TickArrayLayout,Xy as TickLayout,So as TickMath,Se as TickQuery,ee as TickUtils,Oe as Token,Ce as TokenAmount,hb as TradeDirection,Tb as TradeDirectionOpposite,Xr as TxBuilder,Rn as TxVersion,qi as U64Resolution,vI as U64_IGNORE_RANGE,Sa as UInt,tP as USDCMint,rP as USDHMint,nP as USDTMint,Lp as UTIL1216,Na as Union,Db as VestingSchedule,xl as Voter,by as VoterDepositEntry,yy as VoterLockup,Bl as VoterRegistrar,fy as VoterVotingMintConfig,$ as WSOLMint,Jr as WideBits,Mn as WrappedLayout,Te as ZERO,Mc as _100_PERCENT,w as accountMeta,zP as add,Vr as addComputeBudget,yu as addLiquidityLayout,Rt as anchorDataBuf,fh as array,Fa as associatedLedgerAccountLayout,Ka as bits,Re as blob,Ye as bool,Ts as buyExactInInstruction,Qm as buyExactOutInstruction,ja as calFarmRewardAmount,gi as ceilDiv,ko as ceilDivBN,Pi as checkLegacyTxSize,Q1 as checkPoolToAmm,Ai as checkV0TxSize,Ws as chunkArray,zu as claimCreatorFee,gr as claimLayout,Gu as claimPlatformFee,Xu as claimPlatformFeeFromVault,qu as claimVestedToken,em as clmmComputeInfoToApiInfo,vn as closeAccountInstruction,Ru as collectCpFeeInstruction,js as commonSystemAccountMeta,Dr as confirmTransaction,Fb as cpmmLockPositionInstruction,Fi as createAssociatedLedgerAccountInstruction,ke as createLogger,Zm as createPlatformConfig,dm as createPoolFeeLayout,Pu as createPoolV4InstructionV2,Dx as createPoolV4Layout,Uu as createVestingAccount,io as createWSolAccountInstructions,rh as cstr,gP as currencyEquals,pA as decimalToFraction,Hf as decodeBool,qP as div,vr as divCeil,Mt as dwLayout,Qf as encodeBool,sk as endlessRetry,kp as eq,eh as f32,th as f32be,nh as f64,oh as f64be,Da as farmAddRewardLayout,uT as farmLedgerLayoutV3_1,Ni as farmLedgerLayoutV3_2,cT as farmLedgerLayoutV5_1,Tl as farmLedgerLayoutV5_2,Il as farmLedgerLayoutV6_1,Nl as farmRewardInfoToConfig,Ea as farmRewardLayout,Va as farmRewardRestartLayout,py as farmRewardTimeInfoLayout,kl as farmStateV3Layout,hl as farmStateV5Layout,Li as farmStateV6Layout,_T as fetchMultipleFarmInfoAndUpdate,xS as fetchMultipleInfo,_o as fetchMultipleMintInfos,ie as findProgramAddress,du as fixedSwapInLayout,pu as fixedSwapOutLayout,Fr as floorDiv,Wr as forecastTransactionSize,lb as formatLayout,nt as generatePubKey,J as getATAAddress,Ll as getAssociatedAuthority,ds as getAssociatedConfigId,xt as getAssociatedLedgerAccount,Mi as getAssociatedLedgerPoolAccount,fb as getAssociatedOpenOrders,Tu as getAssociatedPoolKeys,ar as getCpLockPda,TC as getCpmmPdaAmmConfigId,xu as getCpmmPdaPoolId,Su as getCreatePoolKeys,Vc as getDate,Za as getDepositEntryIndex,ga as getDevLookupTableCache,wm as getDxByDyBaseIn,Am as getDyByDxBaseIn,OA as getEpochInfo,Zo as getFarmLedgerLayout,Py as getFarmStateLayout,hu as getLiquidityAssociatedAuthority,Lo as getLiquidityAssociatedId,KB as getLiquidityFromAmounts,ba as getMainLookupTableCache,XP as getMax,dn as getMultipleAccountsInfo,We as getMultipleAccountsInfoWithCustomFlags,ya as getMultipleLookupTableInfo,qI as getPdaAmmConfigId,po as getPdaCpiEvent,Du as getPdaCreatorFeeVaultAuth,Kn as getPdaCreatorVault,ot as getPdaExBitmapAccount,rn as getPdaLaunchpadAuth,g1 as getPdaLaunchpadConfigId,ai as getPdaLaunchpadPoolId,_u as getPdaLaunchpadVaultId,Jo as getPdaLockClPositionIdV2,ru as getPdaLockPositionId,Lb as getPdaLpMint,_n as getPdaMetadataKey,su as getPdaMintExAccount,Zl as getPdaObservationAccount,sr as getPdaObservationId,Gi as getPdaOperationAccount,Nm as getPdaPermissionId,Et as getPdaPersonalPositionAddress,Vu as getPdaPlatformFeeVaultAuth,Eu as getPdaPlatformId,Sn as getPdaPlatformVault,ii as getPdaPoolAuthority,Ql as getPdaPoolId,jl as getPdaPoolRewardVaulId,iu as getPdaPoolVaultId,wn as getPdaProtocolPositionAddress,Ie as getPdaTickArrayAddress,Lm as getPdaVault,dr as getPdaVestId,Do as getRecentBlockHash,Ga as getRegistrarAddress,Hp as getSessionKey,km as getStablePrice,Ip as getTime,pw as getTimestamp,Qa as getTokenOwnerRecordAddress,XA as getTransferAmountFee,pa as getTransferAmountFeeFromPost,da as getTransferAmountFeeFromPre,Ne as getTransferAmountFeeV2,Ya as getVoterAddress,Ha as getVoterWeightRecordAddress,za as getVotingMintAuthority,Xa as getVotingTokenMint,Sy as governanceCreateTokenOwnerRecord,Nk as greedy,wp as gt,WP as gte,bl as i128,_I as i16ToBytes,as as i32ToBytes,Ho as i64,yl as i8,fu as initPoolLayout,Ma as initTokenAccountInstruction,C1 as initialize,Pb as initializeMarket,Ym as initializeV2,Em as initializeWithPermission,Hm as initializeWithToken2022,PA as intersection,Wc as isDateAfter,Dc as isDateBefore,fA as isDecimal,GP as isMeaningfulNumber,Ec as isNumber,qa as isValidFarmVersion,Ui as isZero,Ge as jsonInfo2PoolKeys,ET as judgeFarmType,eu as leadingZeros,Yl as leastSignificantBit,Ko as liquidityStateV4Layout,Qy as liquidityStateV5Layout,VP as lt,DP as lte,oP as mSOLMint,ms as makeAMMSwapInstruction,ym as makeAddLiquidityInstruction,Ja as makeAddNewRewardInstruction,Os as makeClaimInstruction,$u as makeClaimInstructionV4,Lu as makeCollectCreatorFeeInstruction,_m as makeCpmmLockInstruction,Om as makeCreateCpmmPoolInInstruction,Ol as makeCreateFarmInstruction,fs as makeCreateMarketInstruction,Ml as makeCreatorWithdrawFarmRewardInstruction,Mm as makeDepositCpmmInInstruction,Fl as makeDepositInstructionV3,_l as makeDepositInstructionV5,El as makeDepositInstructionV6,eI as makeDepositTokenInstruction,nI as makeDepositWithdrawInstruction,Jx as makeInitPoolInstructionV4,lN as makePurchaseInstruction,$a as makeRestartRewardInstruction,bm as makeSimulatePoolInfoInstruction,Ps as makeSwapCpmmBaseInInstruction,Fm as makeSwapCpmmBaseOutInstruction,$y as makeSwapFixedInInstruction,Jy as makeSwapFixedOutInstruction,Xm as makeSwapInstruction,wl as makeTransferInstruction,vm as makeWithdrawCpmmInInstruction,Vi as makeWithdrawInstructionV3,vl as makeWithdrawInstructionV4,Ei as makeWithdrawInstructionV5,_i as makeWithdrawInstructionV6,tI as makeWithdrawTokenInstruction,gn as minExpirationTime,MI as mockCreatePoolInfo,Xl as mockV3CreatePoolInfo,tb as modelDataInfoLayout,zl as mostSignificantBit,ia as mul,zp as notInnerObject,Yk as ns64,Jk as ns64be,ll as nu64,Wk as nu64be,Ca as offset,bA as offsetDateTime,mh as option,te as parseBigNumberish,Ao as parseNumberInfo,Yc as parseSimulateLogToJson,Nn as parseSimulateValue,Al as parseTokenAccountResp,xx as parseTokenInfo,so as poolTypeV6,wo as printSimulate,F as publicKey,Qu as purchaseLayout,ly as realFarmStateV3Layout,my as realFarmStateV5Layout,dy as realFarmV6Layout,gu as removeLiquidityInstruction,bu as removeLiquidityLayout,L1 as removePlatformCurveParamInstruction,s1 as route1Instruction,a1 as route2Instruction,Vb as routeInstruction,ph as rustEnum,Uk as s16,Hk as s16be,Gk as s24,Qk as s24be,ze as s32,jk as s32be,Xk as s40,Zk as s40be,zk as s48,$k as s48be,qk as s8,Is as sellExactInInstruction,jm as sellExactOut,j as seq,lg as setLoggerLevel,hp as shakeFractionDecimal,zc as simulateMultipleInstruction,$x as simulatePoolInfoInstruction,Sp as simulateTransaction,Qc as sleep,It as solToWSol,Kx as solToWSolToken,An as splAccountLayout,Lc as splitNumber,iP as stSOLMint,ht as str,E as struct,UP as sub,u1 as swapBaseInAutoAccount,c1 as swapBaseOutAutoAccount,dh as tagged,oa as tenExponential,ps as toAmmComputePoolInfo,Kt as toApiV3Token,Tp as toBN,Hc as toBuffer,ao as toFeeConfig,_c as toFraction,EP as toFractionWithDecimals,lA as toPercent,cs as toToken,Qi as toTokenAmount,Sx as toTokenInfo,mA as toTokenPrice,dA as toTotalPrice,vc as toUsdCurrency,tu as trailingZeros,MA as transformTxToBase64,$s as tryParsePublicKey,Kp as txToBase64,re as u128,en as u16,ss as u16ToBytes,Fk as u16be,Ok as u24,_k as u24be,kt as u32,EI as u32ToBytes,Ek as u32be,Mk as u40,Vk as u40be,vk as u48,Dk as u48be,A as u64,D as u8,Hb as u8ToBytes,yh as union,uO as unionArr,ih as unionLayoutDiscriminator,wA as uniq,Ay as updateFarmPoolInfo,$m as updatePlatformConfig,R1 as updatePlatformCurveParamInstruction,zr as updateReqHistory,jR as usdMintBSet,sh as utf8,Zs as validateAndParsePublicKey,Ua as validateFarmRewards,gl as vec,jf as vecU8,Cy as voterStakeRegistryCreateDepositEntry,Ky as voterStakeRegistryCreateVoter,Iy as voterStakeRegistryDeposit,By as voterStakeRegistryUpdateVoterWeightRecord,xy as voterStakeRegistryWithdraw,Cx as wSolToSolToken,_a as withdrawRewardLayout,AA as xor,bh as zeros};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=index.mjs.map