@raydium-io/raydium-sdk-v2
Version:
An SDK for building applications on top of Raydium.
3 lines • 358 kB
JavaScript
var lc=Object.defineProperty,mc=Object.defineProperties;var dc=Object.getOwnPropertyDescriptors;var zi=Object.getOwnPropertySymbols;var Ns=Object.prototype.hasOwnProperty,vs=Object.prototype.propertyIsEnumerable;var Ms=(o,e,t)=>e in o?lc(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,O=(o,e)=>{for(var t in e||(e={}))Ns.call(e,t)&&Ms(o,t,e[t]);if(zi)for(var t of zi(e))vs.call(e,t)&&Ms(o,t,e[t]);return o},U=(o,e)=>mc(o,dc(e));var De=(o,e)=>{var t={};for(var n in o)Ns.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&zi)for(var n of zi(o))e.indexOf(n)<0&&vs.call(o,n)&&(t[n]=o[n]);return t};import{merge as sp}from"lodash";import ha from"axios";import{PublicKey as Es}from"@solana/web3.js";import{get as _s,set as pc}from"lodash";var sr=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 le(o){let e=_s(Vs,o);if(!e){let t=_s(fc,o);e=new sr({name:o,logLevel:t}),pc(Vs,o,e)}return e}import{MINT_SIZE as bc,TOKEN_PROGRAM_ID as yc,getTransferFeeConfig as gc,unpackMint as wc}from"@solana/spl-token";var ar=le("Raydium_accountInfo_util");async function Lt(o,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:r=100}=O({batchRequest:!1},t),s=ur(e,r),a=new Array(s.length).fill([]);if(n){let c=s.map(d=>{let m=o._buildArgs([d.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:m}}),u=ur(c,10);a=(await(await Promise.all(u.map(async d=>await o._rpcBatchRequest(d)))).flat()).map(d=>(d.error&&ar.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${d.error.message}`),d.result.value.map(m=>{if(m){let{data:p,executable:f,lamports:b,owner:y,rentEpoch:g}=m;return p.length!==2&&p[1]!=="base64"&&ar.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:b,owner:new Es(y),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>o.getMultipleAccountsInfo(c,i)))}catch(c){c instanceof Error&&ar.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Ue(o,e,t){let n=await Lt(o,e.map(i=>i.pubkey),t);return e.map((i,r)=>U(O({},i),{accountInfo:n[r]}))}async function Nn({connection:o,mints:e,config:t}){var r,s,a;if(e.length===0)return{};let n=await Ue(o,e.map(c=>({pubkey:tt(c)})),t),i={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<bc){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=wc(c.pubkey,c.accountInfo,(r=c.accountInfo)==null?void 0:r.owner);i[c.pubkey.toString()]=U(O({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||yc,feeConfig:(a=gc(u))!=null?a:void 0})}return i[Es.default.toBase58()]=i[j.toBase58()],i}import zt from"bn.js";var vn=9e15,sn=1e9,cr="0123456789abcdef",Yi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Hi="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",lr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-vn,maxE:vn,crypto:!1},qs,Gt,re=!0,Zi="[DecimalError] ",rn=Zi+"Invalid argument: ",Us=Zi+"Precision limit exceeded",Gs=Zi+"crypto unavailable",Xs="[object Decimal]",nt=Math.floor,Ge=Math.pow,Ac=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,kc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Pc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,zs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Mt=1e7,ee=7,hc=9007199254740991,Tc=Yi.length-1,mr=Hi.length-1,F={toStringTag:Xs};F.absoluteValue=F.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),$(o)};F.ceil=function(){return $(new this.constructor(this),this.e+1,2)};F.clampedTo=F.clamp=function(o,e){var t,n=this,i=n.constructor;if(o=new i(o),e=new i(e),!o.s||!e.s)return new i(NaN);if(o.gt(e))throw Error(rn+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new i(n)};F.comparedTo=F.cmp=function(o){var e,t,n,i,r=this,s=r.d,a=(o=new r.constructor(o)).d,c=r.s,u=o.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(r.e!==o.e)return r.e>o.e^c<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===i?0:n>i^c<0?1:-1};F.cosine=F.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ee,n.rounding=1,t=Ic(n,Zs(n,t)),n.precision=o,n.rounding=e,$(Gt==2||Gt==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};F.cubeRoot=F.cbrt=function(){var o,e,t,n,i,r,s,a,c,u,l=this,d=l.constructor;if(!l.isFinite()||l.isZero())return new d(l);for(re=!1,r=l.s*Ge(l.s*l,1/3),!r||Math.abs(r)==1/0?(t=Ze(l.d),o=l.e,(r=(o-t.length+1)%3)&&(t+=r==1||r==-2?"0":"00"),r=Ge(t,1/3),o=nt((o+1)/3)-(o%3==(o<0?-1:2)),r==1/0?t="5e"+o:(t=r.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new d(t),n.s=l.s):n=new d(r.toString()),s=(o=d.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=he(u.plus(l).times(a),u.plus(c),s+2,1),Ze(a.d).slice(0,s)===(t=Ze(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&($(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&($(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return re=!0,$(n,o,d.rounding,e)};F.decimalPlaces=F.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-nt(this.e/ee))*ee,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};F.dividedBy=F.div=function(o){return he(this,new this.constructor(o))};F.dividedToIntegerBy=F.divToInt=function(o){var e=this,t=e.constructor;return $(he(e,new t(o),0,1,1),t.precision,t.rounding)};F.equals=F.eq=function(o){return this.cmp(o)===0};F.floor=function(){return $(new this.constructor(this),this.e+1,3)};F.greaterThan=F.gt=function(o){return this.cmp(o)>0};F.greaterThanOrEqualTo=F.gte=function(o){var e=this.cmp(o);return e==1||e===0};F.hyperbolicCosine=F.cosh=function(){var o,e,t,n,i,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,i=r.d.length,i<32?(o=Math.ceil(i/3),e=(1/Ji(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),r=_n(s,1,r.times(e),new s(1),!0);for(var c,u=o,l=new s(8);u--;)c=r.times(r),r=a.minus(c.times(l.minus(c.times(l))));return $(r,s.precision=t,s.rounding=n,!0)};F.hyperbolicSine=F.sinh=function(){var o,e,t,n,i=this,r=i.constructor;if(!i.isFinite()||i.isZero())return new r(i);if(e=r.precision,t=r.rounding,r.precision=e+Math.max(i.e,i.sd())+4,r.rounding=1,n=i.d.length,n<3)i=_n(r,2,i,i,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,i=i.times(1/Ji(5,o)),i=_n(r,2,i,i,!0);for(var s,a=new r(5),c=new r(16),u=new r(20);o--;)s=i.times(i),i=i.times(a.plus(s.times(c.times(s).plus(u))))}return r.precision=e,r.rounding=t,$(i,e,t,!0)};F.hyperbolicTangent=F.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,he(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};F.inverseCosine=F.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,r=t.rounding;return n!==-1?n===0?e.isNeg()?Ot(t,i,r):new t(0):new t(NaN):e.isZero()?Ot(t,i+4,r).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),o=Ot(t,i+4,r).times(.5),t.precision=i,t.rounding=r,o.minus(e))};F.inverseHyperbolicCosine=F.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,re=!1,t=t.times(t).minus(1).sqrt().plus(t),re=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};F.inverseHyperbolicSine=F.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,re=!1,t=t.times(t).plus(1).sqrt().plus(t),re=!0,n.precision=o,n.rounding=e,t.ln())};F.inverseHyperbolicTangent=F.atanh=function(){var o,e,t,n,i=this,r=i.constructor;return i.isFinite()?i.e>=0?new r(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(o=r.precision,e=r.rounding,n=i.sd(),Math.max(n,o)<2*-i.e-1?$(new r(i),o,e,!0):(r.precision=t=n-i.e,i=he(i.plus(1),new r(1).minus(i),t+o,1),r.precision=o+4,r.rounding=1,i=i.ln(),r.precision=o,r.rounding=e,i.times(.5))):new r(NaN)};F.inverseSine=F.asin=function(){var o,e,t,n,i=this,r=i.constructor;return i.isZero()?new r(i):(e=i.abs().cmp(1),t=r.precision,n=r.rounding,e!==-1?e===0?(o=Ot(r,t+4,n).times(.5),o.s=i.s,o):new r(NaN):(r.precision=t+6,r.rounding=1,i=i.div(new r(1).minus(i.times(i)).sqrt().plus(1)).atan(),r.precision=t,r.rounding=n,i.times(2)))};F.inverseTangent=F.atan=function(){var o,e,t,n,i,r,s,a,c,u=this,l=u.constructor,d=l.precision,m=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&d+4<=mr)return s=Ot(l,d+4,m).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(d+4<=mr)return s=Ot(l,d+4,m).times(.5),s.s=u.s,s}for(l.precision=a=d+10,l.rounding=1,t=Math.min(28,a/ee+2|0),o=t;o;--o)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(re=!1,e=Math.ceil(a/ee),n=1,c=u.times(u),s=new l(u),i=u;o!==-1;)if(i=i.times(c),r=s.minus(i.div(n+=2)),i=i.times(c),s=r.plus(i.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===r.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),re=!0,$(s,l.precision=d,l.rounding=m,!0)};F.isFinite=function(){return!!this.d};F.isInteger=F.isInt=function(){return!!this.d&&nt(this.e/ee)>this.d.length-2};F.isNaN=function(){return!this.s};F.isNegative=F.isNeg=function(){return this.s<0};F.isPositive=F.isPos=function(){return this.s>0};F.isZero=function(){return!!this.d&&this.d[0]===0};F.lessThan=F.lt=function(o){return this.cmp(o)<0};F.lessThanOrEqualTo=F.lte=function(o){return this.cmp(o)<1};F.logarithm=F.log=function(o){var e,t,n,i,r,s,a,c,u=this,l=u.constructor,d=l.precision,m=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)r=!0;else{for(i=t[0];i%10===0;)i/=10;r=i!==1}if(re=!1,a=d+p,s=on(u,a),n=e?ji(l,a+10):on(o,a),c=he(s,n,a,1),Zn(c.d,i=d,m))do if(a+=10,s=on(u,a),n=e?ji(l,a+10):on(o,a),c=he(s,n,a,1),!r){+Ze(c.d).slice(i+1,i+15)+1==1e14&&(c=$(c,d+1,0));break}while(Zn(c.d,i+=10,m));return re=!0,$(c,d,m)};F.minus=F.sub=function(o){var e,t,n,i,r,s,a,c,u,l,d,m,p=this,f=p.constructor;if(o=new f(o),!p.d||!o.d)return!p.s||!o.s?o=new f(NaN):p.d?o.s=-o.s:o=new f(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(u=p.d,m=o.d,a=f.precision,c=f.rounding,!u[0]||!m[0]){if(m[0])o.s=-o.s;else if(u[0])o=new f(p);else return new f(c===3?-0:0);return re?$(o,a,c):o}if(t=nt(o.e/ee),l=nt(p.e/ee),u=u.slice(),r=l-t,r){for(d=r<0,d?(e=u,r=-r,s=m.length):(e=m,t=l,s=u.length),n=Math.max(Math.ceil(a/ee),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=m.length,d=n<s,d&&(s=n),n=0;n<s;n++)if(u[n]!=m[n]){d=u[n]<m[n];break}r=0}for(d&&(e=u,u=m,m=e,o.s=-o.s),s=u.length,n=m.length-s;n>0;--n)u[s++]=0;for(n=m.length;n>r;){if(u[--n]<m[n]){for(i=n;i&&u[--i]===0;)u[i]=Mt-1;--u[i],u[n]+=Mt}u[n]-=m[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(o.d=u,o.e=$i(u,t),re?$(o,a,c):o):new f(c===3?-0:0)};F.modulo=F.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?$(new n(t),n.precision,n.rounding):(re=!1,n.modulo==9?(e=he(t,o.abs(),0,3,1),e.s*=o.s):e=he(t,o,0,n.modulo,1),e=e.times(o),re=!0,t.minus(e))};F.naturalExponential=F.exp=function(){return dr(this)};F.naturalLogarithm=F.ln=function(){return on(this)};F.negated=F.neg=function(){var o=new this.constructor(this);return o.s=-o.s,$(o)};F.plus=F.add=function(o){var e,t,n,i,r,s,a,c,u,l,d=this,m=d.constructor;if(o=new m(o),!d.d||!o.d)return!d.s||!o.s?o=new m(NaN):d.d||(o=new m(o.d||d.s===o.s?d:NaN)),o;if(d.s!=o.s)return o.s=-o.s,d.minus(o);if(u=d.d,l=o.d,a=m.precision,c=m.rounding,!u[0]||!l[0])return l[0]||(o=new m(d)),re?$(o,a,c):o;if(r=nt(d.e/ee),n=nt(o.e/ee),u=u.slice(),i=r-n,i){for(i<0?(t=u,i=-i,s=l.length):(t=l,n=r,s=u.length),r=Math.ceil(a/ee),s=r>s?r+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=u.length,i=l.length,s-i<0&&(i=s,t=l,l=u,u=t),e=0;i;)e=(u[--i]=u[i]+l[i]+e)/Mt|0,u[i]%=Mt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return o.d=u,o.e=$i(u,n),re?$(o,a,c):o};F.precision=F.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(rn+o);return t.d?(e=Qs(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};F.round=function(){var o=this,e=o.constructor;return $(new e(o),o.e+1,e.rounding)};F.sine=F.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ee,n.rounding=1,t=xc(n,Zs(n,t)),n.precision=o,n.rounding=e,$(Gt>2?t.neg():t,o,e,!0)):new n(NaN)};F.squareRoot=F.sqrt=function(){var o,e,t,n,i,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(re=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=Ze(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=nt((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(he(s,r,t+2,1)).times(.5),Ze(r.d).slice(0,t)===(e=Ze(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&($(r,c+1,0),r.times(r).eq(s))){n=r;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&($(n,c+1,1),o=!n.times(n).eq(s));break}return re=!0,$(n,c,l.rounding,o)};F.tangent=F.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=he(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,$(Gt==2||Gt==4?t.neg():t,o,e,!0)):new n(NaN)};F.times=F.mul=function(o){var e,t,n,i,r,s,a,c,u,l=this,d=l.constructor,m=l.d,p=(o=new d(o)).d;if(o.s*=l.s,!m||!m[0]||!p||!p[0])return new d(!o.s||m&&!m[0]&&!p||p&&!p[0]&&!m?NaN:!m||!p?o.s/0:o.s*0);for(t=nt(l.e/ee)+nt(o.e/ee),c=m.length,u=p.length,c<u&&(r=m,m=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,i=c+n;i>n;)a=r[i]+p[n]*m[i-n-1]+e,r[i--]=a%Mt|0,e=a/Mt|0;r[i]=(r[i]+e)%Mt|0}for(;!r[--s];)r.pop();return e?++t:r.shift(),o.d=r,o.e=$i(r,t),re?$(o,d.precision,d.rounding):o};F.toBinary=function(o,e){return fr(this,2,o,e)};F.toDecimalPlaces=F.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(dt(o,0,sn),e===void 0?e=n.rounding:dt(e,0,8),$(t,o+t.e+1,e))};F.toExponential=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Wt(n,!0):(dt(o,0,sn),e===void 0?e=i.rounding:dt(e,0,8),n=$(new i(n),o+1,e),t=Wt(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};F.toFixed=function(o,e){var t,n,i=this,r=i.constructor;return o===void 0?t=Wt(i):(dt(o,0,sn),e===void 0?e=r.rounding:dt(e,0,8),n=$(new r(i),o+i.e+1,e),t=Wt(n,!1,o+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};F.toFraction=function(o){var e,t,n,i,r,s,a,c,u,l,d,m,p=this,f=p.d,b=p.constructor;if(!f)return new b(p);if(u=t=new b(1),n=c=new b(0),e=new b(n),r=e.e=Qs(f)-p.e-1,s=r%ee,e.d[0]=Ge(10,s<0?ee+s:s),o==null)o=r>0?e:u;else{if(a=new b(o),!a.isInt()||a.lt(u))throw Error(rn+a);o=a.gt(e)?r>0?e:u:a}for(re=!1,a=new b(Ze(f)),l=b.precision,b.precision=r=f.length*ee*2;d=he(a,e,0,1,1),i=t.plus(d.times(n)),i.cmp(o)!=1;)t=n,n=i,i=u,u=c.plus(d.times(i)),c=i,i=e,e=a.minus(d.times(i)),a=i;return i=he(o.minus(t),n,0,1,1),c=c.plus(i.times(u)),t=t.plus(i.times(n)),c.s=u.s=p.s,m=he(u,n,r,1).minus(p).abs().cmp(he(c,t,r,1).minus(p).abs())<1?[u,n]:[c,t],b.precision=l,re=!0,m};F.toHexadecimal=F.toHex=function(o,e){return fr(this,16,o,e)};F.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:dt(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(re=!1,t=he(t,o,0,e,1).times(o),re=!0,$(t)):(o.s=t.s,t=o),t};F.toNumber=function(){return+this};F.toOctal=function(o,e){return fr(this,8,o,e)};F.toPower=F.pow=function(o){var e,t,n,i,r,s,a=this,c=a.constructor,u=+(o=new c(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new c(Ge(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,r=c.rounding,o.eq(1))return $(a,n,r);if(e=nt(o.e/ee),e>=o.d.length-1&&(t=u<0?-u:u)<=hc)return i=Ys(c,a,t,n),o.s<0?new c(1).div(i):$(i,n,r);if(s=a.s,s<0){if(e<o.d.length-1)return new c(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Ge(+a,u),e=t==0||!isFinite(t)?nt(u*(Math.log("0."+Ze(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(re=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),i=dr(o.times(on(a,n+t)),n),i.d&&(i=$(i,n+5,1),Zn(i.d,n,r)&&(e=n+10,i=$(dr(o.times(on(a,e+t)),e),e+5,1),+Ze(i.d).slice(n+1,n+15)+1==1e14&&(i=$(i,n+1,0)))),i.s=s,re=!0,c.rounding=r,$(i,n,r))};F.toPrecision=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Wt(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(dt(o,1,sn),e===void 0?e=i.rounding:dt(e,0,8),n=$(new i(n),o,e),t=Wt(n,o<=n.e||n.e<=i.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};F.toSignificantDigits=F.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(dt(o,1,sn),e===void 0?e=n.rounding:dt(e,0,8)),$(new n(t),o,e)};F.toString=function(){var o=this,e=o.constructor,t=Wt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};F.truncated=F.trunc=function(){return $(new this.constructor(this),this.e+1,1)};F.valueOf=F.toJSON=function(){var o=this,e=o.constructor,t=Wt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function Ze(o){var e,t,n,i=o.length-1,r="",s=o[0];if(i>0){for(r+=s,e=1;e<i;e++)n=o[e]+"",t=ee-n.length,t&&(r+=nn(t)),r+=n;s=o[e],n=s+"",t=ee-n.length,t&&(r+=nn(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return r+s}function dt(o,e,t){if(o!==~~o||o<e||o>t)throw Error(rn+o)}function Zn(o,e,t,n){var i,r,s,a;for(r=o[0];r>=10;r/=10)--e;return--e<0?(e+=ee,i=0):(i=Math.ceil((e+1)/ee),e%=ee),r=Ge(10,ee-e),a=o[i]%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)&&(o[i+1]/r/100|0)==Ge(10,e-2)-1||(a==r/2||a==0)&&(o[i+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)&&(o[i+1]/r/1e3|0)==Ge(10,e-3)-1,s}function Qi(o,e,t){for(var n,i=[0],r,s=0,a=o.length;s<a;){for(r=i.length;r--;)i[r]*=e;for(i[0]+=cr.indexOf(o.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function Ic(o,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/Ji(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),o.precision+=t,e=_n(o,1,e.times(i),new o(1));for(var r=t;r--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var he=function(){function o(n,i,r){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*i+a,n[c]=s%r|0,a=s/r|0;return a&&n.unshift(a),n}function e(n,i,r,s){var a,c;if(r!=s)c=r>s?1:-1;else for(a=c=0;a<r;a++)if(n[a]!=i[a]){c=n[a]>i[a]?1:-1;break}return c}function t(n,i,r,s){for(var a=0;r--;)n[r]-=a,a=n[r]<i[r]?1:0,n[r]=a*s+n[r]-i[r];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,r,s,a,c){var u,l,d,m,p,f,b,y,g,w,k,P,T,h,S,x,K,B,C,M,R=n.constructor,_=n.s==i.s?1:-1,q=n.d,N=i.d;if(!q||!q[0]||!N||!N[0])return new R(!n.s||!i.s||(q?N&&q[0]==N[0]:!N)?NaN:q&&q[0]==0||!N?_*0:_/0);for(c?(p=1,l=n.e-i.e):(c=Mt,p=ee,l=nt(n.e/p)-nt(i.e/p)),C=N.length,K=q.length,g=new R(_),w=g.d=[],d=0;N[d]==(q[d]||0);d++);if(N[d]>(q[d]||0)&&l--,r==null?(h=r=R.precision,s=R.rounding):a?h=r+(n.e-i.e)+1:h=r,h<0)w.push(1),f=!0;else{if(h=h/p+2|0,d=0,C==1){for(m=0,N=N[0],h++;(d<K||m)&&h--;d++)S=m*c+(q[d]||0),w[d]=S/N|0,m=S%N|0;f=m||d<K}else{for(m=c/(N[0]+1)|0,m>1&&(N=o(N,m,c),q=o(q,m,c),C=N.length,K=q.length),x=C,k=q.slice(0,C),P=k.length;P<C;)k[P++]=0;M=N.slice(),M.unshift(0),B=N[0],N[1]>=c/2&&++B;do m=0,u=e(N,k,C,P),u<0?(T=k[0],C!=P&&(T=T*c+(k[1]||0)),m=T/B|0,m>1?(m>=c&&(m=c-1),b=o(N,m,c),y=b.length,P=k.length,u=e(b,k,y,P),u==1&&(m--,t(b,C<y?M:N,y,c))):(m==0&&(u=m=1),b=N.slice()),y=b.length,y<P&&b.unshift(0),t(k,b,P,c),u==-1&&(P=k.length,u=e(N,k,C,P),u<1&&(m++,t(k,C<P?M:N,P,c))),P=k.length):u===0&&(m++,k=[0]),w[d++]=m,u&&k[0]?k[P++]=q[x]||0:(k=[q[x]],P=1);while((x++<K||k[0]!==void 0)&&h--);f=k[0]!==void 0}w[0]||w.shift()}if(p==1)g.e=l,qs=f;else{for(d=1,m=w[0];m>=10;m/=10)d++;g.e=d+l*p-1,$(g,a?r+g.e+1:r,s,f)}return g}}();function $(o,e,t,n){var i,r,s,a,c,u,l,d,m,p=o.constructor;e:if(e!=null){if(d=o.d,!d)return o;for(i=1,a=d[0];a>=10;a/=10)i++;if(r=e-i,r<0)r+=ee,s=e,l=d[m=0],c=l/Ge(10,i-s-1)%10|0;else if(m=Math.ceil((r+1)/ee),a=d.length,m>=a)if(n){for(;a++<=m;)d.push(0);l=c=0,i=1,r%=ee,s=r-ee+1}else break e;else{for(l=a=d[m],i=1;a>=10;a/=10)i++;r%=ee,s=r-ee+i,c=s<0?0:l/Ge(10,i-s-1)%10|0}if(n=n||e<0||d[m+1]!==void 0||(s<0?l:l%Ge(10,i-s-1)),u=t<4?(c||n)&&(t==0||t==(o.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(r>0?s>0?l/Ge(10,i-s):0:d[m-1])%10&1||t==(o.s<0?8:7)),e<1||!d[0])return d.length=0,u?(e-=o.e+1,d[0]=Ge(10,(ee-e%ee)%ee),o.e=-e||0):d[0]=o.e=0,o;if(r==0?(d.length=m,a=1,m--):(d.length=m+1,a=Ge(10,ee-r),d[m]=s>0?(l/Ge(10,i-s)%Ge(10,s)|0)*a:0),u)for(;;)if(m==0){for(r=1,s=d[0];s>=10;s/=10)r++;for(s=d[0]+=a,a=1;s>=10;s/=10)a++;r!=a&&(o.e++,d[0]==Mt&&(d[0]=1));break}else{if(d[m]+=a,d[m]!=Mt)break;d[m--]=0,a=1}for(r=d.length;d[--r]===0;)d.pop()}return re&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Wt(o,e,t){if(!o.isFinite())return js(o);var n,i=o.e,r=Ze(o.d),s=r.length;return e?(t&&(n=t-s)>0?r=r.charAt(0)+"."+r.slice(1)+nn(n):s>1&&(r=r.charAt(0)+"."+r.slice(1)),r=r+(o.e<0?"e":"e+")+o.e):i<0?(r="0."+nn(-i-1)+r,t&&(n=t-s)>0&&(r+=nn(n))):i>=s?(r+=nn(i+1-s),t&&(n=t-i-1)>0&&(r=r+"."+nn(n))):((n=i+1)<s&&(r=r.slice(0,n)+"."+r.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(r+="."),r+=nn(n))),r}function $i(o,e){var t=o[0];for(e*=ee;t>=10;t/=10)e++;return e}function ji(o,e,t){if(e>Tc)throw re=!0,t&&(o.precision=t),Error(Us);return $(new o(Yi),e,1,!0)}function Ot(o,e,t){if(e>mr)throw Error(Us);return $(new o(Hi),e,t,!0)}function Qs(o){var e=o.length-1,t=e*ee+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function nn(o){for(var e="";o--;)e+="0";return e}function Ys(o,e,t,n){var i,r=new o(1),s=Math.ceil(n/ee+4);for(re=!1;;){if(t%2&&(r=r.times(e),Ds(r.d,s)&&(i=!0)),t=nt(t/2),t===0){t=r.d.length-1,i&&r.d[t]===0&&++r.d[t];break}e=e.times(e),Ds(e.d,s)}return re=!0,r}function Fs(o){return o.d[o.d.length-1]&1}function Hs(o,e,t){for(var n,i=new o(e[0]),r=0;++r<e.length;)if(n=new o(e[r]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function dr(o,e){var t,n,i,r,s,a,c,u=0,l=0,d=0,m=o.constructor,p=m.rounding,f=m.precision;if(!o.d||!o.d[0]||o.e>17)return new m(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(re=!1,c=f):c=e,a=new m(.03125);o.e>-2;)o=o.times(a),d+=5;for(n=Math.log(Ge(2,d))/Math.LN10*2+5|0,c+=n,t=r=s=new m(1),m.precision=c;;){if(r=$(r.times(o),c,1),t=t.times(++l),a=s.plus(he(r,t,c,1)),Ze(a.d).slice(0,c)===Ze(s.d).slice(0,c)){for(i=d;i--;)s=$(s.times(s),c,1);if(e==null)if(u<3&&Zn(s.d,c-n,p,u))m.precision=c+=10,t=r=a=new m(1),l=0,u++;else return $(s,m.precision=f,p,re=!0);else return m.precision=f,s}s=a}}function on(o,e){var t,n,i,r,s,a,c,u,l,d,m,p=1,f=10,b=o,y=b.d,g=b.constructor,w=g.rounding,k=g.precision;if(b.s<0||!y||!y[0]||!b.e&&y[0]==1&&y.length==1)return new g(y&&!y[0]?-1/0:b.s!=1?NaN:y?0:b);if(e==null?(re=!1,l=k):l=e,g.precision=l+=f,t=Ze(y),n=t.charAt(0),Math.abs(r=b.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)b=b.times(o),t=Ze(b.d),n=t.charAt(0),p++;r=b.e,n>1?(b=new g("0."+t),r++):b=new g(n+"."+t.slice(1))}else return u=ji(g,l+2,k).times(r+""),b=on(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=k,e==null?$(b,k,w,re=!0):b;for(d=b,c=s=b=he(b.minus(1),b.plus(1),l,1),m=$(b.times(b),l,1),i=3;;){if(s=$(s.times(m),l,1),u=c.plus(he(s,new g(i),l,1)),Ze(u.d).slice(0,l)===Ze(c.d).slice(0,l))if(c=c.times(2),r!==0&&(c=c.plus(ji(g,l+2,k).times(r+""))),c=he(c,new g(p),l,1),e==null)if(Zn(c.d,l-f,w,a))g.precision=l+=f,u=s=b=he(d.minus(1),d.plus(1),l,1),m=$(b.times(b),l,1),i=a=1;else return $(c,g.precision=k,w,re=!0);else return g.precision=k,c;c=u,i+=2}}function js(o){return String(o.s*o.s/0)}function pr(o,e){var t,n,i;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%ee,t<0&&(n+=ee),n<i){for(n&&o.d.push(+e.slice(0,n)),i-=ee;n<i;)o.d.push(+e.slice(n,n+=ee));e=e.slice(n),n=ee-e.length}else n-=i;for(;n--;)e+="0";o.d.push(+e),re&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function Bc(o,e){var t,n,i,r,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),zs.test(e))return pr(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(kc.test(e))t=16,e=e.toLowerCase();else if(Ac.test(e))t=2;else if(Pc.test(e))t=8;else throw Error(rn+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=o.constructor,s&&(e=e.replace(".",""),a=e.length,r=a-r,i=Ys(n,new n(t),r,r*2)),u=Qi(e,t,Mt),l=u.length-1,r=l;u[r]===0;--r)u.pop();return r<0?new n(o.s*0):(o.e=$i(u,l),o.d=u,re=!1,s&&(o=he(o,i,a*4)),c&&(o=o.times(Math.abs(c)<54?Ge(2,c):$n.pow(2,c))),re=!0,o)}function xc(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:_n(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Ji(5,t)),e=_n(o,2,e,e);for(var i,r=new o(5),s=new o(16),a=new o(20);t--;)i=e.times(e),e=e.times(r.plus(i.times(s.times(i).minus(a))));return e}function _n(o,e,t,n,i){var r,s,a,c,u=1,l=o.precision,d=Math.ceil(l/ee);for(re=!1,c=t.times(t),a=new o(n);;){if(s=he(a.times(c),new o(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=he(s.times(c),new o(e++*e++),l,1),s=a.plus(n),s.d[d]!==void 0){for(r=d;s.d[r]===a.d[r]&&r--;);if(r==-1)break}r=a,a=n,n=s,s=r,u++}return re=!0,s.d.length=d+1,s}function Ji(o,e){for(var t=o;--e;)t*=o;return t}function Zs(o,e){var t,n=e.s<0,i=Ot(o,o.precision,1),r=i.times(.5);if(e=e.abs(),e.lte(r))return Gt=n?4:1,e;if(t=e.divToInt(i),t.isZero())Gt=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(r))return Gt=Fs(t)?n?2:3:n?4:1,e;Gt=Fs(t)?n?1:4:n?3:2}return e.minus(i).abs()}function fr(o,e,t,n){var i,r,s,a,c,u,l,d,m,p=o.constructor,f=t!==void 0;if(f?(dt(t,1,sn),n===void 0?n=p.rounding:dt(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=js(o);else{for(l=Wt(o),s=l.indexOf("."),f?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),m=new p(1),m.e=l.length-s,m.d=Qi(Wt(m),10,i),m.e=m.d.length),d=Qi(l,10,i),r=c=d.length;d[--c]==0;)d.pop();if(!d[0])l=f?"0p+0":"0";else{if(s<0?r--:(o=new p(o),o.d=d,o.e=r,o=he(o,m,t,n,0,i),d=o.d,r=o.e,u=qs),s=d[t],a=i/2,u=u||d[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&d[t-1]&1||n===(o.s<0?8:7)),d.length=t,u)for(;++d[--t]>i-1;)d[t]=0,t||(++r,d.unshift(1));for(c=d.length;!d[c-1];--c);for(s=0,l="";s<c;s++)l+=cr.charAt(d[s]);if(f){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(d=Qi(l,i,e),c=d.length;!d[c-1];--c);for(s=1,l="1.";s<c;s++)l+=cr.charAt(d[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 o.s<0?"-"+l:l}function Ds(o,e){if(o.length>e)return o.length=e,!0}function Sc(o){return new this(o).abs()}function Kc(o){return new this(o).acos()}function Cc(o){return new this(o).acosh()}function Rc(o,e){return new this(o).plus(e)}function Lc(o){return new this(o).asin()}function Oc(o){return new this(o).asinh()}function Mc(o){return new this(o).atan()}function Nc(o){return new this(o).atanh()}function vc(o,e){o=new this(o),e=new this(e);var t,n=this.precision,i=this.rounding,r=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=Ot(this,r,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?Ot(this,n,i):new this(0),t.s=o.s):!o.d||e.isZero()?(t=Ot(this,r,1).times(.5),t.s=o.s):e.s<0?(this.precision=r,this.rounding=1,t=this.atan(he(o,e,r,1)),e=Ot(this,r,1),this.precision=n,this.rounding=i,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(he(o,e,r,1)),t}function _c(o){return new this(o).cbrt()}function Vc(o){return $(o=new this(o),o.e+1,2)}function Ec(o,e,t){return new this(o).clamp(e,t)}function Fc(o){if(!o||typeof o!="object")throw Error(Zi+"Object expected");var e,t,n,i=o.defaults===!0,r=["precision",1,sn,"rounding",0,8,"toExpNeg",-vn,0,"toExpPos",0,vn,"maxE",0,vn,"minE",-vn,0,"modulo",0,9];for(e=0;e<r.length;e+=3)if(t=r[e],i&&(this[t]=lr[t]),(n=o[t])!==void 0)if(nt(n)===n&&n>=r[e+1]&&n<=r[e+2])this[t]=n;else throw Error(rn+t+": "+n);if(t="crypto",i&&(this[t]=lr[t]),(n=o[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(Gs);else this[t]=!1;else throw Error(rn+t+": "+n);return this}function Dc(o){return new this(o).cos()}function Wc(o){return new this(o).cosh()}function $s(o){var e,t,n;function i(r){var s,a,c,u=this;if(!(u instanceof i))return new i(r);if(u.constructor=i,Ws(r)){u.s=r.s,re?!r.d||r.e>i.maxE?(u.e=NaN,u.d=null):r.e<i.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++;re?s>i.maxE?(u.e=NaN,u.d=null):s<i.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 pr(u,r.toString())}else if(c!=="string")throw Error(rn+r);return(a=r.charCodeAt(0))===45?(r=r.slice(1),u.s=-1):(a===43&&(r=r.slice(1)),u.s=1),zs.test(r)?pr(u,r):Bc(u,r)}if(i.prototype=F,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Fc,i.clone=$s,i.isDecimal=Ws,i.abs=Sc,i.acos=Kc,i.acosh=Cc,i.add=Rc,i.asin=Lc,i.asinh=Oc,i.atan=Mc,i.atanh=Nc,i.atan2=vc,i.cbrt=_c,i.ceil=Vc,i.clamp=Ec,i.cos=Dc,i.cosh=Wc,i.div=qc,i.exp=Uc,i.floor=Gc,i.hypot=Xc,i.ln=zc,i.log=Qc,i.log10=Hc,i.log2=Yc,i.max=jc,i.min=Zc,i.mod=$c,i.mul=Jc,i.pow=el,i.random=tl,i.round=nl,i.sign=il,i.sin=ol,i.sinh=rl,i.sqrt=sl,i.sub=al,i.sum=ul,i.tan=cl,i.tanh=ll,i.trunc=ml,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return i.config(o),i}function qc(o,e){return new this(o).div(e)}function Uc(o){return new this(o).exp()}function Gc(o){return $(o=new this(o),o.e+1,3)}function Xc(){var o,e,t=new this(0);for(re=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return re=!0,new this(1/0);t=e}return re=!0,t.sqrt()}function Ws(o){return o instanceof $n||o&&o.toStringTag===Xs||!1}function zc(o){return new this(o).ln()}function Qc(o,e){return new this(o).log(e)}function Yc(o){return new this(o).log(2)}function Hc(o){return new this(o).log(10)}function jc(){return Hs(this,arguments,"lt")}function Zc(){return Hs(this,arguments,"gt")}function $c(o,e){return new this(o).mod(e)}function Jc(o,e){return new this(o).mul(e)}function el(o,e){return new this(o).pow(e)}function tl(o){var e,t,n,i,r=0,s=new this(1),a=[];if(o===void 0?o=this.precision:dt(o,1,sn),n=Math.ceil(o/ee),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));r<n;)i=e[r],i>=429e7?e[r]=crypto.getRandomValues(new Uint32Array(1))[0]:a[r++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);r<n;)i=e[r]+(e[r+1]<<8)+(e[r+2]<<16)+((e[r+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,r):(a.push(i%1e7),r+=4);r=n/4}else throw Error(Gs);else for(;r<n;)a[r++]=Math.random()*1e7|0;for(n=a[--r],o%=ee,n&&o&&(i=Ge(10,ee-o),a[r]=(n/i|0)*i);a[r]===0;r--)a.pop();if(r<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ee)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<ee&&(t-=ee-n)}return s.e=t,s.d=a,s}function nl(o){return $(o=new this(o),o.e+1,this.rounding)}function il(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function ol(o){return new this(o).sin()}function rl(o){return new this(o).sinh()}function sl(o){return new this(o).sqrt()}function al(o,e){return new this(o).sub(e)}function ul(){var o=0,e=arguments,t=new this(e[o]);for(re=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return re=!0,$(t,this.precision,this.rounding)}function cl(o){return new this(o).tan()}function ll(o){return new this(o).tanh()}function ml(o){return $(o=new this(o),o.e+1,1)}F[Symbol.for("nodejs.util.inspect.custom")]=F.toString;F[Symbol.toStringTag]="Decimal";var $n=F.constructor=$s(lr);Yi=new $n(Yi);Hi=new $n(Hi);var v=$n;import Al from"big.js";import no from"bn.js";import dl from"toformat";var pl=dl,Jn=pl;import to from"big.js";import bl from"bn.js";import yl from"decimal.js-light";import ei from"bn.js";var Js=9007199254740991;function Z(o){let e=le("Raydium_parseBigNumberish");if(o instanceof ei)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new ei(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=Js||o<=-Js)&&e.logWithError(`BigNumberish number overflow: ${o}`),new ei(String(o))):typeof o=="bigint"?new ei(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new ei(0))}var eo=le("module/fraction"),br=Jn(to),ti=Jn(yl),gl={[0]:ti.ROUND_DOWN,[1]:ti.ROUND_HALF_UP,[2]:ti.ROUND_UP},wl={[0]:to.roundDown,[1]:to.roundHalfUp,[2]:to.roundUp},be=class{constructor(e,t=new bl(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new be(this.denominator,this.numerator)}add(e){let t=e instanceof be?e:new be(Z(e));return this.denominator.eq(t.denominator)?new be(this.numerator.add(t.numerator),this.denominator):new be(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof be?e:new be(Z(e));return this.denominator.eq(t.denominator)?new be(this.numerator.sub(t.numerator),this.denominator):new be(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof be?e:new be(Z(e));return new be(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof be?e:new be(Z(e));return new be(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||eo.logWithError(`${e} is not an integer.`),e<=0&&eo.logWithError(`${e} is not positive.`),ti.set({precision:e+1,rounding:gl[n]});let i=new ti(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||eo.logWithError(`${e} is not an integer.`),e<0&&eo.logWithError(`${e} is negative.`),br.DP=e,br.RM=wl[n]||1,new br(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var kl=le("Raydium_amount"),ea=Jn(Al);function Pl(o,e){let t="0",n="0";if(o.includes(".")){let i=o.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):kl.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var ge=class extends be{constructor(t,n,i=!0,r){let s=new no(0),a=yr.pow(new no(t.decimals));if(i)s=Z(n);else{let c=new no(0),u=new no(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,d]=Pl(n.toString(),t.decimals);c=Z(l),u=Z(d)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=le(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 ge(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ge(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return ea.DP=this.token.decimals,new ea(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as hl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ta}from"@solana/spl-token";var an={chainId:101,address:hl.default.toBase58(),programId:ta.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},it={chainId:101,address:"So11111111111111111111111111111111111111112",programId:ta.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 Pr}from"@solana/web3.js";import{PublicKey as Ce,SystemProgram as na,SYSVAR_RENT_PUBKEY as Tl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Il}from"@solana/spl-token";function I({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var gr=[I({pubkey:Il,isWritable:!1}),I({pubkey:na.programId,isWritable:!1}),I({pubkey:Tl,isWritable:!1})];function wr({publicKey:o,transformSol:e}){let t=Ar(o.toString());if(t instanceof Ce)return e&&t.equals(Qe)?j:t;if(e&&t.toString()===Qe.toBase58())return j;if(typeof t=="string"){if(t===Ce.default.toBase58())return Ce.default;try{return new Ce(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Ar(o){try{return new Ce(o)}catch{return o}}var io=new Ce("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),un=new Ce("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ut=new Ce("SysvarRent111111111111111111111111111111111"),ia=new Ce("SysvarC1ock11111111111111111111111111111111"),Xt=new Ce("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Bl=new Ce("Sysvar1nstructions1111111111111111111111111"),kr=na.programId,Hp=new Ce("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),jp=new Ce("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Zp=new Ce("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),$p=new Ce("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Jp=new Ce("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),ef=new Ce("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),tf=new Ce("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),nf=new Ce("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),of=new Ce("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),rf=new Ce("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),sf=new Ce("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),j=new Ce("So11111111111111111111111111111111111111112"),Qe=Ce.default;function tt(o){return wr({publicKey:o,transformSol:!0})}var hr=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:r=!1,isToken2022:s=!1}){if(e===Qe.toBase58()||e instanceof Pr&&Qe.equals(e)){this.decimals=it.decimals,this.symbol=it.symbol,this.name=it.name,this.mint=new Pr(it.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=r?Pr.default:wr({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Re=hr;Re.WSOL=new hr(U(O({},it),{mint:it.address}));var Tr=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},oo=Tr;oo.SOL=new Tr(an);import xl from"bn.js";var oa=new be(new xl(100)),Ye=class extends be{toSignificant(e=5,t,n){return this.mul(oa).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(oa).toFixed(e,t,n)}};var Sl=le("Raydium_price"),pt=class extends be{constructor(t){let{baseToken:n,quoteToken:i,numerator:r,denominator:s}=t;super(r,s);this.baseToken=n,this.quoteToken=i,this.scalar=new be(Ir(n.decimals),Ir(i.decimals))}get raw(){return new be(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new pt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Sl.logWithError("mul token not equals");let n=super.mul(t);return new pt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};import{PublicKey as Kl}from"@solana/web3.js";import Cl from"bn.js";function ra(o){return typeof o=="object"&&o!==null&&![Re,ge,Kl,be,Cl,pt,Ye].some(e=>typeof e=="object"&&o instanceof e)}function $e(o){return typeof o=="string"?Ar(o):Array.isArray(o)?o.map(e=>$e(e)):ra(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,$e(t)])):o}var ft=new zt(0),sa=new zt(1),tb=new zt(2),nb=new zt(3),ib=new zt(5),yr=new zt(10),ob=new zt(100),rb=new zt(1e3),sb=new zt(1e4);function Ir(o){return yr.pow(Z(o))}function ro(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function ur(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var Nt=class{constructor(e){this._owner=e}get publicKey(){return Nt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return Nt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return Nt.isKeyPair(this._owner)}get isPublicKey(){return Nt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!Nt.isKeyPair(e)}};import{PublicKey as vl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as _l}from"@solana/spl-token";import{ComputeBudgetProgram as aa,Keypair as ca,PublicKey as Rl,Transaction as la,TransactionMessage as Ll,VersionedTransaction as ma}from"@solana/web3.js";var D={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 Ol}from"@solana/spl-token";var ua=le("Raydium_txUtil"),da=1644;function so(o){let e=[],t=[];return o.microLamports&&(e.push(aa.setComputeUnitPrice({microLamports:o.microLamports})),t.push(D.SetComputeUnitPrice)),o.units&&(e.push(aa.setComputeUnitLimit({units:o.units})),t.push(D.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Vn(o,e){var n,i;let t=e!=null?e:"confirmed";return(i=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:i.blockhash}async function ao(o,e){return o.getSignatureStatuses([e]),new Promise((t,n)=>{let i=setTimeout(n,6e4);o.onSignature(e,r=>{if(clearTimeout(i),!r.err){t("");return}n(Object.assign(r.err,{txId:e}))},"confirmed")})}function Br(o,e){o.length<1&&ua.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&ua.logWithError(`no signers provided:, ${e.toString()}`);let t=new la;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<da}catch{return!1}}function me(o,e){let[t,n]=Rl.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}function ni({instructions:o,payer:e,signers:t}){return Br(o,[e,...t])}function ii({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=ca.generate().publicKey.toString()}){let r=new Ll({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new ma(r).serialize()).toString("base64").length<da}catch{return!1}}var Ml=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o),Nl=o=>{let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});o instanceof ma&&(e=Ml(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function wn(o){let e=[];return o.forEach(t=>{t instanceof la&&(t.recentBlockhash||(t.recentBlockhash=Ol.toBase58()),t.feePayer||(t.feePayer=ca.generate().publicKey)),e.push(Nl(t))}),console.log("simulate tx string:",e),e}function ie(o,e,t){return me([o.toBuffer(),(t!=null?t:_l).toBuffer(),e.toBuffer()],new vl("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ae}from"@solana/web3.js";var pa=new ae("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),fa=new ae("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),ba=new ae("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),oi=new ae("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Sb=new ae("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),ya=new ae("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),xr=new ae("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),uo=new ae("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Kb=new ae("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ga=new ae("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),An=new ae("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ri=new ae("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),co=new ae("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),Cb=new ae("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),wa=new ae("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Vl=new ae("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),El=new ae("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Fl=new ae("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Dl=new ae("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),lo=new ae("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Aa=new ae("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Rb=new ae("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Wl=new ae("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),ql=new ae("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Ul=new ae("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),mo=new ae("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Gl=new ae("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),po=new ae("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),Xl=new ae("7AFUeLVRjBfzqK3tTGw8hN48KLQWSk6DTE8xprWdPqix"),si={IDO_PROGRAM_ID_V1:Vl,IDO_PROGRAM_ID_V2:El,IDO_PROGRAM_ID_V3:Fl,IDO_PROGRAM_ID_V4:Dl};var Lb={SERUM_MARKET:ae.default,OPENBOOK_MARKET:new ae("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ae.default,FarmV3:new ae("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ae("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ae("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ae("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ae("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ae("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),CLMM_LOCK_PROGRAM_ID:new ae("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),CLMM_LOCK_AUTH_ID:new ae("8qmHNvu2Kr2C7U8mJL4Vz1vTDxMhVuXKREwU7TNoaVEo"),Router:new ae("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Wl,CREATE_CPMM_POOL_AUTH:ql,CREATE_CPMM_POOL_FEE_ACC:Ul,FEE_DESTINATION_ID:new ae("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR"),LOCK_CPMM_PROGRAM:Gl,LCOK_CPMM_AUTH:Xl};import vt from"bn.js";var ai=1e4;function we(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let i=U(O({},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<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new vt(r.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===ai){let c=new vt(r.maximumFee.toString());return{amount:o.add(c),fee:c,expirationTime:a}}else{let c=cn(o.mul(new vt(ai)),new vt(ai-r.transferFeeBasisPoints)),u=new vt(r.maximumFee.toString()),l=c.sub(o).gt(u)?o.add(u):c,d=cn(l.mul(new vt(r.transferFeeBasisPoints)),new vt(ai)),m=d.gt(s)?s:d;return{amount:l,fee:m,expirationTime:a}}else{let c=cn(o.mul(new vt(r.transferFeeBasisPoints)),new vt(ai)),u=c.gt(s)?s:c;return{amount:o,fee:u,expirationTime:a}}}function _t(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function cn(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new vt(0))?t.add(new vt(1)):t}import{PublicKey as ka,AddressLookupTableAccount as fo}from"@solana/web3.js";async function Sr({connection:o,address:e}){let t=await Lt(o,[...new Set(e.map(i=>i.toString()))].map(i=>new ka(i))),n={};for(let i=0;i<e.length;i++){let r=t[i],s=e[i];if(!r)continue;let a=new fo({key:s,state:fo.deserialize(r.data)});n[s.toString()]=a,bo[s.toString()]=a}return n}var bo={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new fo({key:new ka("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:fo.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};import{PublicKey as En,sendAndConfirmTransaction as Kr,SystemProgram as zl,Transaction as ui,TransactionMessage as ci,VersionedTransaction as li}from"@solana/web3.js";import Ql from"axios";var yo=2e3,go=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 Ql.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}=so(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){return e?(this.endInstructions.push(zl.transfer({fromPubkey:this.owner.publicKey,toPubkey:new En(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(D.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:i=[],endInstructionTypes:r=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...r),this.lookupTableAddress.push(...s.filter(a=>a!==En.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(O({},t||{})):this.build(t)}build(e){var n;let t=new ui;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(i=>i.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 i=>{var u;let{recentBlockHash:r,skipPreflight:s=!0,sendAndConfirm:a}=i||{},c=r!=null?r:await Vn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),wn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await Kr(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 l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),r=t.filter(l=>l.transaction.instructions.length>0),s=[i,...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(d=>d.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:d,onTxUpdate:m,skipTxCount:p=0,recentBlockHash:f,skipPreflight:b=!0}=l||{},y=f!=null?f:await Vn(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(d){let w=[],k=0;for(let P of s){if(++k,k<=p)continue;let T=await Kr(this.connection,P,this.signers.find(h=>h.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:b});w.push(T)}return{txIds:w,signedTxs:s}}return{txIds:await await Promise.all(s.map(async w=>(w.recentBlockhash=y,await this.connection.sendRawTransaction(w.serialize(),{skipPreflight:b})))),signedTxs:s}}if(this.signAllTransactions){let w=s.map((P,T)=>(P.recentBlockhash=y,a[T].length&&P.sign(...a[T]),P));wn(w);let k=await this.signAllTransactions(w);if(d){let P=0,T=[],h=async()=>{if(!k[P])return;let S=await this.connection.sendRawTransaction(k[P].serialize(),{skipPreflight:b});T.push({txId:S,status:"sent",signedTx:k[P]}),m==null||m([...T]),P++;let x=!1,K=null,B=null,C=M=>{K!==null&&clearInterval(K),B!==null&&this.connection.removeSignatureListener(B);let R=T.findIndex(_=>_.txId===S);if(R>-1){if(T[R].status==="error"||T[R].status==="success")return;T[R].status=M.err?"error":"success"}m==null||m([...T]),M.err||h()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var M;if(x){clearInterval(K);return}try{let R=await this.connection.getTransaction(S,{commitment:"confirmed",maxSupportedTransactionVersion:0});R&&(x=!0,clearInterval(K),C({err:((M=R.meta)==null?void 0:M.err)||null}),console.log("tx status from getTransaction:",S))}catch(R){x=!0,clearInterval(K),console.error("getTransaction timeout:",R,S)}},yo)),B=this.connection.onSignature(S,M=>{if(x){this.connection.removeSignatureListener(B);return}x=!0,C(M)},"confirmed"),this.connection.getSignatureStatus(S)};return await h(),{txIds:T.map(S=>S.txId),signedTxs:k}}else{let P=[];for(let T=0;T<k.length;T+=1){let h=await this.connection.sendRawTransaction(k[T].serialize(),{skipPreflight:b});P.push(h)}return{txIds:P,signedTxs:k}}}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 b;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:r}=f,s=De(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=O(O({},this.cluster==="devnet"?{}:bo),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let y of c)a[y]===void 0&&u.push(new En(y));let l=await Sr({connection:this.connection,address:u});for(let[y,g]of Object.entries(l))a[y]=g;let d=i?En.default.toBase58():r!=null?r:await Vn(this.connection,this.blockhashCommitment),m=new ci({payerKey:this.feePayer,recentBlockhash:d,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((b=this.owner)==null?void 0:b.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new li(m);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var k;let{skipPreflight:g=!0,sendAndConfirm:w}=y||{};if(wn([p]),(k=this.owner)!=null&&k.isKeyPair){let P=await this.connection.sendTransaction(p,{skipPreflight:g});return w&&await ao(this.connection,P),{txId:P,signedTx:p}}if(this.signAllTransactions){let P=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(P[0],{skipPreflight:g}),signedTx:P[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:i}=await this.buildV0(n),r=t.filter(l=>l.builder.instructions.length>0),s=[i,...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(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,d)=>{l.sign(a[d])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var b;let{sequentially:d,onTxUpdate:m,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&s.forEach(y=>y.message.recentBlockhash=p),wn(s),(b=this.owner)!=null&&b.isKeyPair){if(d){let y=[];for(let g of s){let w=await this.connection.sendTransaction(g,{skipPreflight:f});await ao(this.connection,w),y.push(w)}return{txIds:y,signedTxs:s}}return{txIds:await Promise.all(s.map(async y=>await this.connection.sendTransaction(y,{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let y=await this.signAllTransactions(s);if(d){let g=0,w=[],k=async()=>{if(!y[g])return;let P=await this.connection.sendTransaction(y[g],{skipPreflight:f});w.push({txId:P,status:"sent",signedTx:y[g]}),m==null||m([...w]),g++;let T=!1,h=null,S=null,x=K=>{h!==null&&clearInterval(h),S!==null&&this.connection.removeSignatureListener(S);let B=w.findIndex(C=>C.txId===P);if(B>-1){if(w[B].status==="error"||w[B].status==="success")return;w[B].status=K.err?"error":"success"}m==null||m([...w]),K.err||k()};this.loopMultiTxStatus&&(h=setInterval(async()=>{var K;if(T){clearInterval(h);return}try{let B=await this.connection.getTransaction(P,{commitment:"confirmed",maxSupportedTransactionVersion:0});B&&(T=!0,clearInterval(h),x({err:((K=B.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",P))}catch(B){T=!0,clearInterval(h),console.error("getTransaction timeout:",B,P)}},yo)),S=this.connection.onSignature(P,K=>{if(T){this.connection.removeSignatureListener(S);return}T=!0,x(K)},"confirmed"),this.connection.getSignatureStatus(P)};return k(),{txIds:[],signedTxs:y}}else{let g=[];for(let w=0;w<y.length;w+=1){let k=await this.connection.sendTransaction(y[w],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:y}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var m;let d=e||{},{splitIns:t=[],computeBudgetConfig:n}=d,i=De(d,["splitIns","computeBudgetConfig"]),r=n?so(n):{instructions:[],instructionTypes:[]},s=this.signers.reduce((p,f)=>U(O({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let f=[...u,p],b=n?[...r.instructions,...f]:f,g=[...new Set(f.map(w=>w.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(w=>new En(w));if(p!==t[l]&&u.length<12&&(ni({instructions:b,payer:this.feePayer,signers:g})||ni({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,ni({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new ui().add(...r.instructions,...u)):a.push(new ui().add(...u)),c.push(Array.from(new Set(u.map(w=>w.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(w=>s[w]).filter(w=>w!==void 0)),u=[p]}}),u.length>0){let f=[...new Set(u.map(b=>b.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(b=>s[b]).filter(b=>b!==void 0);ni({instructions:n?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(b=>b.publicKey)})?a.push(new ui().add(...r.instructions,...u)):a.push(new ui().add(...u)),c.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(m=this.owner)!=null&&m.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 P;let{sequentially:f,onTxUpdate:b,skipTxCount:y=0,recentBlockHash:g,skipPreflight:w=!0}=p||{},k=g!=null?g:await Vn(this.connection,this.blockhashCommitment);if(a.forEach(async(T,h)=>{T.recentBlockhash=k,c[h].length&&T.sign(...c[h])}),wn(a),(P=this.owner)!=null&&P.isKeyPair){if(f){let T=0,h=[];for(let S of a){if(++T,T<=y){h.push("tx skipped");continue}let x=await Kr(this.connection,S,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:w});h.push(x)}return{txIds:h,signedTxs:a}}return{txIds:await Promise.all(a.map(async T=>await this.connection.sendRawTransaction(T.serialize(),{skipPreflight:w}))),signedTxs:a}}if(this.signAllTransactions){let T=await this.signAllTransactions(a.slice(y,a.length)),h=[...a.slice(0,y),...T];if(f){let S=0,x=[],K=async()=>{if(!h[S])return;S<y&&(x.push({txId:"",status:"success",signedTx:h[S]}),b==null||b([...x]),S++,K());let B=await this.connection.sendRawTransaction(h[S].serialize(),{skipPreflight:w});x.push({txId:B,status:"sent",signedTx:h[S]}),b==null||b([...x]),S++;let C=!1,M=null,R=null,_=q=>{M!==null&&clearInterval(M),R!==null&&this.connection.removeSignatureListener(R);let N=x.findIndex(se=>se.txId===B);if(N>-1){if(x[N].status==="error"||x[N].status==="success")return;x[N].status=q.err?"error":"success"}b==null||b([...x]),q.err||K()};this.loopMultiTxStatus&&(M=setInterval(async()=>{var q;if(C){clearInterval(M);return}try{let N=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:0});N&&(C=!0,clearInterval(M),_({err:((q=N.meta)==null?void 0:q.err)||null}),console.log("tx status from getTransaction:",B))}catch(N){C=!0,clearInterval(M),console.error("getTransaction timeout:",N,B)}},yo)),R=this.connection.onSignature(B,q=>{if(C){this.connection.removeSignatureListener(R);return}C=!0,_(q)},"confirmed"),this.connection.getSignatureStatus(B)};return await K(),{txIds:x.map(B=>B.txId),signedTxs:h}}else{let S=[];for(let x=0;x<h.length;x+=1){let K=await this.connection.sendRawTransaction(h[x].serialize(),{skipPreflight:w});S.push(K)}return{txIds:S,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async sizeCheckBuildV0(e){var k;let w=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:i={},lookupTableAddress:r=[]}=w,s=De(w,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=O(O({},this.cluster==="devnet"?{}:bo),i),c=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let P of c)a[P]===void 0&&u.push(new En(P));let l=await Sr({connection:this.connection,address:u});for(let[P,T]of Object.entries(l))a[P]=T;let d=t?so(t):{instructions:[],instructionTypes:[]},m=await Vn(this.connection,this.blockhashCommitment),p=this.signers.reduce((P,T)=>U(O({},P),{[T.publicKey.toBase58()]:T}),{}),f=[],b=[],y=[],g=0;if(this.allInstructions.forEach(P=>{let T=[...y,P],h=t?[...d.instructions,...T]:T;if(P!==n[g]&&y.length<12&&(ii({instructions:h,payer:this.feePayer,lookupTableAddressAccount:a})||ii({instructions:T,payer:this.feePayer,lookupTableAddressAccount:a})))y.push(P);else{if(y.length===0)throw Error("item ins too big");g+=P===n[g]?1:0;let S={};for(let x of[...new Set(c)])a[x]!==void 0&&(S[x]=a[x]);if(t&&ii({instructions:[...d.instructions,...y],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:m})){let x=new ci({payerKey:this.feePayer,recentBlockhash:m,instructions:[...d.instructions,...y]}).compileToV0Message(Object.values(a));f.push(new li(x))}else{let x=new ci({payerKey:this.feePayer,recentBlockhash:m,instructions:[...y]}).compileToV0Message(Object.values(a));f.push(new li(x))}b.push(Array.from(new Set(y.map(x=>x.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat())).map(x=>p[x]).filter(x=>x!==void 0)),y=[P]}}),y.length>0){let T=[...new Set(y.map(h=>h.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat()).values()].map(h=>p[h]).filter(h=>h!==void 0);if(t&&ii({instructions:[...d.instructions,...y],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:m})){let h=new ci({payerKey:this.feePayer,recentBlockhash:m,instructions:[...d.instructions,...y]}).compileToV0Message(Object.values(a));f.push(new li(h))}else{let h=new ci({payerKey:this.feePayer,recentBlockhash:m,instructions:[...y]}).compileToV0Message(Object.values(a));f.push(new li(h))}b.push(T)}return(k=this.owner)!=null&&k.signer&&b.forEach(P=>{P.some(T=>T.publicKey.equals(this.owner.publicKey))||P.push(this.owner.signer)}),{builder:this,transactions:f,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async P=>{var B;let{sequentially:T,onTxUpdate:h,skipTxCount:S=0,recentBlockHash:x,skipPreflight:K=!0}=P||{};if(f.map(async(C,M)=>{b[M].length&&C.sign(b[M]),x&&(C.message.recentBlockhash=x)}),wn(f),(B=this.owner)!=null&&B.isKeyPair){if(T){let C=0,M=[];for(let R of f){if(++C,C<=S){console.log("skip tx: ",C),M.push("tx skipped");continue}let _=await this.connection.sendTransaction(R,{skipPreflight:K});await ao(this.connection,_),M.push(_)}return{txIds:M,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)),M=[...f.slice(0,S),...C];if(T){let R=0,_=[],q=async()=>{if(!M[R])return;if(R<S){_.push({txId:"",status:"success",signedTx:M[R]}),h==null||h([..._]),R++,q();return}let N=await this.connection.sendTransaction(M[R],{skipPreflight:K});_.push({txId:N,status:"sent",signedTx:M[R]}),h==null||h([..._]),R++;let se=!1,Te=null,ze=null,xe=qe=>{Te!==null&&clearInterval(Te),ze!==null&&this.connection.removeSignatureListener(ze);let Ie=_.findIndex(Pt=>Pt.txId===N);if(Ie>-1){if(_[Ie].status==="error"||_[Ie].status==="success")return;_[Ie].status=qe.err?"error":"success"}h==null||h([..._]),qe.err||q()};this.loopMultiTxStatus&&(Te=setInterval(async()=>{var qe;if(se){clearInterval(Te);return}try{let Ie=await this.connection.getTransaction(N,{commitment:"confirmed",maxSupportedTransactionVersion:0});Ie&&(se=!0,clearInterval(Te),xe({err:((qe=Ie.meta)==null?void 0:qe.err)||null}),console.log("tx status from getTransaction:",N))}catch(Ie){se=!0,clearInterval(Te),console.error("getTransaction timeout:",Ie,N)}},yo)),ze=this.connection.onSignature(N,qe=>{if(se){this.connection.removeSignatureListener(ze);return}se=!0,xe(qe)},"confirmed"),this.connection.getSignatureStatus(N)};return q(),{txIds:[],signedTxs:M}}else{let R=[];for(let _=0;_<M.length;_+=1){let q=await this.connection.sendTransaction(M[_],{skipPreflight:K});R.push(q)}return{txIds:R,signedTxs:M}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};var He={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",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"},yy=O({},He);var Pa="ray_tab_hash",Cr="ray_req_hash",Yl=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(Pa);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(Pa,o)),o},wo=async n=>{var i=n,{logCount:o=1e3,removeLastLog:e}=i,t=De(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let r=JSON.parse(localStorage.getItem(Cr)||"[]").slice(0,o-1);e&&r.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),r.unshift(U(O({},t),{time:Date.now(),session:Yl()}));try{localStorage.setItem(Cr,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(Cr,JSON.stringify(r)),s=!0}catch{s=!1}}return new Promise(c=>c())}return wo(U(O({},t),{logCount:o,removeLastLog:!0}))}};var Ao=le("Raydium_Api"),Rr=new Map;var ko=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:r}){this.cluster=e,this.urlConfigs=r||{},this.logCount=i||1e3,this.api=ha.create({baseURL:this.urlConfigs.BASE_HOST||He.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return Ao.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(Ao.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:d,url:m}=a;return n&&wo({status:u,url:`${d}${m}`,params:a.params,data:c,logCount:this.logCount}),Ao.debug(`${l==null?void 0:l.toUpperCase()} ${d}${m} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:d,url:m}=a;return n&&wo({status:u,url:`${d}${m}`,params:a.params,data:s.message,logCount:this.logCount}),Ao.error(`${l.toUpperCase()} ${d}${m} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||He.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||He.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||He.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ha.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,r)=>i+r,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||He.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||He.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||He.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||He.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||He.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:r=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||He.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${r}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||He.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>Rr.has(s)?(n.push(Rr.get(s)),!1):!0),r=[];return i.length&&(r=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||He.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),r.forEach(a=>{Rr.set(a.id,a)})),n.concat(r)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:r="default",order:s="desc",page:a=1}=e,[c,u]=[t&&tt(t).toBase58(),n&&n!=="undefined"?tt(n).toBase58():""],[l,d]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||He.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${d}&poolType=${i}&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||He.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||He.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||He.CHECK_AVAILABILITY)).data}};var Po="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Ta="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Ko,SystemProgram as Tm}from"@solana/web3.js";import{AccountLayout as qn,createAssociatedTokenAccountInstruction as Wr,TOKEN_PROGRAM_ID as dn,TOKEN_2022_PROGRAM_ID as Im}from"@solana/spl-token";var Lr=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Oe=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=le(t)}createTxBuilder(e){return this.scope.checkOwner(),new go({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(Lr(e))}logInfo(...e){this.logger.info(Lr(e))}logAndCreateError(...e){let t=Lr(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as gm,SystemProgram as wm}from"@solana/web3.js";import Am from"bn.js";import{createCloseAccountInstruction as km,createInitializeAccountInstruction as Pm,createTransferInstruction as hm,TOKEN_PROGRAM_ID as Wn}from"@solana/spl-token";import{Keypair as pm,PublicKey as Va}from"@solana/web3.js";import fm from"bn.js";import{TOKEN_PROGRAM_ID as bm}from"@solana/spl-token";function Hl(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function Or(o,...e){if(!Hl(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function Mr(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function Ia(o,e){Or(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var To=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),Vt=(o,e)=>o<<32-e|o>>>e;var $y=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function jl(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function Nr(o){return typeof o=="string"&&(o=jl(o)),Or(o),o}var ho=class{clone(){return this._cloneInto()}},Jy={}.toString;function Ba(o){let e=n=>o().update(Nr(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Zl(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let i=BigInt(32),r=BigInt(4294967295),s=Number(t>>i&r),a=Number(t&r),c=n?4:0,u=n?0:4;o.setUint32(e+c,s,n),o.setUint32(e+u,a,n)}var xa=(o,e,t)=>o&e^~o&t,Sa=(o,e,t)=>o&e^o&t^e&t,Io=class extends ho{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=To(this.buffer)}update(e){Mr(this);let{view:t,buffer:n,blockLen:i}=this;e=Nr(e);let r=e.length;for(let s=0;s<r;){let a=Math.min(i-this.pos,r-s);if(a===i){let c=To(e);for(;i<=r-s;s+=i)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Mr(this),Ia(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:r}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let d=s;d<i;d++)t[d]=0;Zl(n,i-8,BigInt(this.length*8),r),this.process(n,0);let a=To(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 d=0;d<u;d++)a.setUint32(4*d,l[d],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:i,finished:r,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=r,e.destroyed=s,i%t&&e.buffer.set(n),e}};var $l=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]),ln=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),mn=new Uint32Array(64),vr=class extends Io{constructor(){super(64,32,8,!1),this.A=ln[0]|0,this.B=ln[1]|0,this.C=ln[2]|0,this.D=ln[3]|0,this.E=ln[4]|0,this.F=ln[5]|0,this.G=ln[6]|0,this.H=ln[7]|0}get(){let{A:e,B:t,C:n,D:i,E:r,F:s,G:a,H:c}=this;return[e,t,n,i,r,s,a,c]}set(e,t,n,i,r,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=r|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let d=0;d<16;d++,t+=4)mn[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let m=mn[d-15],p=mn[d-2],f=Vt(m,7)^Vt(m,18)^m>>>3,b=Vt(p,17)^Vt(p,19)^p>>>10;mn[d]=b+mn[d-7]+f+mn[d-16]|0}let{A:n,B:i,C:r,D:s,E:a,F:c,G:u,H:l}=this;for(let d=0;d<64;d++){let m=Vt(a,6)^Vt(a,11)^Vt(a,25),p=l+m+xa(a,c,u)+$l[d]+mn[d]|0,b=(Vt(n,2)^Vt(n,13)^Vt(n,22))+Sa(n,i,r)|0;l=u,u=c,c=a,a=s+p|0,s=r,r=i,i=n,n=p+b|0}n=n+this.A|0,i=i+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,i,r,s,a,c,u,l)}roundClean(){mn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ka=Ba(()=>new vr);import{PublicKey as lm}from"@solana/web3.js";import Ma,{isBN as Na}from"bn.js";import{bits as Jl,BitStructure as ug,blob as em,Blob as cg,cstr as lg,f32 as mg,f32be as dg,f64 as pg,f64be as fg,greedy as bg,Layout as tm,ns64 as yg,ns64be as gg,nu64 as nm,nu64be as wg,offset as Ag,s16 as kg,s16be as Pg,s24 as hg,s24be as Tg,s32 as im,s32be as Ig,s40 as Bg,s40be as xg,s48 as Sg,s48be as Kg,s8 as Cg,seq as om,struct as Rg,Structure as rm,u16 as sm,u16be as Lg,u24 as Og,u24be as Mg,u32 as am,u32be as Ng,u40 as vg,u40be as _g,u48 as Vg,u48be as Eg,u8 as um,UInt as cm,union as Fg,Union as Dg,unionLayoutDiscriminator as Wg,utf8 as qg}from"@solana/buffer-layout";var Bo=tm,Ca=rm;var _r=cm;var Ra=um,Qt=sm;var Vr=am;var La=nm;var Se=im;var Oa=om;var ye=em;var Er=Jl;var kn=class extends Bo{constructor(t,n,i){super(t,i);this.blob=ye(t),this.signed=n}decode(t,n=0){let i=new Ma(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new Ma(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},xo=class extends Bo{constructor(t){super(8,t);this._lower=Er(Vr(),!1),this._upper=Er(Vr(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),r=this._upper.decode(t,n+this._lower.span);return O(O({},i),r)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function X(o){return new _r(1,o)}function ot(o){return new _r(4,o)}function A(o){return new kn(8,!1,o)}function J(o){return new kn(16,!1,o)}function va(o){return new kn(1,!0,o)}function Fn(o){return new kn(8,!0,o)}function _a(o){return new kn(16,!0,o)}var So=class extends Bo{constructor(t,n,i,r){super(t.span,r);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function L(o){return new So(ye(32),e=>new lm(e),e=>e.toBuffer(),o)}function Me(o){return new So(Ra(),mm,dm,o)}function mm(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function dm(o){return o?1:0}var Fr=class extends Ca{decode(e,t){return super.decode(e,t)}};function W(o,e,t){return new Fr(o,e,t)}function H(o,e,t){let n,i=typeof e=="number"?e:Na(e)?e.toNumber():new Proxy(e,{get(r,s){if(!n){let a=Reflect.get(r,"count");n=Na(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 Oa(o,i,t)}var Dn=W([L("mint"),L("owner"),A("amount"),ot("delegateOption"),L("delegate"),X("state"),ot("isNativeOption"),A("isNative"),A("delegatedAmount"),ot("closeAuthorityOption"),L("closeAuthority")]);var lw=le("Raydium_Util");function Ea({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:r,account:s}of t.value){let a=Dn.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:r,mint:c,amount:u,isAssociated:ie(o,c,s.owner).publicKey.equals(r),isNative:!1,programId:s.owner}),i.push({pubkey:r,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Va.default,amount:new fm(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function _e({fromPublicKey:o,programId:e=bm,assignSeed:t}){let n=t?btoa(t).slice(0,32):pm.generate().publicKey.toBase58().slice(0,32);return{publicKey:ym(o,n,e),seed:n}}function ym(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),i=Ka(n);return new Va(i)}function Dr(o){let{mint:e,tokenAccount:t,owner:n,programId:i=Wn}=o;return Pm(t,e,n,i)}function Yt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:r=Wn}=o;return km(e,t,i,n,r)}async function Ht(o){let{connection:e,amount:t,commitment:n,payer:i,owner:r,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(Dn.span,n),c=Z(t).add(new Am(a)),u=_e({fromPublicKey:i,programId:Wn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[wm.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Dn.span,programId:Wn}),Dr({mint:new gm(it.address),tokenAccount:u.publicKey,owner:r,programId:Wn})],instructionTypes:[D.CreateAccount,D.InitAccount],endInstructionTypes:s?[]:[D.CloseAccount],endInstructions:s?[]:[Yt({tokenAccount:u.publicKey,payer:i,owner:r})]}}function Fa({source:o,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:r=Wn}){return hm(o,e,t,BigInt(String(n)),i,r)}var di=class extends Oe{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:i,notSubscribeAccountChange:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._notSubscribeAccountChange=r!=null?r:!0,this._clientOwnedToken=!!(n||i)}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 ie(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 i=O(O({},{}),t),[r,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:dn},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Im},i.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Ea({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=dn,associatedOnly:i=!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&&(!i||i&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var b,y,g,w;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:r,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,d=new Ko(t.tokenProgram||dn),m=this.getAssociatedTokenAccount(n,new Ko(d)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!r||k.pubkey.equals(m))).sort((k,P)=>k.accountInfo.amount.lt(P.accountInfo.amount)?1:-1);if(i===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(r){let k=Wr(s,m,s,n,d),P=this.tokenAccountRawInfos.find(T=>T.pubkey.equals(m));if(u){let T=await this.scope.connection.getAccountInfo(m);if(T===null)(b=f.instructions)==null||b.push(k),f.instructionTypes.push(D.CreateATA);else if(!(T.owner.equals(d)&&qn.decode(T.data).mint.equals(n)&&qn.decode(T.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else P===void 0&&(f.instructions.push(k),f.instructionTypes.push(D.CreateATA));if(n.equals(j)&&i.amount){let T=await Ht({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(y=i.amount)!=null?y:0,skipCloseAccount:c});f.instructions.push(...T.instructions||[]),f.endInstructions.push(...T.endInstructions||[]),f.instructionTypes.push(...T.instructionTypes||[]),f.endInstructionTypes.push(...T.endInstructionTypes||[]),i.amount&&(f.instructions.push(Fa({source:T.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:dn})),f.instructionTypes.push(D.TransferAmount))}return!c&&P===void 0&&(f.endInstructions.push(Yt({owner:s,payer:i.payer||s,tokenAccount:m,programId:d})),f.endInstructionTypes.push(D.CloseAccount)),{account:m,instructionParams:f}}else{let k=_e({fromPublicKey:s,programId:d,assignSeed:l}),P=await this.scope.connection.getMinimumBalanceForRentExemption(qn.span),T=Tm.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:k.seed,newAccountPubkey:k.publicKey,lamports:P+Number((w=(g=i.amount)==null?void 0:g.toString())!=null?w:0),space:qn.span,programId:d});return f.instructions.push(T,Dr({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:d})),f.instructionTypes.push(D.CreateAccount),f.instructionTypes.push(D.InitAccount),c||(f.endInstructions.push(Yt({owner:s,payer:i.payer||s,tokenAccount:k.publicKey,programId:d})),f.endInstructionTypes.push(D.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=dn,autoUnwrapWSOLToSOL:i}){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 Wr(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[D.CreateATA],r=u}return i&&j.toBase58()===t.toBase58()&&(a.endInstructions=[Yt({owner:s,payer:s,tokenAccount:r,programId:n})],a.endInstructionTypes=[D.CloseAccount]),{pubKey:r,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:r,programId:s=dn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:d}=t,m=this.getAssociatedTokenAccount(r,s);if(new Ko(j).equals(r)){let p=await Ht({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:i,skipCloseAccount:l});return O({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!m.equals(a)&&!u){let p=[],f=Wr(this.scope.ownerPubKey,m,this.scope.ownerPubKey,r,s);if(d){let b=await this.scope.connection.getAccountInfo(m);if(b===null)p.push(f);else if(!(b.owner.equals(dn)&&qn.decode(b.data).mint.equals(r)&&qn.decode(b.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${r.toString()}, ata: ${m.toString()}`)}else p.push(f);return{tokenAccount:m,instructions:p,instructionTypes:[D.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=dn,amount:r,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Ko(j))&&s){let l=await this.handleTokenAccount({side:"in",amount:r||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:m}=l,p=De(l,["tokenAccount"]);c=m,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!c&&a){let d=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:m}=d,p=De(d,["tokenAccount"]);c=m,u.addInstruction(p)}return O({tokenAccount:c},u.AllTxData)}};import{PublicKey as Ae,SystemProgram as Wm}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as qm}from"@solana/spl-token";import{PublicKey as qa}from"@solana/web3.js";var qr=W([X("instruction")]),Ur=W([X("instruction")]),Bm=W([A("rewardState"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardLastUpdateTime"),A("totalReward"),A("totalRewardEmissioned"),A("rewardClaimed"),A("rewardPerSecond"),J("accRewardPerShare"),L("rewardVault"),L("rewardMint"),L("rewardSender"),A("rewardType"),H(A(),15,"padding")]),xm=W([A("state"),A("nonce"),L("lpVault"),L("rewardVault"),L(),L(),A(),A(),A("totalReward"),J("perShareReward"),A("lastSlot"),A("perSlotReward")]),Sm=W([A("state"),A("nonce"),L("lpVault"),L("rewardVaultA"),A("totalRewardA"),J("perShareRewardA"),A("perSlotRewardA"),X("option"),L("rewardVaultB"),ye(7),A("totalRewardB"),J("perShareRewardB"),A("perSlotRewardB"),A("lastSlot"),L()]),Km=W([A(),A("state"),A("nonce"),A("validRewardTokenNum"),J("rewardMultiplier"),A("rewardPeriodMax"),A("rewardPeriodMin"),A("rewardPeriodExtend"),L("lpMint"),L("lpVault"),H(Bm,5,"rewardInfos"),L("creator"),L(),H(A(),32,"padding")]),Cm=new Proxy(xm,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return U(O({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(o,e,t)}}),Rm=new Proxy(Sm,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return U(O({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(o,e,t)}}),Co=new Proxy(Km,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return U(O({},i),{version:6,rewardInfos:i.rewardInfos.map(r=>{var s;return U(O({},r),{rewardType:((s=Object.entries(pn).find(a=>String(a[1])===r.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),Lm=W([A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),Gr=W([X("instruction"),A("nonce"),H(Lm,5,"rewardTimeInfo")]),Xr=W([X("instruction"),A("rewardReopenTime"),A("rewardEndTime"),A("rewardPerSecond")]),zr=W([X("instruction"),A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),qw=W([A("state"),L("id"),L("owner"),A("deposited"),H(A(),1,"rewardDebts")]),Qr=W([A("state"),L("id"),L("owner"),A("deposited"),H(J(),1,"rewardDebts"),A(""),A("voteLockedBalance"),H(A(),15)]),Uw=W([A("state"),L("id"),L("owner"),A("deposited"),H(A(),2,"rewardDebts")]),Da=W([A("state"),L("id"),L("owner"),A("deposited"),H(J(),2,"rewardDebts"),H(A(),17)]),Wa=W([A(),A("state"),L("id"),L("owner"),A("deposited"),H(J(),5,"rewardDebts"),H(A(),16)]),yt=W([X("instruction"),A("amount")]),Om=W([L("mint"),L("grantAuthority"),A("baselineVoteWeightScaledFactor"),A("maxExtraLockupVoteWeightScaledFactor"),A("lockupSaturationSecs"),va("digitShift"),H(X(),7,"reserved1"),H(A(),7,"reserved2")]),Mm=W([ye(8),L("governanceProgramId"),L("realm"),L("realmGoverningTokenMint"),L("realmAuthority"),H(X(),32,"reserved1"),H(Om,4,"votingMints"),Fn("timeOffset"),X("bump"),H(X(),7,"reserved2"),H(A(),11,"reserved3")]),Nm=W([Fn("startTime"),Fn("endTime"),X("kind"),H(X(),15,"reserved")]),vm=W([H(Nm,1,"lockup"),A("amountDeposited_native"),A("amountInitiallyLockedNative"),Me("isUsed"),Me("allowClawback"),X("votingMintConfigIdx"),H(X(),29,"reserved")]),_m=W([ye(8),L("voterAuthority"),L("registrar"),H(vm,32,"deposits"),X("voterBump"),X("voterWweightRecordBump"),H(X(),94,"reserved")]);var Zw=le("Raydium_farm_config"),Ua=new qa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ga=new qa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var Xa={3:Qr,5:Da,6:Wa},Yr=o=>[3,4,5,6].indexOf(o)!==-1,Hr=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,i=`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: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=r[e])==null?void 0:s.call(r)},pn={"Standard SPL":0,"Option tokens":1},It={[pa.toString()]:3,[fa.toString()]:4,[ba.toString()]:5,[oi.toString()]:6};import{PublicKey as ce,SystemProgram as Ya,SYSVAR_CLOCK_PUBKEY as bi,SYSVAR_RENT_PUBKEY as Fm,TransactionInstruction as xt}from"@solana/web3.js";import Ha from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as CA,createAssociatedTokenAccountInstruction as RA,TOKEN_PROGRAM_ID as jt}from"@solana/spl-token";import Vm from"bn.js";var Em=le("Raydium.farm.util");function pi({programId:o,poolId:e,mint:t,type:n}){let{publicKey:i}=me([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return i}function Bt({programId:o,poolId:e,owner:t,version:n}){let{publicKey:i}=me([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return i}var za=({programId:o,poolId:e})=>me([e.toBuffer()],o);function Qa(o){return{isSet:new Vm(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(pn[o.rewardType])}}function jr(o){return Z(o.endTime).sub(Z(o.openTime)).mul(Z(o.perSecond))}function fi(o){let e=Xa[o];return e||Em.logWithError("invalid version",o),e}var Dm=le("Raydium_farm_instruction"),WA={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 yi(o){let{version:e,id:t,ledger:n,programId:i,owner:r}=o,s={3:9,5:10}[e];s||Dm.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(qr.span);qr.encode({instruction:s},a);let c=[I({pubkey:t}),I({pubkey:n}),I({pubkey:r,isWritable:!1}),I({pubkey:Ya.programId,isWritable:!1}),I({pubkey:Fm,isWritable:!1})];return{instruction:new xt({programId:i,keys:c,data:a}),instructionType:D.FarmV3CreateLedger}}function ja(o){var n;let e=Buffer.alloc(Gr.span);Gr.encode({instruction:0,nonce:new Ha(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...gr,I({pubkey:o.farmId}),I({pubkey:o.farmAuthority,isWritable:!1}),I({pubkey:o.lpVault}),I({pubkey:o.lpMint,isWritable:!1}),I({pubkey:o.lockVault}),I({pubkey:o.lockMint,isWritable:!1}),I({pubkey:(n=o.lockUserAccount)!=null?n:Qe}),I({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let i of o.rewardInfo)t.push(I({pubkey:i.rewardMint,isWritable:!1}),I({pubkey:i.rewardVault}),I({pubkey:i.userRewardToken}));return{instruction:new xt({programId:o.programId,keys:t,data:e}),instructionType:D.FarmV6Create}}function Za(o){let e=Buffer.alloc(Ur.span);Ur.encode({instruction:5},e);let t=[I({pubkey:jt,isWritable:!1}),I({pubkey:o.id}),I({pubkey:o.authority,isWritable:!1}),I({pubkey:o.lpVault,isWritable:!1}),I({pubkey:o.rewardVault}),I({pubkey:o.userRewardToken}),I({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new xt({programId:o.programId,keys:t,data:e}),instructionType:D.FarmV6CreatorWithdraw}}function Zr({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let r=Buffer.alloc(Xr.span);Xr.encode({instruction:3,rewardReopenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardPerSecond:Z(i.perSecond)},r);let s=[I({pubkey:jt,isWritable:!1}),I({pubkey:n.id}),I({pubkey:n.lpVault,isWritable:!1}),I({pubkey:e}),I({pubkey:t}),I({pubkey:o,isWritable:!1,isSigner:!0})];return new xt({programId:n.programId,keys:s,data:r})}function $r({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let r=Buffer.alloc(zr.span);zr.encode({instruction:4,isSet:new Ha(1),rewardPerSecond:Z(i.perSecond),rewardOpenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardType:Z(pn[i.rewardType])},r);let s=[...gr,I({pubkey:t.id}),I({pubkey:t.authority,isWritable:!1}),I({pubkey:i.mint,isWritable:!1}),I({pubkey:n}),I({pubkey:e}),I({pubkey:o,isWritable:!1,isSigner:!0})];return new xt({programId:t.programId,keys:s,data:r})}function gi(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,c]=[new ce(e.programId),new ce(e.id)],u=Bt({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(yt.span);yt.encode({instruction:2,amount:Z(s)},l);let d=[I({pubkey:jt,isWritable:!1}),I({pubkey:c}),I({pubkey:new ce(t.authority),isWritable:!1}),I({pubkey:new ce(t.lpVault)}),I({pubkey:u}),I({pubkey:r,isWritable:!1,isSigner:!0}),I({pubkey:n})];for(let m=0;m<t.rewardInfos.length;m++)d.push(I({pubkey:new ce(t.rewardInfos[m].vault)})),d.push(I({pubkey:i[m]}));return new xt({programId:a,keys:d,data:l})}function wi(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=Bt({programId:c,poolId:u,owner:r,version:5}),d=Buffer.alloc(yt.span);yt.encode({instruction:12,amount:Z(s)},d);let m=[I({pubkey:u}),I({pubkey:new ce(t.authority),isWritable:!1}),I({pubkey:l}),I({pubkey:r,isWritable:!1,isSigner:!0}),I({pubkey:n}),I({pubkey:new ce(t.lpVault)}),I({pubkey:i[0]}),I({pubkey:new ce(t.rewardInfos[0].vault)}),I({pubkey:bi,isWritable:!1}),I({pubkey:jt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)m.push(I({pubkey:i[p]})),m.push(I({pubkey:new ce(t.rewardInfos[p].vault)}));if(a)for(let p of a)m.push(I({pubkey:p}));return new xt({programId:c,keys:m,data:d})}function $a(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=W([X("instruction"),A("amount")]),d=[I({pubkey:u}),I({pubkey:new ce(t.authority),isWritable:!1}),I({pubkey:a[0]}),I({pubkey:r,isSigner:!0,isWritable:!1}),I({pubkey:n}),I({pubkey:new ce(t.lpVault)}),I({pubkey:i[0]}),I({pubkey:new ce(t.rewardInfos[0].vault)}),I({pubkey:bi,isWritable:!1}),I({pubkey:jt,isWritable:!1}),I({pubkey:i[1]}),I({pubkey:new ce(t.rewardInfos[1].vault)})],m=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},m),new xt({keys:d,programId:c,data:m})}function Ai(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=Bt({programId:c,poolId:u,owner:r,version:3}),d=Buffer.alloc(yt.span);yt.encode({instruction:11,amount:Z(s)},d);let m=[I({pubkey:u}),I({pubkey:new ce(t.authority),isWritable:!1}),I({pubkey:l}),I({pubkey:r,isWritable:!1,isSigner:!0}),I({pubkey:n}),I({pubkey:new ce(t.lpVault)}),I({pubkey:i[0]}),I({pubkey:new ce(t.rewardInfos[0].vault)}),I({pubkey:bi,isWritable:!1}),I({pubkey:jt,isWritable:!1})];if(a)for(let p of a)m.push(I({pubkey:p}));return new xt({programId:c,keys:m,data:d})}function Ja(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=Bt({programId:c,poolId:u,owner:r,version:3}),d=Buffer.alloc(yt.span);yt.encode({instruction:10,amount:Z(s)},d);let m=[I({pubkey:u}),I({pubkey:new ce(t.authority),isWritable:!1}),I({pubkey:l}),I({pubkey:r,isWritable:!1,isSigner:!0}),I({pubkey:n}),I({pubkey:new ce(t.lpVault)}),I({pubkey:i[0]}),I({pubkey:new ce(t.rewardInfos[0].vault)}),I({pubkey:bi,isWritable:!1}),I({pubkey:jt,isWritable:!1})];if(a)for(let p of a)m.push(I({pubkey:p}));return new xt({programId:c,keys:m,data:d})}function eu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[c,u]=[new ce(e.programId),new ce(e.id)],l=Bt({programId:c,poolId:u,owner:r,version:5}),d=Buffer.alloc(yt.span);yt.encode({instruction:11,amount:Z(s)},d);let m=[I({pubkey:u}),I({pubkey:new ce(t.authority),isWritable:!1}),I({pubkey:l}),I({pubkey:r,isWritable:!1,isSigner:!0}),I({pubkey:n}),I({pubkey:new ce(t.lpVault)}),I({pubkey:i[0]}),I({pubkey:new ce(t.rewardInfos[0].vault)}),I({pubkey:bi,isWritable:!1}),I({pubkey:jt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)m.push(I({pubkey:i[p]})),m.push(I({pubkey:new ce(t.rewardInfos[p].vault)}));if(a)for(let p of a)m.push(I({pubkey:p}));return new xt({programId:c,keys:m,data:d})}function tu(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,c]=[new ce(e.programId),new ce(e.id)],u=Bt({programId:a,poolId:c,owner:r,version:6}),l=Buffer.alloc(yt.span);yt.encode({instruction:1,amount:Z(s)},l);let d=[I({pubkey:jt,isWritable:!1}),I({pubkey:Ya.programId,isWritable:!1}),I({pubkey:c}),I({pubkey:new ce(t.authority),isWritable:!1}),I({pubkey:new ce(t.lpVault)}),I({pubkey:u}),I({pubkey:r,isWritable:!1,isSigner:!0}),I({pubkey:n})];for(let m=0;m<t.rewardInfos.length;m++)d.push(I({pubkey:new ce(t.rewardInfos[m].vault)})),d.push(I({pubkey:i[m]}));return new xt({programId:a,keys:d,data:l})}var ki=class extends Oe{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Qe)){let n=await Ht({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:jr(U(O({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:i=oi,txVersion:r}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new Ae(e.lpMint.address),lockInfo:{lockMint:Ua,lockVault:Ga},version:6,rewardInfos:t,programId:i},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=_e({fromPublicKey:u,programId:a.programId}),d=await this.scope.connection.getMinimumBalanceForRentExemption(Co.span);c.addInstruction({instructions:[Wm.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:d,space:Co.span,programId:a.programId})]});let{publicKey:m,nonce:p}=za({programId:new Ae(a.programId),poolId:l.publicKey}),f=pi({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),b=[],y=[];for(let T of a.rewardInfos){T.openTime>=T.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",T.openTime.toString()),isNaN(pn[T.rewardType])&&this.logAndCreateError("rewardType error",T.rewardType),Number(T.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",T.perSecond),b.push(Qa(T));let{rewardPubKey:h,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:T,payer:u});S&&c.addInstruction(S),h||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=T.mint.equals(Qe)?new Ae(it.address):T.mint;y.push({rewardMint:x,rewardVault:pi({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:h})}let{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({mint:new Ae(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});w&&c.addInstruction(w),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:k,instructionType:P}=ja({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:m,lpVault:f,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:y,rewardInfoConfig:b,nonce:p});return c.addInstruction({instructions:[k],instructionTypes:[P]}).versionBuild({txVersion:r,extInfo:{farmId:l.publicKey,farmAuthority:m,lpVault:f,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var y;let r=It[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=$e((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(Qe)?new Ae(it.address):n.mint,l=a.rewardInfos.findIndex(g=>new Ae(g.mint.address).equals(u)),d=s.rewardInfos[l];d||this.logAndCreateError("configuration does not exist","rewardMint",u);let m=(y=d.vault)!=null?y:Qe,p=this.createTxBuilder(),{rewardPubKey:f,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return b&&p.addInstruction(b),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Zr({payer:this.scope.ownerPubKey,rewardVault:m,userRewardTokenPub:f,farmKeys:a,rewardInfo:n})],instructionTypes:[D.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let r=It[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=$e((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(d=>{d.openTime>=d.endTime&&this.logAndCreateError("start time error","newRewardInfo",d)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let d of n){let m=d.mint.equals(Qe)?new Ae(it.address):d.mint,p=a.rewardInfos.findIndex(k=>new Ae(k.mint.address).equals(m)),f=s.rewardInfos[p];f||this.logAndCreateError("configuration does not exist","rewardMint",m);let b=(l=f.vault)!=null?l:Qe,{rewardPubKey:y,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:d,payer:c});g&&u.addInstruction(g),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let w=Zr({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:y,farmKeys:a,rewardInfo:d});u.addInstruction({instructions:[w],instructionTypes:[D.FarmV6Restart]})}return u.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:r}=e,s=It[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=$e((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder(),l=i.mint.equals(Qe)?new Ae(it.address):i.mint,d=pi({programId:new Ae(n.programId),poolId:new Ae(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:m,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:i,payer:c});return p&&u.addInstruction(p),m||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,u.addInstruction({instructions:[$r({payer:this.scope.ownerPubKey,userRewardTokenPub:m,farmKeys:a,rewardVault:d,rewardInfo:i})],instructionTypes:[D.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:r}=e,s=It[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=$e((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=r!=null?r:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of i){let d=l.mint.equals(Qe)?new Ae(it.address):l.mint,m=pi({programId:new Ae(n.programId),poolId:new Ae(n.id),mint:d,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:l,payer:c});f&&u.addInstruction(f),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let b=$r({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:m,rewardInfo:U(O({},l),{mint:d})});u.addInstruction({instructions:[b],instructionTypes:[D.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:r,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l,txTipConfig:d}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:p}=n,f=It[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),Yr(f)||this.logAndCreateError("invalid farm program:",n.programId);let[b,y]=[new Ae(n.programId),new Ae(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],w=Bt({programId:b,poolId:y,owner:this.scope.ownerPubKey,version:f}),k=this.createTxBuilder();k.addCustomComputeBudget(l),k.addTipInstruction(d);let P={};for(let _ of this.scope.account.tokenAccounts)if(a){let q=ie(this.scope.ownerPubKey,_.mint,_.programId).publicKey;_.publicKey&&q.equals(_.publicKey)&&(P[_.mint.toString()]=_.publicKey)}else P[_.mint.toString()]=_.publicKey;let T=g.lpMint,h=P[T.address];h||this.logAndCreateError("you don't have any lp","lp zero",P);let S=[];for(let _ of m){let q=s&&_.mint.address===j.toString(),N=P[_.mint.address];if(!N){let{account:se,instructionParams:Te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:_.mint.programId,mint:new Ae(_.mint.address),notUseTokenAccount:q,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!q,associatedOnly:q?!1:a,checkCreateATAOwner:c});N=se,Te&&k.addInstruction(Te)}P[_.mint.address]=N,S.push(N)}let x,K=await this.scope.connection.getAccountInfo(w);if(K&&(x=fi(f).decode(K.data)),n.programId!==oi.toString()&&!x){let{instruction:_,instructionType:q}=yi({id:y,programId:b,version:f,ledger:w,owner:this.scope.ownerPubKey});k.addInstruction({instructions:[_],instructionTypes:[q]})}let B=Hr({version:f,rewardInfos:m,rewardTokenAccountsPublicKeys:S});B&&this.logAndCreateError(B);let C={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:h,rewardAccounts:S,userAuxiliaryLedgers:u==null?void 0:u.map(_=>new Ae(_))},M=f===6?tu(C):f===5?eu(C):Ja(C),R={3:D.FarmV3Deposit,5:D.FarmV5Deposit,6:D.FarmV6Deposit};return k.addInstruction({instructions:[M],instructionTypes:[R[f]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:r,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:d,txTipConfig:m}=e,{rewardInfos:p}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let f=It[n.programId];Yr(f)||this.logAndCreateError("invalid farm program:",n.programId);let b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],y=this.createTxBuilder();y.addCustomComputeBudget(d),y.addTipInstruction(m);let g={};for(let B of this.scope.account.tokenAccounts)if(c){let C=ie(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=Bt({programId:new Ae(n.programId),poolId:new Ae(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(B);if(C)fi(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:M,instructionType:R}=yi({id:new Ae(b.id),programId:new Ae(b.programId),version:f,ledger:B,owner:this.scope.ownerPubKey});y.addInstruction({instructions:[M],instructionTypes:[R]})}}r&&r.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let w=b.lpMint.address,k=s&&w===j.toString(),P=g[w.toString()];if(!P){let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.lpMint.programId,mint:new Ae(w),notUseTokenAccount:k,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:c,checkCreateATAOwner:u});P=B,C&&y.addInstruction(C)}g[w.toString()]=P;let T=[];for(let B of p){let C=s&&B.mint.address===j.toString(),M=g[B.mint.address];if(!M){let{account:R,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B.mint.programId,mint:new Ae(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});M=R,_&&y.addInstruction(_)}g[B.mint.address]=M,T.push(M)}let h=Hr({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:T});h&&this.logAndCreateError(h);let S={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:P,rewardAccounts:T,userAuxiliaryLedgers:l==null?void 0:l.map(B=>new Ae(B))},x=f===6?gi(S):f===5?wi(S):f===4?$a(S):Ai(S),K={3:D.FarmV3Withdraw,4:D.FarmV4Withdraw,5:D.FarmV5Withdraw,6:D.FarmV6Withdraw};return y.addInstruction({instructions:[x],instructionTypes:[K[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:i,txTipConfig:r}){var f;this.scope.checkOwner();let s=$e((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a=It[e.programId];a!==6&&this.logAndCreateError("invalid farm version",a);let c=s.rewardInfos.find(b=>tt(b.mint.address).equals(tt(t)));c||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(f=c==null?void 0:c.vault)!=null?f:Qe,l=this.createTxBuilder(),d;if(t.equals(Qe)||t.equals(Ae.default)){let b=await Ht({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:jr(U(O({},c),{openTime:c.openTime,endTime:c.endTime,perSecond:new v(c.perSecond).mul(10**c.mint.decimals).toString()}))});d=b.addresses.newAccount,l.addInstruction(b)}else{let b=await this.scope.account.getCreatedTokenAccount({mint:t});b===null?(d=await this.scope.account.getAssociatedTokenAccount(t),l.addInstruction({instructions:[qm(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[D.CreateATA]})):d=b}let{instruction:m,instructionType:p}=Za({programId:s.programId,id:s.id,authority:s.authority,lpVault:s.lpVault,rewardVault:u,userRewardToken:d,owner:this.scope.ownerPubKey});return l.addCustomComputeBudget(i),l.addTipInstruction(r),l.addInstruction({instructions:[m],instructionTypes:[p]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),d={};for(let f of this.scope.account.tokenAccounts)if(r){let b=ie(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&b.equals(f.publicKey)&&(d[f.mint.toString()]=f.publicKey)}else d[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,b)=>U(O({},f),{[b.id]:b}),{});for(let f of Object.values(t)){let{programId:b,lpMint:y,rewardInfos:g,id:w}=f,k=It[b],P=y.address,T=n&&P===j.toString(),h=d[P];if(!h){let{account:M,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.programId,mint:new Ae(P),notUseTokenAccount:T,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:T?!1:r,checkCreateATAOwner:s});h=M,R&&l.addInstruction(R)}d[P.toString()]=h;let S=[];for(let M of g){let R=n&&M.mint.address===j.toString(),_=d[M.mint.address];if(!_){let{account:q,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:M.mint.programId,mint:new Ae(M.mint.address),notUseTokenAccount:R,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:r,checkCreateATAOwner:s});_=q,N&&l.addInstruction(N)}d[M.mint.address]=_,S.push(_)}let x=p[w],K={amount:ft,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:x,lpAccount:h,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(M=>new Ae(M))},B=k===6?gi(K):k===5?wi(K):Ai(K),C={3:D.FarmV3Withdraw,5:D.FarmV5Withdraw,6:D.FarmV6Withdraw};l.addInstruction({instructions:[B],instructionTypes:[C[k]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as We}from"@solana/web3.js";import{AccountLayout as Cd,NATIVE_MINT as Uo,TOKEN_PROGRAM_ID as bn}from"@solana/spl-token";import{Keypair as vo,PublicKey as G,SystemProgram as Jt,TransactionInstruction as Je}from"@solana/web3.js";import as from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ci,TOKEN_2022_PROGRAM_ID as Ne,TOKEN_PROGRAM_ID as ke}from"@solana/spl-token";import $m from"bn.js";import St from"bn.js";var Le=new St(0),gt=new St(1),Zt=new St(-1),wt=new St(1).shln(64),Ro=new St(1).shln(128),Jr=wt.sub(gt),Pi=64,nu=Ro.subn(1),rt=-443636,ct=-rt,Kt=new St("4295048016"),Ct=new St("79226673521066979257578248091"),Lo=new St("4295048017"),Oo=new St("79226673521066979257578248090"),iu=16,ou="59543866431248",ru="184467440737095516",su="15793534762490258745",Mo=new St(10).pow(new St(6));var au={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:[]},wk=new St("18446744073700000000");import ue from"bn.js";function No(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function es(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function ts(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function hi(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function uu(o,e){return hi(o,e)?null:es(o,e)}function cu(o,e){return hi(o,e)?null:ts(o,e)}var Ik=Buffer.from("amm_config","utf8"),Um=Buffer.from("pool","utf8"),Gm=Buffer.from("pool_vault","utf8"),Xm=Buffer.from("pool_reward_vault","utf8"),lu=Buffer.from("position","utf8"),zm=Buffer.from("tick_array","utf8"),Qm=Buffer.from("operation","utf8"),Ym=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Hm=Buffer.from("observation","utf8");function mu(o,e,t,n){return me([Um,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function ns(o,e,t){return me([Gm,e.toBuffer(),t.toBuffer()],o)}function du(o,e,t){return me([Xm,e.toBuffer(),t.toBuffer()],o)}function de(o,e,t){return me([zm,e.toBuffer(),No(t)],o)}function Et(o,e,t,n){return me([lu,e.toBuffer(),No(t),No(n)],o)}function lt(o,e){return me([lu,e.toBuffer()],o)}function Pn(o){return me([Buffer.from("metadata","utf8"),Xt.toBuffer(),o.toBuffer()],Xt)}function Ti(o){return me([Qm],o)}function Ve(o,e){return me([Ym,e.toBuffer()],o)}function pu(o,e){return me([Hm,e.toBuffer()],o)}var fu=Buffer.from("locked_position","utf8");function is(o,e){return me([fu,e.toBuffer()],o)}function Ii(o,e){return me([fu,e.toBuffer()],o)}import{PublicKey as At}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as bu}from"@solana/spl-token";import Ke from"bn.js";import qt from"bn.js";var Bi=class{static getfeeGrowthInside(e,t,n){let i=new qt(0),r=new qt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,r=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),r=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new qt(0),a=new qt(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=oe.wrappingSubU128(oe.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),u=oe.wrappingSubU128(oe.wrappingSubU128(e.feeGrowthGlobalX64B,r),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=oe.mulDivFloor(oe.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,wt),c=t.tokenFeesOwedA.add(a),u=oe.mulDivFloor(oe.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,wt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=oe.mulDivFloor(oe.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,wt),c=t.tokenFeesOwedA.add(a),u=oe.mulDivFloor(oe.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,wt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let r=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=oe.wrappingSubU128(c,u.growthInsideLastX64),d=oe.mulDivFloor(l,t.liquidity,wt),m=u.rewardAmountOwed.add(d);r.push(m)}return r}static GetPositionRewards(e,t,n,i){let r=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=oe.wrappingSubU128(c,u.growthInsideLastX64),d=oe.mulDivFloor(l,t.liquidity,wt),m=u.rewardAmountOwed.add(d);r.push(m)}return r}static getRewardGrowthInside(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new qt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new qt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(oe.wrappingSubU128(oe.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return r}static getRewardGrowthInsideV2(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new qt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new qt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(oe.wrappingSubU128(oe.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return r}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:r,epochInfo:s}){var y,g,w,k;let a=ne.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),c=ne.getSqrtPriceX64FromTick(t.tickLower),u=ne.getSqrtPriceX64FromTick(t.tickUpper),l=r?1+i:1-i,d=fe.getAmountsFromLiquidity(a,c,u,n,r),[m,p]=[we(d.amountA,(y=e.mintA.extensions)==null?void 0:y.feeConfig,s,!0),we(d.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[f,b]=[we(new qt(new v(d.amountA.toString()).mul(l).toFixed(0)),(w=e.mintA.extensions)==null?void 0:w.feeConfig,s,!0),we(new qt(new v(d.amountB.toString()).mul(l).toFixed(0)),(k=e.mintB.extensions)==null?void 0:k.feeConfig,s,!0)];return{liquidity:n,amountA:m,amountB:p,amountSlippageA:f,amountSlippageB:b,expirationTime:_t(m.expirationTime,p.expirationTime)}}};var jm=15,pe=class{static async getTickArrays(e,t,n,i,r,s,a){let c=[],u=Y.getTickArrayStartIndexByTick(i,r),l=Y.getInitializedTickArrayInRange(s,a,r,u,Math.floor(jm/2));for(let p=0;p<l.length;p++){let{publicKey:f}=de(t,n,l[p]);c.push(f)}let d=(await Lt(e,c)).map(p=>p!==null?xi.decode(p.data):null),m={};for(let p=0;p<c.length;p++){let f=d[p];f!==null&&(m[f.startTickIndex]=U(O({},f),{address:c[p]}))}return m}static nextInitializedTick(e,t,n,i,r,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,i,r,s);for(;a==null||a.liquidityGross.lten(0);){if(u=Y.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:d,tickArrayAddress:m,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[d,m,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,i,r){let s=Math.floor(e/pe.tickCount(t)),a=n?Y.searchLowBitFromStart(i,r,s-1,1,t):Y.searchHightBitFromStart(i,r,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let r;if(i){let a=Xe-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<Xe;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){r=c;break}a=a+1}}let{publicKey:s}=de(e,t,n.startTickIndex);return{nextTick:r,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,r,s){let a=Y.getTickArrayStartIndexByTick(i,r),c=Math.floor((i-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 m=u.ticks[c];if(m.liquidityGross.gtn(0)){l=m;break}c=c-1}else for(c=c+1;c<Xe;){let m=u.ticks[c];if(m.liquidityGross.gtn(0)){l=m;break}c=c+1}let{publicKey:d}=de(e,t,a);return{initializedTick:l,tickArrayAddress:d,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Y.checkIsOutOfBoundary(e)){if(e>ct)return!1;let n=Y.getTickArrayStartIndexByTick(rt,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Xe*e}};var os=14,$t=class{static maxTickInTickarrayBitmap(e){return e*Xe*hn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let r=n*i;return e<0?{minValue:-r,maxValue:-r+n}:{minValue:r,maxValue:r+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!pe.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let r=this.maxTickInTickarrayBitmap(n),s=i?t-pe.tickCount(n):t+pe.tickCount(n);if(s<-r||s>=r)return{isInit:!1,tickIndex:t};let a=n*Xe,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(i){let l=e.shln(1024-u-1),d=uu(1024,l);if(d!==null){let m=(u-d-512)*a;return{isInit:!0,tickIndex:m}}else return{isInit:!1,tickIndex:-r}}else{let l=e.shrn(u),d=cu(1024,l);if(d!==null){let m=(u+d-512)*a;return{isInit:!0,tickIndex:m}}else return{isInit:!1,tickIndex:r-pe.tickCount(n)}}}},Si=class{static getBitmapOffset(e,t){if(!pe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=$t.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=$t.maxTickInTickarrayBitmap(e),n=-t;if(ct<=t)throw Error(`extensionTickBoundary check error: ${ct}, ${t}`);if(n<=rt)throw Error(`extensionTickBoundary check error: ${n}, ${rt}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),r=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Y.mergeTickArrayBitmap(i).testn(r),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let r=pe.tickCount(t),s=n?e-r:e+r,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:r,maxValue:s}=$t.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let c=Y.mergeTickArrayBitmap(e).shln(hn-1-a),u=hi(512,c)?null:es(512,c);if(u!==null){let l=t-u*pe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r}}else{let c=Y.mergeTickArrayBitmap(e).shrn(a),u=hi(512,c)?null:ts(512,c);if(u!==null){let l=t+u*pe.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-pe.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%$t.maxTickInTickarrayBitmap(t),i=Math.floor(n/pe.tickCount(t));return e<0&&n!=0&&(i=hn-i),i}};var Be=class{static getOutputAmountAndRemainAccounts(e,t,n,i,r,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:d}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!d)throw new Error("Invalid tick array");c.push(d);let{allTrade:m,amountCalculated:p,accounts:f,sqrtPriceX64:b,feeAmount:y}=Tn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,l,r,s);return c.push(...f),{allTrade:m,expectedAmountOut:p.mul(Zt),remainingAccounts:c,executionPrice:b,feeAmount:y}}static getInputAmountAndRemainAccounts(e,t,n,i,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 b=this.preInitializedTickArrayStartIndex(e,s);if(b.isExist){let{publicKey:y}=de(e.programId,e.id,b.nextStartIndex);a.push(y)}}catch{}a.push(l);let{amountCalculated:d,accounts:m,sqrtPriceX64:p,feeAmount:f}=Tn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Zt),u,r);return a.push(...m),{expectedAmountIn:d,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Be.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Si.checkTickArrayIsInit(pe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Y.checkTickArrayIsInitialized(Y.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=de(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:r,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,pe.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(r){let{publicKey:a}=de(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/pe.tickCount(e.tickSpacing)),i=t?Y.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Y.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=pe.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:r}=$t.nextInitializedTickArrayStartIndex(Y.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:r};t=r;let{isInit:s,tickIndex:a}=Si.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<rt||t>ct)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:r}){var a,c,u;let s=[];for(let l=0;l<r.length;l++){let d=r[l],m=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(d.tokenMint))==null?void 0:c.owner;if(m===void 0)throw Error("get new reward mint info error");let p=U(O({},d),{perSecond:oe.x64ToDecimal(d.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new At(m)});if(p.tokenMint.equals(At.default))continue;if(n<=p.openTime.toNumber()||i.eq(Le)){s.push(p);continue}let f=new Ke(Math.min(p.endTime.toNumber(),n)),b=f.sub(p.lastUpdateTime),y=oe.mulDivFloor(b,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(y),w=oe.mulDivFloor(b,p.emissionsPerSecondX64,wt),k=p.rewardTotalEmissioned.add(w);s.push(U(O({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:k,lastUpdateTime:f}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let r of t){let s=Y.getTickArrayStartIndexByTick(r,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=$t.maxTickInTickarrayBitmap(e),n=-t;return t>ct&&(t=pe.getArrayStartIndex(ct,e)+pe.tickCount(e)),n<rt&&(n=pe.getArrayStartIndex(rt,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!pe.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/pe.tickCount(t)*hn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await Ue(e,t.map(s=>({pubkey:s})),{batchRequest:n}),r={};for(let s of i)s.accountInfo!==null&&(r[s.pubkey.toString()]=gu.decode(s.accountInfo.data));return r}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},r=[];for(let c of t){let u=Y.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=Y.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let d of l){let{publicKey:m}=de(c.programId,c.id,d);r.push({pubkey:m}),i[m.toString()]=c.id}}let s=await Ue(e,r,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=i[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=xi.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=U(O({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!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(m=>m.accountInfo.mint),u=[];for(let m of c)for(let p of s)u.push(lt(p,m).publicKey);let l=await Lt(t,u,{batchRequest:i}),d={};for(let m of l){if(m===null)continue;let p=Ki.decode(m.data),f=p.poolId.toString(),b=e.find(x=>x.state.id.toBase58()===f);if(b===void 0)continue;let y=b.state,g=Y._getTickPriceLegacy({poolInfo:y,tick:p.tickLower,baseIn:!0}),w=Y._getTickPriceLegacy({poolInfo:y,tick:p.tickUpper,baseIn:!0}),{amountA:k,amountB:P}=fe.getAmountsFromLiquidity(y.sqrtPriceX64,g.tickSqrtPriceX64,w.tickSqrtPriceX64,p.liquidity,!1),T=1/(1-Math.sqrt(Math.sqrt(g.price.div(w.price).toNumber())));b.positionAccount=[...(a=b.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:w.price,amountA:k,amountB:P,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(O({},x),{pendingReward:new Ke(0)})),leverage:T,tokenFeeAmountA:new Ke(0),tokenFeeAmountB:new Ke(0)}];let h=await Y.getTickArrayAddressByTick(b.state.programId,p.poolId,p.tickLower,b.state.tickSpacing),S=await Y.getTickArrayAddressByTick(b.state.programId,p.poolId,p.tickUpper,b.state.tickSpacing);d[`${b.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=h,d[`${b.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(r){let m=Object.values(d),p=await Lt(t,m,{batchRequest:i}),f={};for(let b=0;b<m.length;b++){let y=p[b];if(y===null)continue;let g=m[b].toString();f[g]=xi.decode(y.data)}for(let{state:b,positionAccount:y}of e)if(!!y)for(let g of y){let w=`${b.programId.toString()}-${b.id.toString()}-${g.tickLower}`,k=`${b.programId.toString()}-${b.id.toString()}-${g.tickUpper}`,P=f[d[w].toString()],T=f[d[k].toString()],h=P.ticks[Y.getTickOffsetInArray(g.tickLower,b.tickSpacing)],S=T.ticks[Y.getTickOffsetInArray(g.tickUpper,b.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:K}=await Bi.GetPositionFees(b,g,h,S),B=await Bi.GetPositionRewards(b,g,h,S);g.tokenFeeAmountA=x.gte(new Ke(0))?x:new Ke(0),g.tokenFeeAmountB=K.gte(new Ke(0))?K:new Ke(0);for(let C=0;C<B.length;C++)g.rewardInfos[C].pendingReward=B[C].gte(new Ke(0))?B[C]:new Ke(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:r,slippage:s,priceLimit:a=new v(0),catchLiquidityInsufficient:c=!1}){var M;let u,l=n.toBase58()===e.mintA.address,[d,m]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new v(0))?u=l?Kt.add(new Ke(1)):Ct.sub(new Ke(1)):u=ne.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=we(r,d,i,!1),{allTrade:f,expectedAmountOut:b,remainingAccounts:y,executionPrice:g,feeAmount:w}=Be.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((M=p.fee)!=null?M:Le),u,c),k=we(b,m,i,!1),P=ne.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),T=l?P:new v(1).div(P),h=b.mul(new Ke(Math.floor((1-s)*1e10))).div(new Ke(1e10)),S=we(h,m,i,!1),x=l?e.currentPrice:new v(1).div(e.currentPrice),K=new v(T).sub(x).abs(),B=x,C=new Ye(new v(K).mul(10**15).toFixed(0),new v(B).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:k,minAmountOut:S,expirationTime:_t(p.expirationTime,k.expirationTime),currentPrice:e.currentPrice,executionPrice:T,priceImpact:C,fee:w,remainingAccounts:y,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:r,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=i.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[d,m]=[new Re(U(O({},u),{mint:u.address,isToken2022:u.programId===bu.toBase58()})),new Re(U(O({},l),{mint:l.address,isToken2022:l.programId===bu.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:b,minAmountOut:y,expirationTime:g,currentPrice:w,executionPrice:k,priceImpact:P,fee:T,remainingAccounts:h,executionPriceX64:S}=Be.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new At(u.address),amountIn:n,slippage:r,epochInfo:s,catchLiquidityInsufficient:a}),x=U(O({},f),{amount:new ge(d,f.amount),fee:f.fee===void 0?void 0:new ge(d,f.fee)}),K=U(O({},b),{amount:new ge(m,b.amount),fee:b.fee===void 0?void 0:new ge(m,b.fee)}),B=U(O({},y),{amount:new ge(m,y.amount),fee:y.fee===void 0?void 0:new ge(m,y.fee)}),C=new pt({baseToken:d,denominator:new Ke(10).pow(new Ke(20+d.decimals)),quoteToken:m,numerator:w.mul(new v(10**(20+m.decimals))).toFixed(0)}),M=new pt({baseToken:d,denominator:new Ke(10).pow(new Ke(20+d.decimals)),quoteToken:m,numerator:k.mul(new v(10**(20+m.decimals))).toFixed(0)}),R=new ge(d,T);return{allTrade:p,realAmountIn:x,amountOut:K,minAmountOut:B,expirationTime:g,currentPrice:C,executionPrice:M,priceImpact:P,fee:R,remainingAccounts:h,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:r,slippage:s,priceLimit:a=new v(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 v(0))?l=c?Ct.sub(new Ke(1)):Kt.add(new Ke(1)):l=ne.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let d=we(r,u[n.toString()],i,!0),{expectedAmountIn:m,remainingAccounts:p,executionPrice:f,feeAmount:b}=Be.getInputAmountAndRemainAccounts(e,t,n,d.amount.sub((B=d.fee)!=null?B:Le),l),y=c?e.mintB.address:e.mintA.address,g=we(m,u[y],i,!1),w=ne.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),k=c?w:new v(1).div(w),P=m.mul(new Ke(Math.floor((1+s)*1e10))).div(new Ke(1e10)),T=we(P,u[y],i,!0),h=c?e.currentPrice:new v(1).div(e.currentPrice),S=new v(k).sub(h).abs(),x=h,K=new Ye(new v(S).mul(10**15).toFixed(0),new v(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:T,realAmountOut:d,expirationTime:_t(g.expirationTime,d.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:K,fee:b,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var f,b,y;let r=e[t],s=Y.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Y.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),c=Math.max(s,r.priceMin),l=Math.min(a,r.priceMax)-c,d=a-s,m=r.priceMax-r.priceMin,p;return l<=0?p=0:d===l?p=m/l:m===l?p=l/d:p=l/m*(l/d),{feeApr:r.feeApr*p,rewardsApr:[((f=r.rewardApr[0])!=null?f:0)*p,((b=r.rewardApr[1])!=null?b:0)*p,((y=r.rewardApr[2])!=null?y:0)*p],apr:r.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:r,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],d=i[tt(e.mintA.address).toString()],m=i[tt(e.mintB.address).toString()],p=e.mintA.decimals,f=e.mintB.decimals;if(!l||!d||!m)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let b=ne.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),y=ne.getSqrtPriceX64FromTick(s),g=ne.getSqrtPriceX64FromTick(a),{amountSlippageA:w,amountSlippageB:k}=fe.getAmountsFromLiquidityWithSlippage(b,y,g,t,!1,!1,0),{amountSlippageA:P,amountSlippageB:T}=fe.getAmountsFromLiquidityWithSlippage(b,y,g,r,!1,!1,0),h=new v(w.toString()).div(new v(10).pow(p)).mul(d.value).add(new v(k.toString()).div(new v(10).pow(f)).mul(m.value)),S=new v(P.toString()).div(new v(10).pow(p)).mul(d.value).add(new v(T.toString()).div(new v(10).pow(f)).mul(m.value)),x=new v(1).div(h.add(S)),B=new v(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),C=3600*24*365,M=e.rewardDefaultInfos.map(R=>{var N,se;let _=R.mint.decimals,q=i[R.mint.address];return c<((N=R.startTime)!=null?N:0)||c>((se=R.endTime)!=null?se:0)||!R.perSecond||!q||_===void 0?0:new v(q.value).mul(new v(R.perSecond).mul(C)).div(new v(10).pow(_)).mul(x).mul(100).toNumber()});return{feeApr:B,rewardsApr:M,apr:B+M.reduce((R,_)=>R+_,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:r,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,w;let l=ne.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),d=ne.getSqrtPriceX64FromTick(n),m=ne.getSqrtPriceX64FromTick(i),p=a?1-s:1+s,f=we(r,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),b=new Ke(new v(f.amount.sub((w=f.fee)!=null?w:Le).toString()).mul(p).toFixed(0)),y;if(l.lte(d))y=t?fe.getLiquidityFromTokenAmountA(d,m,b,!a):new Ke(0);else if(l.lte(m)){let k=fe.getLiquidityFromTokenAmountA(l,m,b,!a),P=fe.getLiquidityFromTokenAmountB(d,l,b);y=t?k:P}else y=t?new Ke(0):fe.getLiquidityFromTokenAmountB(d,m,b);return Be.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:i,liquidity:y,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:r,slippage:s,add:a}){var y,g,w,k;let c=ne.getSqrtPriceX64FromTick(n),u=ne.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,d=fe.getAmountsFromLiquidity(ne.priceToSqrtPriceX64(new v(t.price),t.mintA.decimals,t.mintB.decimals),c,u,r,a),[m,p]=[we(d.amountA,(y=t.mintA.extensions)==null?void 0:y.feeConfig,e,!0),we(d.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,b]=[we(d.amountA.muln(l),(w=t.mintA.extensions)==null?void 0:w.feeConfig,e,!0),we(d.amountB.muln(l),(k=t.mintB.extensions)==null?void 0:k.feeConfig,e,!0)];return{liquidity:r,amountA:m,amountB:p,amountSlippageA:f,amountSlippageB:b,expirationTime:_t(m.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(c=>!n[c.id]).map(c=>new At(c.id));(await Lt(e,i)).forEach((c,u)=>{!c||(n[i[u].toBase58()]=In.decode(c.data))});let s=t.map(c=>Ve(new At(c.programId),new At(c.id)).publicKey),a=await Be.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>U(O({},c),{[u.id]:U(O({},n[u.id]),{id:new At(u.id),version:6,programId:new At(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:U(O({},u.config),{id:new At(u.config.id),fundOwner:""}),currentPrice:new v(u.price),exBitmapAccount:Ve(new At(u.programId),new At(u.id)).publicKey,exBitmapInfo:a[Ve(new At(u.programId),new At(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};var rs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function yu(o){return U(O({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:rs,week:rs,month:rs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:U(O({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var oe=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),r=i.div(n);return i.mod(n).eq(Le)||(r=r.add(gt)),r}static mulDivFloor(e,t,n){if(n.eq(Le))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Le))throw new Error("division by 0");return e.mul(t).add(n.sub(gt)).div(n)}static x64ToDecimal(e,t){return new v(e.toString()).div(v.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ue(e.mul(v.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ro).sub(t).mod(Ro)}};function je(o,e){return ss(o.mul(e),64,256)}function Zm(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function ss(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ne=class{static sqrtPriceX64ToPrice(e,t,n){return oe.x64ToDecimal(e).pow(2).mul(v.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return oe.decimalToX64(e.mul(v.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(Le))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Le))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){if(!e.gt(Le))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Le))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(Le))return e;let r=t.shln(Pi);if(i){let s=r,a=r.add(n.mul(e));return a.gte(s)?oe.mulDivCeil(s,e,a):oe.mulDivRoundingUp(s,gt,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 oe.mulDivCeil(r,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let r=n.shln(Pi);if(i)return e.add(r.div(t));{let s=oe.mulDivRoundingUp(r,gt,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<rt||e>ct)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ue("18445821805675395072"):new ue("18446744073709551616");return(t&2)!=0&&(n=je(n,new ue("18444899583751176192"))),(t&4)!=0&&(n=je(n,new ue("18443055278223355904"))),(t&8)!=0&&(n=je(n,new ue("18439367220385607680"))),(t&16)!=0&&(n=je(n,new ue("18431993317065453568"))),(t&32)!=0&&(n=je(n,new ue("18417254355718170624"))),(t&64)!=0&&(n=je(n,new ue("18387811781193609216"))),(t&128)!=0&&(n=je(n,new ue("18329067761203558400"))),(t&256)!=0&&(n=je(n,new ue("18212142134806163456"))),(t&512)!=0&&(n=je(n,new ue("17980523815641700352"))),(t&1024)!=0&&(n=je(n,new ue("17526086738831433728"))),(t&2048)!=0&&(n=je(n,new ue("16651378430235570176"))),(t&4096)!=0&&(n=je(n,new ue("15030750278694412288"))),(t&8192)!=0&&(n=je(n,new ue("12247334978884435968"))),(t&16384)!=0&&(n=je(n,new ue("8131365268886854656"))),(t&32768)!=0&&(n=je(n,new ue("3584323654725218816"))),(t&65536)!=0&&(n=je(n,new ue("696457651848324352"))),(t&131072)!=0&&(n=je(n,new ue("26294789957507116"))),(t&262144)!=0&&(n=je(n,new ue("37481735321082"))),e>0&&(n=nu.div(n)),n}static getTickFromPrice(e,t,n){return ne.getTickFromSqrtPriceX64(ne.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Ct)||e.lt(Kt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ue(t-64),i=Zm(n,32,128),r=new ue("8000000000000000","hex"),s=0,a=new ue(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;r.gt(new ue(0))&&s<iu;){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),d=i.add(u).mul(new ue(ou)),m=ss(d.sub(new ue(ru)),64,128).toNumber(),p=ss(d.add(new ue(su)),64,128).toNumber();return m==p?m:ne.getSqrtPriceX64FromTick(p).lte(e)?p:m}},Bn=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=ne.getTickFromSqrtPriceX64(ne.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let r=Bn.getTickWithPriceAndTickspacing(e,t,n,i),s=ne.getSqrtPriceX64FromTick(r);return ne.sqrtPriceX64ToPrice(s,n,i)}},fe=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Le))throw new Error("sqrtPriceX64A must greater than 0");let r=n.ushln(Pi),s=t.sub(e);return i?oe.mulDivRoundingUp(oe.mulDivCeil(r,s,t),gt,e):oe.mulDivFloor(r,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Le))throw new Error("sqrtPriceX64A must greater than 0");return i?oe.mulDivCeil(n,t.sub(e),wt):oe.mulDivFloor(n,t.sub(e),wt)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let r=n.mul(e).mul(t),s=t.sub(e),a=r.div(s);return i?oe.mulDivRoundingUp(a,gt,Jr):a.shrn(Pi)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),oe.mulDivFloor(n,Jr,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return fe.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=fe.getLiquidityFromTokenAmountA(e,n,i,!1),a=fe.getLiquidityFromTokenAmountB(t,e,r);return s.lt(a)?s:a}else return fe.getLiquidityFromTokenAmountB(t,n,r)}static getAmountsFromLiquidity(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:fe.getTokenAmountAFromLiquidity(t,n,i,r),amountB:new ue(0)};if(e.lt(n)){let s=fe.getTokenAmountAFromLiquidity(e,n,i,r),a=fe.getTokenAmountBFromLiquidity(t,e,i,r);return{amountA:s,amountB:a}}else return{amountA:new ue(0),amountB:fe.getTokenAmountBFromLiquidity(t,n,i,r)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,r,s,a){let{amountA:c,amountB:u}=fe.getAmountsFromLiquidity(e,t,n,i,s),l=r?1+a:1-a,d=new ue(new v(c.toString()).mul(l).toFixed(0)),m=new ue(new v(u.toString()).mul(l).toFixed(0));return{amountSlippageA:d,amountSlippageB:m}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:r,add:s,epochInfo:a,amountAddFee:c}){var w,k,P,T;let u=ne.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),l=ne.getSqrtPriceX64FromTick(t),d=ne.getSqrtPriceX64FromTick(n),m=s?1+r:1-r,p=fe.getAmountsFromLiquidity(u,l,d,i,s),[f,b]=[we(p.amountA,(w=e.mintA.extensions)==null?void 0:w.feeConfig,a,c),we(p.amountB,(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,c)],[y,g]=[we(new ue(new v(p.amountA.toString()).mul(m).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,c),we(new ue(new v(p.amountB.toString()).mul(m).toFixed(0)),(T=e.mintB.extensions)==null?void 0:T.feeConfig,a,c)];return{liquidity:i,amountA:f,amountB:b,amountSlippageA:y,amountSlippageB:g,expirationTime:_t(f.expirationTime,b.expirationTime)}}},Tn=class{static swapCompute(e,t,n,i,r,s,a,c,u,l,d,m,p,f,b=!1){if(m.eq(Le))throw new Error("amountSpecified must not be 0");if(f||(f=s?Kt.add(gt):Ct.sub(gt)),s){if(f.lt(Kt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(f.gte(d))throw new Error("sqrtPriceX64 must smaller than current")}else{if(f.gt(Ct))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(f.lte(d))throw new Error("sqrtPriceX64 must greater than current")}let y=m.gt(Le),g={amountSpecifiedRemaining:m,amountCalculated:Le,sqrtPriceX64:d,tick:u>p?Math.min(p+pe.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new ue(0)},w=p,k=n[p],P=0,T=!s&&k.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Le)&&!g.sqrtPriceX64.eq(f);){P>10;let h={};h.sqrtPriceStartX64=g.sqrtPriceX64;let S=Y.nextInitTick(k,g.tick,l,s,T),x=S||null,K=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let C=Be.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:r},w,s);if(!C.isExist){if(b)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}w=C.nextStartIndex;let{publicKey:M}=de(e,t,w);K=M,k=n[w];try{x=Y.firstInitializedTick(k,s)}catch{throw Error("not found next tick info")}}h.tickNext=x.tick,h.initialized=x.liquidityGross.gtn(0),p!==w&&K&&(g.accounts.push(K),p=w),h.tickNext<rt?h.tickNext=rt:h.tickNext>ct&&(h.tickNext=ct),h.sqrtPriceNextX64=ne.getSqrtPriceX64FromTick(h.tickNext);let B;if(s&&h.sqrtPriceNextX64.lt(f)||!s&&h.sqrtPriceNextX64.gt(f)?B=f:B=h.sqrtPriceNextX64,[g.sqrtPriceX64,h.amountIn,h.amountOut,h.feeAmount]=Tn.swapStepCompute(g.sqrtPriceX64,B,g.liquidity,g.amountSpecifiedRemaining,a,s),g.feeAmount=g.feeAmount.add(h.feeAmount),y?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(h.amountIn.add(h.feeAmount)),g.amountCalculated=g.amountCalculated.sub(h.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(h.amountOut),g.amountCalculated=g.amountCalculated.add(h.amountIn.add(h.feeAmount))),g.sqrtPriceX64.eq(h.sqrtPriceNextX64)){if(h.initialized){let C=x.liquidityNet;s&&(C=C.mul(Zt)),g.liquidity=fe.addDelta(g.liquidity,C)}T=h.tickNext!=g.tick&&!s&&k.startTickIndex===h.tickNext,g.tick=s?h.tickNext-1:h.tickNext}else if(g.sqrtPriceX64!=h.sqrtPriceStartX64){let C=ne.getTickFromSqrtPriceX64(g.sqrtPriceX64);T=C!=g.tick&&!s&&k.startTickIndex===C,g.tick=C}++P}try{let{nextStartIndex:h,isExist:S}=pe.nextInitializedTickArray(g.tick,l,s,i,r);S&&p!==h&&(g.accounts.push(de(e,t,h).publicKey),p=h)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Le,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,i,r,s){let a={sqrtPriceX64Next:new ue(0),amountIn:new ue(0),amountOut:new ue(0),feeAmount:new ue(0)},c=i.gte(Le);if(c){let l=oe.mulDivFloor(i,Mo.sub(new ue(r.toString())),Mo);a.amountIn=s?fe.getTokenAmountAFromLiquidity(t,e,n,!0):fe.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(a.amountIn)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ne.getNextSqrtPriceX64FromInput(e,n,l,s)}else a.amountOut=s?fe.getTokenAmountBFromLiquidity(t,e,n,!1):fe.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Zt).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=ne.getNextSqrtPriceX64FromOutput(e,n,i.mul(Zt),s);let u=t.eq(a.sqrtPriceX64Next);return s?(u&&c||(a.amountIn=fe.getTokenAmountAFromLiquidity(a.sqrtPriceX64Next,e,n,!0)),u&&!c||(a.amountOut=fe.getTokenAmountBFromLiquidity(a.sqrtPriceX64Next,e,n,!1))):(a.amountIn=u&&c?a.amountIn:fe.getTokenAmountBFromLiquidity(e,a.sqrtPriceX64Next,n,!0),a.amountOut=u&&!c?a.amountOut:fe.getTokenAmountAFromLiquidity(e,a.sqrtPriceX64Next,n,!1)),!c&&a.amountOut.gt(i.mul(Zt))&&(a.amountOut=i.mul(Zt)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=i.sub(a.amountIn):a.feeAmount=oe.mulDivCeil(a.amountIn,new ue(r),Mo.sub(new ue(r))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var Xe=60,hn=512,Y=class{static getTickArrayAddressByTick(e,t,n,i){let r=Y.getTickArrayStartIndexByTick(n,i),{publicKey:s}=de(e,t,r);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Y.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=Xe)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=pe.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*pe.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Xe,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*Xe,r=Math.floor(t/i)+512,s=Math.abs(r);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Xe:e+t*Xe}static mergeTickArrayBitmap(e){let t=new $m(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,r){let s=Math.floor(i/(n*Xe));return[...Y.searchLowBitFromStart(e,t,s-1,r,n),...Y.searchHightBitFromStart(e,t,s,r,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Y.searchHightBitFromStart(e,t,-7680,hn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,r){let s=[],a=Y.getAllInitializedTickArrayStartIndex(n,i,r);for(let c of a){let{publicKey:u}=de(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,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.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===i)break}let c=pe.tickCount(r);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.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===i)break}let c=pe.tickCount(r);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<rt||e>ct}static nextInitTick(e,t,n,i,r){if(pe.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(r||(a=a+1);a<Xe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Xe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Xe;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let i=ne.getSqrtPriceX64FromTick(t),r=ne.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new v(1).div(r),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new v(1).div(t),r=Bn.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ne.getSqrtPriceX64FromTick(r),a=ne.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new v(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=ne.getSqrtPriceX64FromTick(t),r=ne.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new v(1).div(r),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new v(1).div(t),r=Bn.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ne.getSqrtPriceX64FromTick(r),a=ne.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new v(1).div(a)}}};var wu=W([ye(8),X("bump"),Qt("index"),L(""),ot("protocolFeeRate"),ot("tradeFeeRate"),Qt("tickSpacing"),H(A(),8,"")]),Jm=W([ot("blockTimestamp"),Fn("tickCumulative"),H(A(),4)]),Au=W([ye(8),Me("initialized"),A("recentEpoch"),Qt("observationIndex"),L("poolId"),H(Jm,100,"observations"),H(A(),4)]),ed=W([X("rewardState"),A("openTime"),A("endTime"),A("lastUpdateTime"),J("emissionsPerSecondX64"),A("rewardTotalEmissioned"),A("rewardClaimed"),L("tokenMint"),L("tokenVault"),L("creator"),J("rewardGrowthGlobalX64")]),In=W([ye(8),X("bump"),L("ammConfig"),L("creator"),L("mintA"),L("mintB"),L("vaultA"),L("vaultB"),L("observationId"),X("mintDecimalsA"),X("mintDecimalsB"),Qt("tickSpacing"),J("liquidity"),J("sqrtPriceX64"),Se("tickCurrent"),ot(),J("feeGrowthGlobalX64A"),J("feeGrowthGlobalX64B"),A("protocolFeesTokenA"),A("protocolFeesTokenB"),J("swapInAmountTokenA"),J("swapOutAmountTokenB"),J("swapInAmountTokenB"),J("swapOutAmountTokenA"),X("status"),H(X(),7,""),H(ed,3,"rewardInfos"),H(A(),16,"tickArrayBitmap"),A("totalFeesTokenA"),A("totalFeesClaimedTokenA"),A("totalFeesTokenB"),A("totalFeesClaimedTokenB"),A("fundFeesTokenA"),A("fundFeesTokenB"),A("startTime"),H(A(),15*4-3,"padding")]),td=W([J("growthInsideLastX64"),A("rewardAmountOwed")]),Ki=W([ye(8),X("bump"),L("nftMint"),L("poolId"),Se("tickLower"),Se("tickUpper"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),H(td,3,"rewardInfos"),H(A(),8,"")]),OP=W([ye(8),X("bump"),L("poolId"),Se("tickLowerIndex"),Se("tickUpperIndex"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),H(J(),3,"rewardGrowthInside"),H(A(),8,"")]),nd=W([Se("tick"),_a("liquidityNet"),J("liquidityGross"),J("feeGrowthOutsideX64A"),J("feeGrowthOutsideX64B"),H(J(),3,"rewardGrowthsOutsideX64"),H(ot(),13,"")]),xi=W([ye(8),L("poolId"),Se("startTickIndex"),H(nd,Xe,"ticks"),X("initializedTickCount"),H(X(),115,"")]),ku=W([ye(329),H(L(),100,"whitelistMints")]),gu=W([ye(8),L("poolId"),H(H(A(),8),os,"positiveTickArrayBitmap"),H(H(A(),8),os,"negativeTickArrayBitmap")]),MP=W([A(),X("bump"),L("owner"),L("poolId"),L("positionId"),L("nftAccount"),H(A(),8)]),NP=W([ye(8),X("bump"),L("lockOwner"),L("poolId"),L("positionId"),L("nftAccount"),L("lockNftMint"),A("recentEpoch"),H(A(),8)]);Au.span;var Pu=le("Raydium_Clmm"),kt={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],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]},hu=[188,37,179,131,82,150,84,73],Tu=[16,72,250,198,14,162,212,19],Pe=class{static createPoolInstruction(e,t,n,i,r,s,a,c,u,l,d,m,p){let f=W([J("sqrtPriceX64"),A("zero")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Jt.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],y=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,zero:Le},y);let g=Buffer.from([...kt.createPool,...y]);return new Je({keys:b,programId:e,data:g})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:r,ammConfigId:s,initialPriceX64:a}=e,[c,u]=[new G(i.address),new G(r.address)],{publicKey:l}=mu(t,s,c,u),{publicKey:d}=pu(t,l),{publicKey:m}=ns(t,l,c),{publicKey:p}=ns(t,l,u),f=Ve(t,l).publicKey,b=[this.createPoolInstruction(t,l,n,s,d,c,m,new G(i.programId||ke),u,p,new G(r.programId||ke),f,a)];return{signers:[],instructions:b,instructionTypes:[D.CreateAccount,D.ClmmCreatePool],address:{poolId:l,observationId:d,exBitmapAccount:f,mintAVault:m,mintBVault:p},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,d,m,p,f,b,y,g,w,k,P,T,h,S,x,K,B){let C=W([Se("tickLowerIndex"),Se("tickUpperIndex"),Se("tickArrayLowerStartIndex"),Se("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Me("withMetadata"),X("optionBaseFlag"),Me("baseFlag")]),M=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:Jt.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ci,isSigner:!1,isWritable:!1},{pubkey:Xt,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...M],_=Buffer.alloc(C.span);C.encode({tickLowerIndex:w,tickUpperIndex:k,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:T,liquidity:h,amountMaxA:S,amountMaxB:x,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},_);let q=Buffer.from([...kt.openPosition,..._]);return new Je({keys:R,programId:e,data:q})}static openPositionFromLiquidityInstruction22(e,t,n,i,r,s,a,c,u,l,d,m,p,f,b,y,g,w,k,P,T,h,S,x,K){let B=W([Se("tickLowerIndex"),Se("tickUpperIndex"),Se("tickArrayLowerStartIndex"),Se("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Me("withMetadata"),X("optionBaseFlag"),Me("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],M=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:Jt.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ci,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...C],R=Buffer.alloc(B.span);B.encode({tickLowerIndex:g,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:P,liquidity:T,amountMaxA:h,amountMaxB:S,withMetadata:x==="create",baseFlag:!1,optionBaseFlag:0},R);let _=Buffer.from([...kt.openPositionWithTokenEx,...R]);return new Je({keys:M,programId:e,data:_})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:d}){let m=[],[p,f]=[new G(e.programId),new G(e.id)],b;if(l)b=new G((await l(1))[0]);else{let K=vo.generate();m.push(K),b=K.publicKey}let y=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:w}=de(p,f,y),{publicKey:k}=de(p,f,g),{publicKey:P}=d?ie(n.wallet,b,Ne):ie(n.wallet,b,ke),{publicKey:T}=Pn(b),{publicKey:h}=lt(p,b),{publicKey:S}=Et(p,f,i,r),x=d?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,b,P,S,w,k,h,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),i,r,y,g,s,a,c,u,Be.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ve(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,b,P,T,S,w,k,h,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),i,r,y,g,s,a,c,u,Be.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ve(p,f).publicKey:void 0);return{signers:m,instructions:[x],instructionTypes:[D.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:w,tickArrayUpper:k,positionNftAccount:P,metadataAccount:T,personalPosition:h,protocolPosition:S}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:d}){let m=[],[p,f]=[new G(e.programId),new G(e.id)],b;if(l)b=new G((await l(1))[0]);else{let K=vo.generate();m.push(K),b=K.publicKey}let y=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:w}=de(p,f,y),{publicKey:k}=de(p,f,g),{publicKey:P}=d?ie(n.wallet,b,Ne):ie(n.wallet,b,ke),{publicKey:T}=Pn(b),{publicKey:h}=lt(p,b),{publicKey:S}=Et(p,f,i,r),x=d?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,b,P,S,w,k,h,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),i,r,y,g,u,s,a,c,Be.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ve(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,b,P,T,S,w,k,h,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),i,r,y,g,u,s,a,c,Be.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ve(p,f).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:w,tickArrayUpper:k,positionNftAccount:P,metadataAccount:T,personalPosition:h,protocolPosition:S},instructions:[x],signers:m,instructionTypes:[D.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,r,s,a,c,u,l,d,m,p,f,b,y,g,w,k,P,T,h,S,x,K,B){let C=W([Se("tickLowerIndex"),Se("tickUpperIndex"),Se("tickArrayLowerStartIndex"),Se("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Me("withMetadata"),X("optionBaseFlag"),Me("baseFlag")]),M=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:Jt.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ci,isSigner:!1,isWritable:!1},{pubkey:Xt,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...M],_=Buffer.alloc(C.span);C.encode({tickLowerIndex:w,tickUpperIndex:k,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:T,liquidity:new as(0),amountMaxA:S==="MintA"?x:K,amountMaxB:S==="MintA"?K:x,withMetadata:h==="create",baseFlag:S==="MintA",optionBaseFlag:1},_);let q=Buffer.from([...kt.openPosition,..._]);return new Je({keys:R,programId:e,data:q})}static openPositionFromBaseInstruction22(e,t,n,i,r,s,a,c,u,l,d,m,p,f,b,y,g,w,k,P,T,h,S,x,K){let B=W([Se("tickLowerIndex"),Se("tickUpperIndex"),Se("tickArrayLowerStartIndex"),Se("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Me("withMetadata"),X("optionBaseFlag"),Me("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],M=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:Jt.programId,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ci,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...C],R=Buffer.alloc(B.span);B.encode({tickLowerIndex:g,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:P,liquidity:new as(0),amountMaxA:h==="MintA"?S:x,amountMaxB:h==="MintA"?x:S,withMetadata:T==="create",baseFlag:h==="MintA",optionBaseFlag:1},R);let _=Buffer.from([...kt.openPositionWithTokenEx,...R]);return new Je({keys:M,programId:e,data:_})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:d}){let m,p=[];if(l)m=new G((await l(1))[0]);else{let K=vo.generate();p.push(K),m=K.publicKey}let[f,b]=[new G(e.programId),new G(e.id)],y=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:w}=de(f,b,y),{publicKey:k}=de(f,b,g),{publicKey:P}=d?ie(n.wallet,m,Ne):ie(n.wallet,m,ke),{publicKey:T}=Pn(m),{publicKey:h}=lt(f,m),{publicKey:S}=Et(f,b,i,r),x=d?this.openPositionFromLiquidityInstruction22(f,n.wallet,b,n.wallet,m,P,S,w,k,h,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(t.mintA.address),new G(t.mintB.address),i,r,y,g,s,a,c,u,Be.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ve(f,b).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,b,n.wallet,m,P,T,S,w,k,h,n.tokenAccountA,n.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(t.mintA.address),new G(t.mintB.address),i,r,y,g,s,a,c,u,Be.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?Ve(f,b).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:w,tickArrayUpper:k,positionNftAccount:P,metadataAccount:T,personalPosition:h,protocolPosition:S},instructions:[x],signers:p,instructionTypes:[D.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,r,s){let a=W([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Jt.programId,isSigner:!1,isWritable:!1},{pubkey:s?Ne:ke,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...kt.closePosition,...u]);return new Je({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i,nft2022:r}){let s=new G(e.programId),a=r?ie(n.wallet,i.nftMint,Ne).publicKey:ie(n.wallet,i.nftMint,ke).publicKey,{publicKey:c}=lt(s,i.nftMint),u=[];return u.push(this.closePositionInstruction(s,n.wallet,i.nftMint,a,c,r)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[D.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,d,m,p,f,b,y,g,w){let k=W([J("liquidity"),A("amountMaxA"),A("amountMaxB"),X("optionBaseFlag"),Me("baseFlag")]),P=[...w?[{pubkey:w,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:i,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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...P],h=Buffer.alloc(k.span);k.encode({liquidity:b,amountMaxA:y,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},h);let S=Buffer.from([...kt.increaseLiquidity,...h]);return new Je({keys:T,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMaxA:s,amountMaxB:a,nft2022:c}){let[u,l]=[new G(e.programId),new G(e.id)],d=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=de(u,l,d),{publicKey:f}=de(u,l,m),{publicKey:b}=c?ie(i.wallet,n.nftMint,Ne):ie(i.wallet,n.nftMint,ke),{publicKey:y}=lt(u,n.nftMint),{publicKey:g}=Et(u,l,n.tickLower,n.tickUpper),w=this.increasePositionFromLiquidityInstruction(u,i.wallet,b,y,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),r,s,a,Be.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,m])?Ve(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:y,protocolPosition:g},signers:[],instructions:[w],instructionTypes:[D.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:r,baseAmount:s,otherAmountMax:a,nft2022:c}){let[u,l]=[new G(e.programId),new G(e.id)],d=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=de(u,l,d),{publicKey:f}=de(u,l,m),{publicKey:b}=c?ie(i.wallet,n.nftMint,Ne):ie(i.wallet,n.nftMint,ke),{publicKey:y}=lt(u,n.nftMint),{publicKey:g}=Et(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:y,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,b,y,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),r,s,a,Be.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,m])?Ve(u,l).publicKey:void 0)],signers:[],instructionTypes:[D.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,r,s,a,c,u,l,d,m,p,f,b,y,g,w){let k=W([J("liquidity"),A("amountMaxA"),A("amountMaxB"),X("optionBaseFlag"),Me("baseFlag")]),P=[...w?[{pubkey:w,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:i,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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...P],h=Buffer.alloc(k.span);k.encode({liquidity:new as(0),amountMaxA:b==="MintA"?y:g,amountMaxB:b==="MintA"?g:y,baseFlag:b==="MintA",optionBaseFlag:1},h);let S=Buffer.from([...kt.increaseLiquidity,...h]);return new Je({keys:T,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,i,r,s,a,c,u,l,d,m,p,f,b,y,g,w,k){let P=W([J("liquidity"),A("amountMinA"),A("amountMinB")]),T=[...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...b.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:m,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:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:io,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],S=Buffer.alloc(P.span);P.encode({liquidity:y,amountMinA:g,amountMinB:w},S);let x=Buffer.from([...kt.decreaseLiquidity,...S]);return new Je({keys:h,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMinA:s,amountMinB:a,programId:c,nft2022:u}){let[l,d]=[new G(e.programId),new G(e.id)],m=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=de(l,d,m),{publicKey:b}=de(l,d,p),{publicKey:y}=u?ie(i.wallet,n.nftMint,Ne):ie(i.wallet,n.nftMint,c),{publicKey:g}=lt(l,n.nftMint),{publicKey:w}=Et(l,d,n.tickLower,n.tickUpper),k=[];for(let h=0;h<e.rewardDefaultInfos.length;h++)k.push({poolRewardVault:new G(t.rewardInfos[h].vault),ownerRewardVault:i.rewardAccounts[h],rewardMint:new G(e.rewardDefaultInfos[h].mint.address)});let P=[],T=this.decreaseLiquidityInstruction(l,i.wallet,y,g,d,w,f,b,i.tokenAccountA,i.tokenAccountB,new G(t.vault.A),new G(t.vault.B),new G(e.mintA.address),new G(e.mintB.address),k,r,s,a,Be.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,p])?Ve(l,d).publicKey:void 0);return P.push(T),{address:{tickArrayLower:f,tickArrayUpper:b,positionNftAccount:y,personalPosition:g,protocolPosition:w},signers:[],instructions:P,instructionTypes:[D.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,r,s,a,c,u,l,d,m,p,f,b,y,g){let w=W([A("amount"),A("otherAmountThreshold"),J("sqrtPriceLimitX64"),Me("isBaseInput")]),k=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...d.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],P=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,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:m,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:io,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(w.span);w.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:b,isBaseInput:y},T);let h=Buffer.from([...kt.swap,...T]);return new Je({keys:P,programId:e,data:h})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:r,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,d]=[new G(e.programId),new G(e.id)],[m,p]=[new G(t.vault.A),new G(t.vault.B)],[f,b]=[new G(e.mintA.address),new G(e.mintB.address)],y=e.mintA.address===r.toString(),g=[this.swapInstruction(l,i.wallet,d,new G(e.config.id),y?i.tokenAccountA:i.tokenAccountB,y?i.tokenAccountB:i.tokenAccountA,y?m:p,y?p:m,y?f:b,y?b:f,u,n,s,a,c,!0,Ve(l,d).publicKey)];return{signers:[],instructions:g,instructionTypes:[D.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,outputMint:r,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,d]=[new G(e.programId),new G(e.id)],[m,p]=[new G(t.vault.A),new G(t.vault.B)],[f,b]=[new G(e.mintA.address),new G(e.mintB.address)],y=e.mintA.address===r.toBase58(),g=[this.swapInstruction(l,i.wallet,d,new G(e.config.id),y?i.tokenAccountB:i.tokenAccountA,y?i.tokenAccountA:i.tokenAccountB,y?p:m,y?m:p,y?b:f,y?f:b,u,n,s,a,c,!1,Ve(l,d).publicKey)];return{signers:[],instructions:g,instructionTypes:[D.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,r,s,a,c,u,l,d,m){let p=W([A("openTime"),A("endTime"),J("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:i,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Jt.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],b=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(d),emissionsPerSecondX64:m},b);let y=Buffer.from([...kt.initReward,...b]);return new Je({keys:f,programId:e,data:y})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new G(e.programId),new G(e.id)],a=du(r,s,i.mint).publicKey,c=Ti(r).publicKey,u=[this.initRewardInstruction(r,n.wallet,s,c,new G(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[D.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,r,s,a,c,u,l,d,m){let p=W([X("rewardIndex"),J("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:i,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],b=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:m,openTime:Z(l),endTime:Z(d)},b);let y=Buffer.from([...kt.setRewardEmissions,...b]);return new Je({keys:f,programId:e,data:y})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new G(e.programId),new G(e.id)],a,c,u;for(let m=0;m<e.rewardDefaultInfos.length;m++)e.rewardDefaultInfos[m].mint.address===i.mint.toString()&&(a=m,c=new G(t.rewardInfos[m].vault),u=new G(t.rewardInfos[m].mint.address));(a===void 0||c===void 0)&&Pu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Ti(r).publicKey,d=[this.setRewardInstruction(r,n.wallet,s,l,new G(e.config.id),n.tokenAccount,c,u,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:d,instructionTypes:[D.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,r,s,a){let c=W([X("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:io,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let d=Buffer.from([...kt.collectReward,...l]);return new Je({keys:u,programId:e,data:d})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[r,s]=[new G(e.programId),new G(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,c=new G(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Pu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(r,n.wallet,s,n.tokenAccount,c,i,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[D.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:i,wallet:r,nftMint:s,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new G((await c(1))[0]);else{let g=vo.generate();u.push(g),l=g.publicKey}let d=a?ie(r,s,Ne).publicKey:ie(r,s,ke).publicKey,{publicKey:m}=lt(n,s),p=Ii(e,l).publicKey,f=ie(r,l,ke).publicKey,b=Pn(l).publicKey,y=Pe.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:r,lockOwner:r,positionNftAccount:d,positionId:m,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:b,withMetadata:!0,nft2022:a,positionNftMint:s,authPositionNftAccount:ie(t,s,a?Ne:ke).publicKey,positionNftProgram:a?Ne:ke});return{address:{positionId:m,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:d,metadataAccount:b},instructions:[y],signers:u,instructionTypes:[D.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:i,lockOwner:r,positionNftAccount:s,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:l,lockPositionId:d,lockNftMint:m,lockNftAccount:p,metadataAccount:f,withMetadata:b}){let y=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:Xt,isSigner:!1,isWritable:!1},{pubkey:Ci,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Jt.programId,isSigner:!1,isWritable:!1}],g=W([Me("withMetadata")]),w=Buffer.alloc(g.span);g.encode({withMetadata:b},w);let k=Buffer.from([...hu,...w]);return new Je({keys:y,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:r}){let{publicKey:s}=ie(i,r,ke),{publicKey:a}=lt(n,r),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:is(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Jt.programId,isSigner:!1,isWritable:!1}];return new Je({keys:c,programId:e,data:Buffer.from(hu)})}static harvestLockPositionInstruction(e){let[t,n]=[new G(e.poolKeys.programId),new G(e.poolKeys.id)],i=Y.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),r=Y.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=de(t,n,i),{publicKey:a}=de(t,n,r),{publicKey:c}=ie(e.owner,e.ownerPosition.nftMint,ke),{publicKey:u}=lt(t,e.ownerPosition.nftMint),{publicKey:l}=Et(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),d=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)d.push({poolRewardVault:new G(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new G(e.poolKeys.rewardInfos[f].mint.address)});let m=[...d.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:is(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 G(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new G(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:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1},{pubkey:new G(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new G(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...m];return new Je({keys:p,programId:e.programId,data:Buffer.from(Tu)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:i,lockOwner:r,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:d,vaultA:m,vaultB:p,tickArrayLower:f,tickArrayUpper:b,userVaultA:y,userVaultB:g,mintA:w,mintB:k,rewardAccounts:P,exTickArrayBitmap:T}){let h=[...T?[{pubkey:T,isSigner:!1,isWritable:!0}]:[],...P.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:i,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:ke,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...h];return new Je({keys:S,programId:e,data:Buffer.from(Tu)})}};var ZP=W([ot("mintAuthorityOption"),L("mintAuthority"),A("supply"),X("decimals"),X("isInitialized"),ot("freezeAuthorityOption"),L("freezeAuthority")]);import{PublicKey as th}from"@solana/web3.js";import{MintLayout as ih,TOKEN_PROGRAM_ID as rh}from"@solana/spl-token";var _o=o=>new Re({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),Ri=i=>{var r=i,{amount:o,isRaw:e,name:t}=r,n=De(r,["amount","isRaw","name"]);return new ge(new Re({mint:tt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};var st=i=>{var r=i,{address:o,programId:e,decimals:t}=r,n=De(r,["address","programId","decimals"]);return O({chainId:101,address:tt(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},fn=o=>o?U(O({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:U(O({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:U(O({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import Iu from"bn.js";var us=new Iu(25),Vo=new Iu(1e4);import{PublicKey as Ut,SystemProgram as yd,SYSVAR_RENT_PUBKEY as Kh,TransactionInstruction as Gn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as gd,TOKEN_PROGRAM_ID as Oi}from"@solana/spl-token";var cs=W([X("instruction"),A("amountIn"),A("minAmountOut")]),ls=W([X("instruction"),A("maxAmountIn"),A("amountOut")]),kh=W([X("instruction"),X("nonce")]),id=W([X("instruction"),X("nonce"),A("startTime")]),Eo=W([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"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),A("swapBase2QuoteFee"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),A("swapQuote2BaseFee"),L("baseVault"),L("quoteVault"),L("baseMint"),L("quoteMint"),L("lpMint"),L("openOrders"),L("marketId"),L("marketProgramId"),L("targetOrders"),L("withdrawQueue"),L("lpVault"),L("owner"),A("lpReserve"),H(A(),3,"padding")]),Ph=W([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"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),A("swapQuote2BaseFee"),A("swapBase2QuoteFee"),L("baseVault"),L("quoteVault"),L("baseMint"),L("quoteMint"),L("lpMint"),L("modelDataAccount"),L("openOrders"),L("marketId"),L("marketProgramId"),L("targetOrders"),L("owner"),H(A(),64,"padding")]),ms=W([X("instruction"),A("baseAmountIn"),A("quoteAmountIn"),A("fixedSide"),A("otherAmountMin")]),ds=W([X("instruction"),A("lpAmount"),A("baseAmountMin"),A("quoteAmountMin")]);var Bu=W([A("fee")]);import{PublicKey as od}from"@solana/web3.js";var Un=new od("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Sn=5e4,rd=W([A("x"),A("y"),A("price")]),sd=W([A("accountType"),A("status"),A("multiplier"),A("validDataCount"),H(rd,Sn,"DataElement")]);function ad(o,e){return[0,Sn-2]}function ud(o){return[0,Sn-2]}function cd(o){return[0,Sn-2]}function ld(o,e,t){let[n,i]=ad(e,t),r=n,s=i,a=0,c=e*o.multiplier/t;for(;r<=s;){if(a=Math.floor((s+r)/2),a===0||a>=Sn-2)return[a,a,!1];let u=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,d=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===d)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<d)return[a,a+1,!0];r=a+1}}return[a,a,!1]}function ps(o,e,t){let[n,i,r]=ld(o,e,t);if(!r)return 0;if(n===i){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,c=o.DataElement[i].x,u=o.DataElement[i].y,l=t*(c*a-s*u),d=s*l,m=(c-s)*(e*a-s*t)*u,p=d+m;return e*o.multiplier*l/p}}function xn(o,e,t){return e*o.multiplier/t}function xu(o,e,t){return e*t/o.multiplier}function md(o,e){let[t,n]=ud(e),i=t,r=n,s=0,a=e;for(;i<r;){if(s=Math.floor((r+i)/2),s<=0||s>Sn-2)return[s,s,!1];let c=o.DataElement[s].x,u=o.DataElement[s-1].x,l=o.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)r=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function dd(o,e){let[t,n]=cd(e),i=t,r=n,s=0,a=e;for(;i<=r;){if(s=Math.floor((r+i)/2),s<=0||s>=Sn-2)return[s,s,!1];let c=o.DataElement[s].y,u=o.DataElement[s-1].y,l=o.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];r=s-1}}return[s,s,!1]}function Su(o,e,t,n){let i=n?e+t:e-t,[r,s,a]=md(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let c=o.DataElement[r].x,u=o.DataElement[s].x,l=o.DataElement[r].price,d=o.DataElement[s].price,m=o.DataElement[r].y,p=o.DataElement[s].y;if(e>=c&&e<=u)return n?[d,p,!0,a]:[l,m,!0,a];{let f,b;return n?(f=l+(d-l)*(e-c)/(u-c),b=m-(i-c)*o.multiplier/d):(f=l+(d-l)*(e-c)/(u-c),b=p+(u-i)*o.multiplier/l),[f,b,!1,a]}}}function pd(o,e,t,n){let i=n?e-t:e+t,[r,s,a]=dd(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let c=o.DataElement[r].x,u=o.DataElement[s].x,l=o.DataElement[r].price,d=o.DataElement[s].price,m=o.DataElement[r].y,p=o.DataElement[s].y;if(e>=p&&e<=m)return n?[d,u,!0,a]:[l,c,!0,a];{let f,b;return n?(f=l+(d-l)*(m-e)/(m-p),b=c+d*(m-i)/o.multiplier):(f=l+(d-l)*(m-e)/(m-p),b=u-l*(i-p)/o.multiplier),[f,b,!1,a]}}}function fd(o,e){let t=Su(o,e,0,!1);return t[3]?t[0]:0}function Ku(o,e,t,n){let i=ps(o,e,t),r=xn(o,e,i),s=xn(o,t,i),a=xn(o,n,i),c=!0,[u,l,d,m]=Su(o,r,a,c);if(!m)return 0;if(d)return n*o.multiplier/u;{let p=s-l;return xu(o,p,i)}}function Cu(o,e,t,n){let i=ps(o,e,t),r=xn(o,e,i),s=xn(o,t,i),a=xn(o,n,i),c=!1,[u,l,d,m]=pd(o,s,a,c);if(!m)return 0;if(d)return n*u/o.multiplier;{let p=r-l;return xu(o,p,i)}}function bd(o){let e=sd.decode(o);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function Ru(o,e,t,n){let i=fd(o,xn(o,e,ps(o,e,t)))/o.multiplier;return n?i:1/i}var Li=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(Un);e&&(this._layoutData=bd(e==null?void 0:e.data))}}};var Lu=le("Raydium_liquidity_instruction");function Ou(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:r,fixedSide:s,otherAmountMin:a}=o,c=Buffer.alloc(ms.span);ms.encode({instruction:3,baseAmountIn:Z(i),quoteAmountIn:Z(r),otherAmountMin:Z(a),fixedSide:s==="base"?ft:sa},c);let u=[I({pubkey:Oi,isWritable:!1}),I({pubkey:new Ut(e.id)}),I({pubkey:new Ut(t.authority),isWritable:!1}),I({pubkey:new Ut(t.openOrders),isWritable:!1}),I({pubkey:new Ut(t.targetOrders)}),I({pubkey:new Ut(e.lpMint.address)}),I({pubkey:new Ut(t.vault.A)}),I({pubkey:new Ut(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(I({pubkey:Un})),u.push(I({pubkey:new Ut(e.marketId),isWritable:!1}),I({pubkey:n.baseTokenAccount}),I({pubkey:n.quoteTokenAccount}),I({pubkey:n.lpTokenAccount}),I({pubkey:n.owner,isWritable:!1,isSigner:!0}),I({pubkey:new Ut(t.marketEventQueue),isWritable:!1})),new Gn({programId:new Ut(e.programId),keys:u,data:c})}function fs(o){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:r,quoteAmountMin:s}=o,a=$e(t),c=4;if(e.pooltype.includes("StablePool")&&(c=5),c===4||c===5){let u=Buffer.alloc(ds.span);ds.encode({instruction:4,lpAmount:Z(i),baseAmountMin:Z(r),quoteAmountMin:Z(s)},u);let l=[I({pubkey:Oi,isWritable:!1}),I({pubkey:a.id}),I({pubkey:a.authority,isWritable:!1}),I({pubkey:a.openOrders}),I({pubkey:a.targetOrders}),I({pubkey:a.mintLp.address}),I({pubkey:a.vault.A}),I({pubkey:a.vault.B})];return c===5?l.push(I({pubkey:Un})):(l.push(I({pubkey:a.id})),l.push(I({pubkey:a.id}))),l.push(I({pubkey:a.marketProgramId,isWritable:!1}),I({pubkey:a.marketId}),I({pubkey:a.marketBaseVault}),I({pubkey:a.marketQuoteVault}),I({pubkey:a.marketAuthority,isWritable:!1}),I({pubkey:n.lpTokenAccount}),I({pubkey:n.baseTokenAccount}),I({pubkey:n.quoteTokenAccount}),I({pubkey:n.owner,isWritable:!1,isSigner:!0}),I({pubkey:a.marketEventQueue}),I({pubkey:a.marketBids}),I({pubkey:a.marketAsks})),new Gn({programId:a.programId,keys:l,data:u})}return new Gn({programId:a.programId,keys:[]})}function bs({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:r,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:d,marketProgramId:m,marketId:p,userWallet:f,userCoinVault:b,userPcVault:y,userLpVault:g,nonce:w,openTime:k,coinAmount:P,pcAmount:T,ammConfigId:h,feeDestinationId:S}){let x=W([X("instruction"),X("nonce"),A("openTime"),A("pcAmount"),A("coinAmount")]),K=[{pubkey:Oi,isSigner:!1,isWritable:!1},{pubkey:gd,isSigner:!1,isWritable:!1},{pubkey:yd.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,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:h,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],B=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:w,openTime:k,coinAmount:P,pcAmount:T},B),{instruction:new Gn({keys:K,programId:o,data:B}),instructionType:D.AmmV4CreatePool}}function wd({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},i){let r=$e(o),s=Buffer.alloc(cs.span);cs.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[I({pubkey:Oi,isWritable:!1}),I({pubkey:r.id}),I({pubkey:r.authority,isWritable:!1}),I({pubkey:r.openOrders})];return i===4&&a.push(I({pubkey:r.targetOrders})),a.push(I({pubkey:r.vault.A}),I({pubkey:r.vault.B})),i===5&&a.push(I({pubkey:Un})),a.push(I({pubkey:r.marketProgramId,isWritable:!1}),I({pubkey:r.marketId}),I({pubkey:r.marketBids}),I({pubkey:r.marketAsks}),I({pubkey:r.marketEventQueue}),I({pubkey:r.marketBaseVault}),I({pubkey:r.marketQuoteVault}),I({pubkey:r.marketAuthority,isWritable:!1}),I({pubkey:e.tokenAccountIn}),I({pubkey:e.tokenAccountOut}),I({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Gn({programId:r.programId,keys:a,data:s})}function Ad({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},i){let r=$e(o),s=Buffer.alloc(ls.span);ls.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[I({pubkey:Oi,isWritable:!1}),I({pubkey:r.id}),I({pubkey:r.authority,isWritable:!1}),I({pubkey:r.openOrders}),I({pubkey:r.targetOrders}),I({pubkey:r.vault.A}),I({pubkey:r.vault.B})];return i===5&&a.push(I({pubkey:Un})),a.push(I({pubkey:r.marketProgramId,isWritable:!1}),I({pubkey:r.marketId}),I({pubkey:r.marketBids}),I({pubkey:r.marketAsks}),I({pubkey:r.marketEventQueue}),I({pubkey:r.marketBaseVault}),I({pubkey:r.marketQuoteVault}),I({pubkey:r.marketAuthority,isWritable:!1}),I({pubkey:e.tokenAccountIn}),I({pubkey:e.tokenAccountOut}),I({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Gn({programId:r.programId,keys:a,data:s})}function Fo(o){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:r,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return wd(U(O({},a),{amountIn:i,minAmountOut:r}),t);if(s==="out")return Ad(U(O({},a),{maxAmountIn:i,amountOut:r}),t);Lu.logWithError("invalid params","params",o)}throw Lu.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{PublicKey as hd}from"@solana/web3.js";import Zh from"bn.js";import{TOKEN_PROGRAM_ID as Td}from"@solana/spl-token";import{PublicKey as kd}from"@solana/web3.js";var Pd=le("Raydium_liquidity_serum");function Mu({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let r=t.concat(Buffer.from([n]),Buffer.alloc(7));i=kd.createProgramAddressSync(r,o)}catch(r){if(r instanceof TypeError)throw r;n++;continue}return{publicKey:i,nonce:n}}throw Pd.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}function Do({programId:o}){let{publicKey:e}=me([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function Kn({name:o,programId:e,marketId:t}){let{publicKey:n}=me([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function Id({programId:o,marketId:e}){let{publicKey:t}=me([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function gs({programId:o}){return me([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function ws({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:r,quoteDecimals:s,programId:a,marketProgramId:c}){let u=Kn({name:"amm_associated_seed",programId:a,marketId:t}),l=Kn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:d,nonce:m}=gs({programId:a}),p=Kn({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=Kn({name:"pc_vault_associated_seed",programId:a,marketId:t}),b=Kn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),y=Id({programId:a,marketId:t}),g=Kn({name:"target_associated_seed",programId:a,marketId:t}),w=Kn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=Mu({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:r,quoteDecimals:s,lpDecimals:r,version:o,programId:a,authority:d,nonce:m,baseVault:p,quoteVault:f,lpVault:b,openOrders:y,targetOrders:g,withdrawQueue:w,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:k,lookupTableAccount:hd.default,configId:Do({programId:a})}}var ys={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Wo=o=>{let e={},t=Td.toBase58();return Object.keys(o).map(n=>{let i=o[n],[r,s]=[i.baseMint.toBase58(),i.quoteMint.toBase58()];e[n]={id:n,version:4,status:i.status.toNumber(),programId:i.programId.toBase58(),mintA:st({address:r,programId:t,decimals:i.baseDecimal.toNumber()}),mintB:st({address:s,programId:t,decimals:i.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:i.poolPrice.toNumber(),mintAmountA:new v(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new v(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new v(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:ys,week:ys,month:ys,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:Do({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:new v(i.lpReserve.toString()).div(10**Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())).toNumber(),lpMint:st({address:i.lpMint.toBase58(),programId:t,decimals:Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())}),burnPercent:0}}),e};import ve from"bn.js";import{PublicKey as Mi}from"@solana/web3.js";import Ni from"bn.js";import{TOKEN_PROGRAM_ID as Vu}from"@solana/spl-token";import{SystemProgram as Cn,SYSVAR_RENT_PUBKEY as xd,Transaction as Nu,TransactionInstruction as Sd}from"@solana/web3.js";import{createInitializeAccountInstruction as vu,TOKEN_PROGRAM_ID as _u}from"@solana/spl-token";function Bd(o="accountFlags"){let e=new xo(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var As=W([ye(5),Bd("accountFlags"),L("ownAddress"),A("vaultSignerNonce"),L("baseMint"),L("quoteMint"),L("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),L("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),L("requestQueue"),L("eventQueue"),L("bids"),L("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),ye(7)]);function Kd({programId:o,marketInfo:e}){let t=W([X("version"),ot("instruction"),A("baseLotSize"),A("quoteLotSize"),Qt("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:xd,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),i=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},i),new Sd({keys:n,programId:o,data:i})}async function qo({connection:o,wallet:e,marketInfo:t}){var s,a,c,u,l,d,m,p;let n=new Nu,i=await o.getMinimumBalanceForRentExemption(165);n.add(Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:_u}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:_u}),vu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),vu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(As.span),space:As.span,programId:t.programId}));let r=new Nu;return r.add(Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await o.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(d=t.orderbookQueueSpace)!=null?d:65536+12,programId:t.programId}),Cn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await o.getMinimumBalanceForRentExemption((m=t.orderbookQueueSpace)!=null?m:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Kd({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:[D.CreateAccount,D.CreateAccount,D.InitAccount,D.InitAccount]},{transaction:r,signer:[],instructionTypes:[D.CreateAccount,D.CreateAccount,D.CreateAccount,D.CreateAccount,D.CreateAccount,D.InitMarket]}]}var Xn=class extends Oe{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:r,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:d,computeBudgetConfig:m,txTipConfig:p}){let f=this.scope.ownerPubKey,b=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,y=_e({fromPublicKey:f,programId:r,assignSeed:b&&`${b}-market`}),g=_e({fromPublicKey:f,programId:r,assignSeed:b&&`${b}-request`}),w=_e({fromPublicKey:f,programId:r,assignSeed:b&&`${b}-event`}),k=_e({fromPublicKey:f,programId:r,assignSeed:b&&`${b}-bids`}),P=_e({fromPublicKey:f,programId:r,assignSeed:b&&`${b}-asks`}),T=_e({fromPublicKey:f,programId:Vu,assignSeed:b&&`${b}-baseVault`}),h=_e({fromPublicKey:f,programId:Vu,assignSeed:b&&`${b}-quoteVault`}),S=0,x=new Ni(100);function K(){let N=new Ni(0);for(;;)try{return{vaultOwner:Mi.createProgramAddressSync([y.publicKey.toBuffer(),N.toArrayLike(Buffer,"le",8)],r),vaultSignerNonce:N}}catch{if(N.iaddn(1),N.gt(new Ni(25555)))throw Error("find vault owner error")}}let{vaultOwner:B,vaultSignerNonce:C}=K(),M=new Ni(Math.round(10**e.decimals*n)),R=new Ni(Math.round(n*10**t.decimals*i));if(M.eq(ft))throw Error("lot size is too small");if(R.eq(ft))throw Error("tick size or lot size is too small");let _=await qo({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:r,id:y,baseMint:e.mint,quoteMint:t.mint,baseVault:T,quoteVault:h,vaultOwner:B,requestQueue:g,eventQueue:w,bids:k,asks:P,feeRateBps:S,quoteDustThreshold:x,vaultSignerNonce:C,baseLotSize:M,quoteLotSize:R,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),q=this.createTxBuilder();q.addInstruction({instructions:_[0].transaction.instructions,signers:_[0].signer});for await(let N of _.slice(1,_.length))q.addInstruction({instructions:N.transaction.instructions,signers:N.signer,instructionTypes:N.instructionTypes});return d===0?q.sizeCheckBuildV0({computeBudgetConfig:m,address:{marketId:y.publicKey,requestQueue:g.publicKey,eventQueue:w.publicKey,bids:k.publicKey,asks:P.publicKey,baseVault:T.publicKey,quoteVault:h.publicKey,baseMint:new Mi(e.mint),quoteMint:new Mi(t.mint)}}):q.sizeCheckBuild({computeBudgetConfig:m,address:{marketId:y.publicKey,requestQueue:g.publicKey,eventQueue:w.publicKey,bids:k.publicKey,asks:P.publicKey,baseVault:T.publicKey,quoteVault:h.publicKey,baseMint:new Mi(e.mint),quoteMint:new Mi(t.mint)}})}};var vi=class extends Oe{constructor(t){super(t);this.stableLayout=new Li({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:r}){let s=new ve(new v(n).mul(10**t[r?"mintA":"mintB"].decimals).toFixed(0)),a=_o(t[r?"mintB":"mintA"]),[c,u]=[new ve(new v(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new ve(new v(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new ve(new v(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,v.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:",`${i.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let d=r?"base":"quote";this.logDebug("input side:",d);let m=ft;s.isZero()||(m=d==="base"?ro(s.mul(u),c):ro(s.mul(c),u)),this.logDebug("amountRaw:",m.toString(),"lpAmount:",l.toString());let p=ro(s.mul(l),d==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Ye(new ve(1)).add(i),b=new Ye(new ve(1)).sub(i),y=f.mul(m).quotient,g=b.mul(m).quotient,w=new ge(a,m),k=new ge(a,y),P=new ge(a,g);return this.logDebug("anotherAmount:",w.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:w,maxAnotherAmount:k,minAnotherAmount:P,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:i,amountInA:r,amountInB:s,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:d,txTipConfig:m}=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:p}=this.scope,{bypassAssociatedCheck:f,checkCreateATAOwner:b}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[y,g]=[r.token,s.token],w=await p.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),k=await p.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1});!w&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let P=await p.getCreatedTokenAccount({mint:new We(n.lpMint.address)}),T=[y,g],h=[w,k],S=[r.raw,s.raw],x=r.token.mint.toBase58()===n.mintA.address?"base":"quote",K="base";["quote","base"].includes(x)||this.logAndCreateError("invalid fixedSide","fixedSide",c),x==="quote"?(T.reverse(),h.reverse(),S.reverse(),K=c==="a"?"quote":"base"):x==="base"&&(K=c==="a"?"base":"quote");let[B,C]=T,[M,R]=h,[_,q]=S,N=i!=null?i:await this.getAmmPoolKeys(n.id),se=this.createTxBuilder(),ht=await p.handleTokenAccount({side:"in",amount:_,mint:B.mint,tokenAccount:M,bypassAssociatedCheck:f,checkCreateATAOwner:b}),{tokenAccount:Te}=ht,ze=De(ht,["tokenAccount"]);se.addInstruction(ze);let Tt=await p.handleTokenAccount({side:"in",amount:q,mint:C.mint,tokenAccount:R,bypassAssociatedCheck:f,checkCreateATAOwner:b}),{tokenAccount:xe}=Tt,qe=De(Tt,["tokenAccount"]);se.addInstruction(qe);let mt=await p.handleTokenAccount({side:"out",amount:0,mint:new We(n.lpMint.address),tokenAccount:P,bypassAssociatedCheck:f,checkCreateATAOwner:b}),{tokenAccount:Ie}=mt,Pt=De(mt,["tokenAccount"]);return se.addInstruction(Pt),se.addInstruction({instructions:[Ou({poolInfo:n,poolKeys:N,userKeys:{baseTokenAccount:Te,quoteTokenAccount:xe,lpTokenAccount:Ie,owner:this.scope.ownerPubKey},baseAmountIn:_,quoteAmountIn:q,otherAmountMin:a.raw,fixedSide:K})],instructionTypes:[n.pooltype.includes("StablePool")?D.AmmV5AddLiquidity:D.AmmV4AddLiquidity],lookupTableAddress:N.lookupTableAccount?[N.lookupTableAccount]:[]}),se.addCustomComputeBudget(d),se.addTipInstruction(m),l===0?await se.buildV0():se.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:i,lpAmount:r,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l,txTipConfig:d}=t,m=i!=null?i:await this.getAmmPoolKeys(n.id),[p,f,b]=[new We(n.mintA.address),new We(n.mintB.address),new We(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:y}=this.scope,g=await y.getCreatedTokenAccount({mint:b,associatedOnly:!1});g||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",y.tokenAccounts);let w=await y.getCreatedTokenAccount({mint:p}),k=await y.getCreatedTokenAccount({mint:f}),P=this.createTxBuilder(),{bypassAssociatedCheck:T,checkCreateATAOwner:h}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),C=await y.handleTokenAccount({side:"out",amount:0,mint:p,tokenAccount:w,bypassAssociatedCheck:T,checkCreateATAOwner:h}),{tokenAccount:S}=C,x=De(C,["tokenAccount"]);P.addInstruction(x);let M=await y.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:k,bypassAssociatedCheck:T,checkCreateATAOwner:h}),{tokenAccount:K}=M,B=De(M,["tokenAccount"]);return P.addInstruction(B),P.addInstruction({instructions:[fs({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:g,baseTokenAccount:S,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:r,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?D.AmmV5RemoveLiquidity:D.AmmV4RemoveLiquidity]}),P.addCustomComputeBudget(l),P.addTipInstruction(d),u===0?await P.buildV0():P.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:r,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:d,tokenProgram:m=bn,checkCreateATAOwner:p=!0,getEphemeralSigners:f,txVersion: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 y=this.createTxBuilder(),g={};for(let N of this.scope.account.tokenAccountRawInfos)(g[N.accountInfo.mint.toString()]===void 0||ie(this.scope.ownerPubKey,N.accountInfo.mint,bn).publicKey.equals(N.pubkey))&&(g[N.accountInfo.mint.toString()]=N.pubkey);let w=g[t.lpMint.address];if(w===void 0)throw Error("find lp account error in trade accounts");let k=i.add(a!=null?a:new ve(0)),P=t.mintA.address===Re.WSOL.mint.toString(),T=t.mintB.address===Re.WSOL.mint.toString(),{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:bn,mint:new We(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!0,checkCreateATAOwner:p});if(y.addInstruction(S||{}),h===void 0)throw new Error("base token account not found");let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:bn,mint:new We(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!0,checkCreateATAOwner:p});if(y.addInstruction(K||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=h,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let N=It[s.programId],se=Bt({programId:new We(s.programId),poolId:new We(s.id),owner:this.scope.ownerPubKey,version:N}),Te,ze=await this.scope.connection.getAccountInfo(se);if(ze&&(Te=fi(N).decode(ze.data)),N!==6&&!Te){let{instruction:mt,instructionType:tn}=yi({id:new We(s.id),programId:new We(s.programId),version:N,ledger:se,owner:this.scope.ownerPubKey});y.addInstruction({instructions:[mt],instructionTypes:[tn]})}let xe=[];for(let mt of s.rewardInfos){let tn=mt.mint.address===Re.WSOL.mint.toString();if(g[mt.mint.address])xe.push(g[mt.mint.address]);else{let{account:jn,instructionParams:gn}=await this.scope.account.getOrCreateTokenAccount({mint:new We(mt.mint.address),tokenProgram:m,owner:this.scope.ownerPubKey,skipCloseAccount:!tn,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});jn||this.logAndCreateError("farm reward account not found:",mt.mint.address),gn&&y.addInstruction(gn),xe.push(jn)}}let qe=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ie={userAuxiliaryLedgers:d,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:qe,lpAccount:w,rewardAccounts:xe},Pt=It[s.programId],ht=Pt===6?gi(Ie):Pt===5?wi(Ie):Ai(Ie),Tt={3:D.FarmV3Withdraw,5:D.FarmV5Withdraw,6:D.FarmV6Withdraw};y.addInstruction({instructions:[ht],instructionTypes:[Tt[Pt]]})}let B=await this.getAmmPoolKeys(t.id),C=fs({poolInfo:t,poolKeys:B,userKeys:{lpTokenAccount:w,baseTokenAccount:h,quoteTokenAccount:x,owner:this.scope.ownerPubKey},lpAmount:k,baseAmountMin:0,quoteAmountMin:0});y.addInstruction({instructions:[C],instructionTypes:[t.pooltype.includes("StablePool")?D.AmmV5RemoveLiquidity:D.AmmV4RemoveLiquidity],lookupTableAddress:B.lookupTableAccount?[B.lookupTableAccount]:[]});let[M,R]=t.mintA.address===n.mintA.address?[h,x]:[x,h],_=await this.scope.clmm.getClmmPoolKeys(n.id),q=await Pe.openPositionFromBaseInstructions(U(O({poolInfo:n,poolKeys:_,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:M,tokenAccountB:R},withMetadata:"create"},r),{base:c,getEphemeralSigners:f}));return y.addInstruction({instructions:[...q.instructions],signers:q.signers,instructionTypes:[...q.instructionTypes],lookupTableAddress:_.lookupTableAccount?[_.lookupTableAccount]:[]}),b===0?y.sizeCheckBuildV0({computeBudgetConfig:u}):y.sizeCheckBuild({computeBudgetConfig:u})}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:r,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:d=!1,tokenProgram:m,txVersion:p,feeDestinationId:f,computeBudgetConfig:b,txTipConfig:y}){var R;let g=u.feePayer||((R=this.scope.owner)==null?void 0:R.publicKey),w=u.useSOLBalance&&i.mint.equals(Uo),k=u.useSOLBalance&&r.mint.equals(Uo),P=this.createTxBuilder(),{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:g,amount:s}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:l,checkCreateATAOwner:d});P.addInstruction(h||{});let{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:k?{payer:g,amount:a}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:l,checkCreateATAOwner:d});if(P.addInstruction(x||{}),T===void 0||S===void 0)throw Error("you don't has some token account");let K=ws({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:r.mint,baseDecimals:i.decimals,quoteDecimals:r.decimals,programId:t,marketProgramId:n.programId}),B={programId:t,ammId:K.id,ammAuthority:K.authority,ammOpenOrders:K.openOrders,lpMint:K.lpMint,coinMint:K.baseMint,pcMint:K.quoteMint,coinVault:K.baseVault,pcVault:K.quoteVault,withdrawQueue:K.withdrawQueue,ammTargetOrders:K.targetOrders,poolTempLp:K.lpVault,marketProgramId:K.marketProgramId,marketId:K.marketId,ammConfigId:K.configId,feeDestinationId:f},{instruction:C,instructionType:M}=bs(U(O({},B),{userWallet:this.scope.ownerPubKey,userCoinVault:T,userPcVault:S,userLpVault:ie(this.scope.ownerPubKey,K.lpMint,m).publicKey,nonce:K.nonce,openTime:c,coinAmount:s,pcAmount:a}));return P.addInstruction({instructions:[C],instructionTypes:[M]}),P.addCustomComputeBudget(b),P.addTipInstruction(y),P.versionBuild({txVersion:p,extInfo:{address:B}})}async createMarketAndPoolV4({programId:t=uo,marketProgram:n=ya,feeDestinationId:i=wa,tokenProgram:r,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:d,lowestFeeMarket:m,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:b=!1,lotSize:y=1,tickSize:g=.01,txVersion:w,computeBudgetConfig:k,txTipConfig:P}){var Rs,Ls,Os;let T=this.scope.ownerPubKey,h=d.feePayer||((Rs=this.scope.owner)==null?void 0:Rs.publicKey),S=d.useSOLBalance&&s.mint.equals(Uo),x=d.useSOLBalance&&a.mint.equals(Uo),K=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,B=_e({fromPublicKey:T,programId:n,assignSeed:K&&`${K}-market`}),C=_e({fromPublicKey:T,programId:n,assignSeed:K&&`${K}-request`}),M=_e({fromPublicKey:T,programId:n,assignSeed:K&&`${K}-event`}),R=_e({fromPublicKey:T,programId:n,assignSeed:K&&`${K}-bids`}),_=_e({fromPublicKey:T,programId:n,assignSeed:K&&`${K}-asks`}),q=_e({fromPublicKey:T,programId:bn,assignSeed:K&&`${K}-baseVault`}),N=_e({fromPublicKey:T,programId:bn,assignSeed:K&&`${K}-quoteVault`}),se=0,Te=new ve(100);function ze(){let Dt=new ve(0);for(;;)try{return{vaultOwner:We.createProgramAddressSync([B.publicKey.toBuffer(),Dt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Dt}}catch{if(Dt.iaddn(1),Dt.gt(new ve(25555)))throw Error("find vault owner error")}}let{vaultOwner:xe,vaultSignerNonce:qe}=ze(),Ie=new ve(Math.round(10**s.decimals*y)),Pt=new ve(Math.round(y*10**a.decimals*g));if(Ie.eq(ft))throw Error("lot size is too small");if(Pt.eq(ft))throw Error("tick size or lot size is too small");let ht=await qo({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:xe,baseMint:s.mint,quoteMint:a.mint,id:B,baseVault:q,quoteVault:N,requestQueue:C,eventQueue:M,bids:R,asks:_,feeRateBps:se,quoteDustThreshold:Te,vaultSignerNonce:qe,baseLotSize:Ie,quoteLotSize:Pt,lowestFeeMarket:m}}),Tt=this.createTxBuilder();Tt.addInstruction({instructions:ht[0].transaction.instructions,signers:ht[0].signer});for await(let Dt of ht.slice(1,ht.length))Tt.addInstruction({instructions:Dt.transaction.instructions,signers:Dt.signer,instructionTypes:Dt.instructionTypes});let{account:mt,instructionParams:tn}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:h,amount:c}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:f,checkCreateATAOwner:b,assignSeed:S&&K?`${K}-wsol`:void 0});Tt.addInstruction(tn||{});let{account:jn,instructionParams:gn}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:x?{payer:h,amount:u}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:f,checkCreateATAOwner:b,assignSeed:x&&K?`${K}-wsol`:void 0});if(Tt.addInstruction(gn||{}),mt===void 0)throw Error("you don't has base token account");if(jn===void 0)throw Error("you don't has quote token account");let et=ws({version:4,marketVersion:3,marketId:B.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),rr={programId:t,ammId:et.id,ammAuthority:et.authority,ammOpenOrders:et.openOrders,lpMint:et.lpMint,coinMint:et.baseMint,pcMint:et.quoteMint,coinVault:et.baseVault,pcVault:et.quoteVault,withdrawQueue:et.withdrawQueue,ammTargetOrders:et.targetOrders,poolTempLp:et.lpVault,marketProgramId:et.marketProgramId,marketId:et.marketId,ammConfigId:et.configId,feeDestinationId:i},{instruction:ac,instructionType:uc}=bs(U(O({},rr),{userWallet:this.scope.ownerPubKey,userCoinVault:mt,userPcVault:jn,userLpVault:ie(this.scope.ownerPubKey,et.lpMint,r).publicKey,nonce:et.nonce,openTime:l,coinAmount:c,pcAmount:u}));Tt.addInstruction({instructions:[ac],instructionTypes:[uc]});let Cs=S||x?[((Ls=tn==null?void 0:tn.instructions)==null?void 0:Ls[0])||((Os=gn==null?void 0:gn.instructions)==null?void 0:Os[0])].filter(Dt=>!!Dt):void 0;return w===0?Tt.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:Cs,address:O({requestQueue:C.publicKey,eventQueue:M.publicKey,bids:R.publicKey,asks:_.publicKey,baseVault:q.publicKey,quoteVault:N.publicKey,baseMint:new We(s.mint),quoteMint:new We(a.mint)},rr)}):Tt.sizeCheckBuild({computeBudgetConfig:k,splitIns:Cs,address:O({requestQueue:C.publicKey,eventQueue:M.publicKey,bids:R.publicKey,asks:_.publicKey,baseVault:q.publicKey,quoteVault:N.publicKey,baseMint:new We(s.mint),quoteMint:new We(a.mint)},rr)})}async getCreatePoolFee({programId:t}){let n=Do({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return Bu.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:r,slippage:s}){let[a,c]=[i.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,d=[u,l],m=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(d.reverse(),m.reverse());let[f,b]=d,[y,g]=m,w=t.version===4,k;if(w)k=new v(b.toString()).div(10**g).div(new v(f.toString()).div(10**y));else{let R=Ru(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?k=new v(1e6).div(R*1e6):k=new v(R*1e6).div(1e6)}let P=n,T=new ve(0),h=new ve(0);if(!P.isZero())if(w){h=cn(P.mul(us),Vo);let R=P.sub(h),_=f.add(R);T=b.mul(R).div(_)}else{h=P.mul(new ve(2)).div(new ve(1e4));let R=P.sub(h);p==="quote"?T=new ve(Ku(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),R.toNumber())):T=new ve(Cu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),R.toNumber()))}let S=new ve(new v(T.toString()).mul(1-s).toFixed(0)),x=T,K=S,B=new v(T.toString()).div(new v(P.sub(h).toString()).toFixed(0));!P.isZero()&&!T.isZero()&&(B=new v(T.toString()).div(10**g).div(new v(P.sub(h).toString()).div(10**y)));let C=k.sub(B).div(k).mul(100);return{amountOut:x,minAmountOut:K,currentPrice:k,executionPrice:B,priceImpact:C,fee:h}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:i,mintOut:r,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;i.toString()!==t.mintA.address&&i.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=i.toString()===t.mintA.address,[l,d]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",d.symbol||d.address),this.logDebug("amountOut:",new v(n.toString()).div(10**d.decimals).toDecimalPlaces(d.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let m=[a,c],p=u?"quote":"base";p==="base"&&m.reverse(),this.logDebug("output side:",p);let[f,b]=m,y=new v(b.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new v(f.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${y.toString()} ${d.symbol||d.address}`),this.logDebug("currentPrice invert:",`1 ${d.symbol||d.address} \u2248 ${new v(1).div(y).toString()} ${l.symbol||l.address}`);let g=new ve(0),w=n;if(!w.isZero()){w.gt(b)&&(w=b.sub(new ve(1)));let K=b.sub(w);g=f.mul(w).div(K).mul(Vo).div(Vo.sub(us))}let k=new ve(new v(g.toString()).mul(1+s).toFixed(0)),P=g,T=k;this.logDebug("amountIn:",new v(P.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new v(T.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let h=null;!g.isZero()&&!w.isZero()&&(h=new v(w.toString()).div(10**d.decimals).div(new v(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${d.symbol||d.address} \u2248 ${h.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${d.symbol||d.address} \u2248 ${new v(1).div(h).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=y.mul(P.toString()),x=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:P,maxAmountIn:T,currentPrice:y,executionPrice:h,priceImpact:x}}async swap({poolInfo:t,poolKeys:n,amountIn:i,amountOut:r,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l,txTipConfig:d}){let m=this.createTxBuilder(),{associatedOnly:p=!0,inputUseSolBalance:f=!0,outputUseSolBalance:b=!0}=u||{},[y,g]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],w=f&&y.address===j.toBase58(),k=b&&g.address===j.toBase58(),{account:P,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:bn,mint:new We(y.address),owner:this.scope.ownerPubKey,createInfo:w?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:p});m.addInstruction(T||{}),P||this.logAndCreateError("input token account not found",{token:y.symbol||y.address,tokenAccountIn:P,inputTokenUseSolBalance:w,associatedOnly:p});let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:bn,mint:new We(g.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:p});m.addInstruction(S||{}),h===void 0&&this.logAndCreateError("output token account not found",{token:g.symbol||g.address,tokenAccountOut:h,outputTokenUseSolBalance:k,associatedOnly:p});let x=n||await this.getAmmPoolKeys(t.id),K=4;return t.pooltype.includes("StablePool")&&(K=5),m.addInstruction({instructions:[Fo({version:K,poolKeys:x,userKeys:{tokenAccountIn:P,tokenAccountOut:h,owner:this.scope.ownerPubKey},amountIn:i,amountOut:r,fixedSide:a})],instructionTypes:[K===4?D.AmmV4SwapBaseIn:D.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.addTipInstruction(d),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let i=await Ue(this.scope.connection,t.map(l=>({pubkey:new We(l)})),n),r={},s=[];for(let l=0;l<t.length;l++){let d=i[l];if(d===null||!d.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let m=Eo.decode(d.accountInfo.data);r[String(t[l])]=U(O({},m),{programId:d.accountInfo.owner}),s.push(m.baseVault,m.quoteVault)}let a={},c=await Ue(this.scope.connection,s.map(l=>({pubkey:new We(l)})),n);for(let l=0;l<s.length;l++){let d=c[l].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new ve(Cd.decode(d.data).amount.toString())}let u={};for(let[l,d]of Object.entries(r)){let m=a[d.baseVault.toString()].sub(d.baseNeedTakePnl),p=a[d.quoteVault.toString()].sub(d.quoteNeedTakePnl);u[l]=U(O({},d),{baseReserve:m,mintAAmount:a[d.baseVault.toString()],mintBAmount:a[d.quoteVault.toString()],quoteReserve:p,poolPrice:new v(p.toString()).div(new v(10).pow(d.quoteDecimal.toString())).div(new v(m.toString()).div(new v(10).pow(d.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=Wo({[t]:n}),r=i[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[i[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:r,poolKeys:s[0]}}};import{PublicKey as Q}from"@solana/web3.js";import bt from"bn.js";import{AccountLayout as Eu,TOKEN_2022_PROGRAM_ID as zn,TOKEN_PROGRAM_ID as _i}from"@solana/spl-token";var Vi=class extends Oe{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var k;let{programId:t,owner:n=((k=this.scope.owner)==null?void 0:k.publicKey)||Q.default,mint1:i,mint2:r,ammConfig:s,initialPrice:a,computeBudgetConfig:c,forerunCreate:u,getObserveState:l,txVersion:d,txTipConfig:m}=e,p=this.createTxBuilder(),[f,b,y]=new bt(new Q(i.address).toBuffer()).gt(new bt(new Q(r.address).toBuffer()))?[r,i,new v(1).div(a)]:[i,r,a],g=ne.priceToSqrtPriceX64(y,f.decimals,b.decimals),w=await Pe.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:f,mintB:b,ammConfigId:s.id,initialPriceX64:g,forerunCreate:!l&&u});return p.addInstruction(w),p.addCustomComputeBudget(c),p.addTipInstruction(m),p.versionBuild({txVersion:d,extInfo:{address:U(O({},w.address),{observationId:w.address.observationId.toBase58(),exBitmapAccount:w.address.exBitmapAccount.toBase58(),programId:t.toString(),id:w.address.poolId.toString(),mintA:f,mintB:b,openTime:"0",vault:{A:w.address.mintAVault.toString(),B:w.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:O({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:f,mintB:b,feeRate:s.tradeFeeRate,openTime:"0",programId:t.toString(),price:y.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},au),forerunCreate:u}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:d=!1,withMetadata:m="create",getEphemeralSigners:p,computeBudgetConfig:f,txTipConfig:b,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let g=this.createTxBuilder(),w=null,k=null,P=n.useSOLBalance&&e.mintA.address===j.toString(),T=n.useSOLBalance&&e.mintB.address===j.toString(),[h,S]=s==="MintA"?[a,c]:[c,a],{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||h.isZero()?{payer:this.scope.ownerPubKey,amount:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:l,checkCreateATAOwner:d});x&&(w=x),g.addInstruction(K||{});let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.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:d});B&&(k=B),g.addInstruction(C||{}),(!w||!k)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:w==null?void 0:w.toBase58(),ownerTokenAccountB:k==null?void 0:k.toBase58()});let M=t||await this.getClmmPoolKeys(e.id),R=await Pe.openPositionFromBaseInstructions({poolInfo:e,poolKeys:M,ownerInfo:U(O({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:k}),tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:p,nft2022:u});return g.addInstruction(R),g.addCustomComputeBudget(f),g.addTipInstruction(b),g.versionBuild({txVersion:y,extInfo:O({},R.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:r,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:d="create",txVersion:m,computeBudgetConfig:p,txTipConfig:f,getEphemeralSigners:b,nft2022:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let g=this.createTxBuilder(),w=null,k=null,P=n.useSOLBalance&&e.mintA.address===j.toBase58(),T=n.useSOLBalance&&e.mintB.address===j.toBase58(),{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});h&&(w=h),g.addInstruction(S||{});let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:T||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:u,checkCreateATAOwner:l});x&&(k=x),g.addInstruction(K||{}),(w===void 0||k===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=t||await this.getClmmPoolKeys(e.id),C=await Pe.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:k},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:i,amountMaxB:r,withMetadata:d,getEphemeralSigners:b,nft2022:y});return g.addInstruction(C),g.addCustomComputeBudget(p),g.addTipInstruction(f),g.versionBuild({txVersion:m,extInfo:{address:C.address}})}async increasePositionFromLiquidity(e){var K;let{poolInfo:t,poolKeys:n,ownerPosition:i,amountMaxA:r,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:d,txTipConfig:m,txVersion:p}=e,f=this.createTxBuilder(),b,y,g=c.useSOLBalance&&t.mintA.address===j.toString(),w=c.useSOLBalance&&t.mintB.address===j.toString(),{account:k,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:g||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k&&(b=k),f.addInstruction(P||{});let{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:u,checkCreateATAOwner:l});T&&(y=T),f.addInstruction(h||{}),!b&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=Pe.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:y},liquidity:a,amountMaxA:r,amountMaxB:s,nft2022:(K=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:K.owner.equals(zn)});return f.addInstruction(x),f.addCustomComputeBudget(d),f.addTipInstruction(m),f.versionBuild({txVersion:p,extInfo:{address:x.address}})}async increasePositionFromBase(e){var x;let{poolInfo:t,ownerPosition:n,base:i,baseAmount:r,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:d,txVersion:m}=e,p=this.createTxBuilder(),f,b,y=a.useSOLBalance&&t.mintA.address===j.toString(),g=a.useSOLBalance&&t.mintB.address===j.toString(),{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:y||(i==="MintA"?r:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?r:s}:void 0,skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:u});w&&(f=w),p.addInstruction(k||{});let{account:P,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||(i==="MintA"?s:r).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:r}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});P&&(b=P),p.addInstruction(T||{}),!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let h=await this.getClmmPoolKeys(t.id),S=Pe.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:h,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},base:i,baseAmount:r,otherAmountMax:s,nft2022:(x=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:x.owner.equals(zn)});return p.addInstruction(S),p.addCustomComputeBudget(l),p.addTipInstruction(d),p.versionBuild({txVersion:m,extInfo:{address:S.address}})}async decreaseLiquidity(e){var M;let{poolInfo:t,poolKeys:n,ownerPosition:i,ownerInfo:r,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:d,txTipConfig:m,txVersion:p}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let f=this.createTxBuilder(),b=r.useSOLBalance&&t.mintA.address===j.toString(),y=r.useSOLBalance&&t.mintB.address===j.toString(),g,w,{account:k,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});g=k,P&&f.addInstruction(P);let{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});w=T,h&&f.addInstruction(h);let S=[];for(let R of t.rewardDefaultInfos){let _=r.useSOLBalance&&R.mint.address===j.toString(),q;if(R.mint.address===t.mintA.address)q=g;else if(R.mint.address===t.mintB.address)q=w;else{let{account:N,instructionParams:se}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(R.mint.programId),mint:new Q(R.mint.address),notUseTokenAccount:_,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!_,associatedOnly:_?!1:u,checkCreateATAOwner:l});q=N,se&&f.addInstruction(se)}S.push(q)}!g&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let x=n!=null?n:await this.getClmmPoolKeys(t.id),K=(M=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:M.owner.equals(zn),B=await Pe.decreaseLiquidityInstructions({poolInfo:t,poolKeys:x,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:w,rewardAccounts:S},liquidity:c,amountMinA:s,amountMinB:a,nft2022:K});f.addInstruction({instructions:B.instructions,instructionTypes:[D.ClmmDecreasePosition]});let C=O({},B.address);if(r.closePosition){let R=await Pe.closePositionInstructions({poolInfo:t,poolKeys:x,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i,nft2022:K});f.addInstruction({endInstructions:R.instructions,endInstructionTypes:R.instructionTypes}),C=O(O({},C),R.address)}return f.addCustomComputeBudget(d),f.addTipInstruction(m),f.versionBuild({txVersion:p,extInfo:{address:C}})}async lockPosition(e){var p;let{programId:t=ri,authProgramId:n=co,poolProgramId:i=An,ownerPosition:r,payer:s,computeBudgetConfig:a,txTipConfig:c,txVersion:u,getEphemeralSigners:l}=e,d=this.createTxBuilder(),m=await Pe.makeLockPositions({programId:t,authProgramId:n,poolProgramId:i,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:r.nftMint,getEphemeralSigners:l,nft2022:(p=await this.scope.connection.getAccountInfo(r.nftMint))==null?void 0:p.owner.equals(zn)});return d.addInstruction(m),d.addCustomComputeBudget(a),d.addTipInstruction(c),d.versionBuild({txVersion:u,extInfo:m.address})}async harvestLockPosition(e){let{programId:t=ri,authProgramId:n=co,clmmProgram:i=An,poolKeys:r,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:d,txVersion:m}=e,p=r||await this.getClmmPoolKeys(s.poolId.toString()),f=this.createTxBuilder(),b=await this.scope.connection.getAccountInfo(s.positionId);b||this.logger.logWithError("position not found",s.positionId);let y=Ki.decode(b.data),g=a.useSOLBalance&&p.mintA.address===j.toString(),w=a.useSOLBalance&&p.mintB.address===j.toString(),k,P,{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintA.programId,mint:new Q(p.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});k=T,h&&f.addInstruction(h);let{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintB.programId,mint:new Q(p.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:w?!1:c,checkCreateATAOwner:u});P=S,x&&f.addInstruction(x);let K={},B=[];for(let xe of p.rewardInfos){let qe=a.useSOLBalance&&xe.mint.address===j.toString(),Ie=K[xe.mint.address];if(!Ie){let{account:Pt,instructionParams:ht}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(xe.mint.programId),mint:new Q(xe.mint.address),notUseTokenAccount:qe,owner:this.scope.ownerPubKey,skipCloseAccount:!qe,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:qe?!1:c});Ie=Pt,ht&&f.addInstruction(ht)}K[xe.mint.address]=Ie,B.push(Ie)}let C=Ii(t,s.lockNftMint).publicKey,M=ie(this.scope.ownerPubKey,s.lockNftMint,_i).publicKey,R=Y.getTickArrayStartIndexByTick(y.tickLower,p.config.tickSpacing),_=Y.getTickArrayStartIndexByTick(y.tickUpper,p.config.tickSpacing),{publicKey:q}=de(new Q(p.programId),s.poolId,R),{publicKey:N}=de(new Q(p.programId),s.poolId,_),{publicKey:se}=Et(new Q(p.programId),s.poolId,y.tickLower,y.tickUpper),Te=[];for(let xe=0;xe<p.rewardInfos.length;xe++)Te.push({poolRewardVault:new Q(p.rewardInfos[xe].vault),ownerRewardVault:B[xe],rewardMint:new Q(p.rewardInfos[xe].mint.address)});let ze=await Pe.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:C,clmmProgram:i,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:M,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:se,vaultA:new Q(p.vault.A),vaultB:new Q(p.vault.B),tickArrayLower:q,tickArrayUpper:N,userVaultA:k,userVaultB:P,mintA:new Q(p.mintA.address),mintB:new Q(p.mintB.address),rewardAccounts:Te,exTickArrayBitmap:Ve(i,s.poolId).publicKey});return f.addInstruction({instructions:[ze],instructionTypes:[D.ClmmHarvestLockPosition]}),f.addCustomComputeBudget(l),f.addTipInstruction(d),f.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:i,computeBudgetConfig:r,txTipConfig:s}){var l;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let a=this.createTxBuilder(),c=t!=null?t:await this.getClmmPoolKeys(e.id),u=Pe.closePositionInstructions({poolInfo:e,poolKeys:c,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(l=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:l.owner.equals(zn)});return a.addCustomComputeBudget(r),a.addTipInstruction(s),a.addInstruction(u).versionBuild({txVersion:i,extInfo:{address:u.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===j.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:d,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(n.mint.address),mint:new Q(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new bt(new v(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:i,checkCreateATAOwner:r});m&&c.addInstruction(m),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),f=Pe.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{programId:new Q(n.mint.programId),mint:new Q(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:oe.decimalToX64(n.perSecond)}});return c.addInstruction(f),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:f.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u}){for(let m of i)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let l=this.createTxBuilder(),d={};for(let m of i){let p=n.useSOLBalance&&m.mint.address===j.toString(),f=m.perSecond.mul(m.endTime-m.openTime),{account:b,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:!!p,skipCloseAccount:!p,owner:this.scope.ownerPubKey,createInfo:p?{payer:n.feePayer||this.scope.ownerPubKey,amount:new bt(new v(f.toFixed(0)).gte(f)?f.toFixed(0):f.add(1).toFixed(0))}:void 0,associatedOnly:p?!1:r,checkCreateATAOwner:s});y&&l.addInstruction(y),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let g=t!=null?t:await this.getClmmPoolKeys(e.id),w=Pe.initRewardInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{programId:new Q(m.mint.programId),mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:oe.decimalToX64(m.perSecond)}});d=O(O({},d),w.address),l.addInstruction(w)}return l.addCustomComputeBudget(a),l.addTipInstruction(c),l.versionBuild({txVersion:u,extInfo:{address:d}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txTipConfig:a,txVersion:c}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),l=t.useSOLBalance&&n.mint.equals(j),{account:d,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:l,owner:this.scope.ownerPubKey,createInfo:l?{payer:t.feePayer||this.scope.ownerPubKey,amount:new bt(new v(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:l?!1:i,checkCreateATAOwner:r});m&&u.addInstruction(m),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),f=Pe.setRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:oe.decimalToX64(n.perSecond)}});return u.addInstruction(f),u.addCustomComputeBudget(s),u.addTipInstruction(a),u.versionBuild({txVersion:c,extInfo:{address:f.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u}){let l=this.createTxBuilder(),d={};for(let m of i){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let p=n.useSOLBalance&&m.mint.address===j.toString(),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,createInfo:p?{payer:n.feePayer||this.scope.ownerPubKey,amount:new bt(new v(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:p?!1:r,checkCreateATAOwner:s});b&&l.addInstruction(b),f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=t!=null?t:await this.getClmmPoolKeys(e.id),g=Pe.setRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardInfo:{mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:oe.decimalToX64(m.perSecond)}});l.addInstruction(g),d=O(O({},d),g.address)}return l.addCustomComputeBudget(a),l.addTipInstruction(c),l.versionBuild({txVersion:u,extInfo:{address:d}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txTipConfig:a,txVersion:c}){let u=e.rewardDefaultInfos.find(y=>y.mint.address===n.toString());u||this.logAndCreateError("reward mint error","not found reward mint",n);let l=this.createTxBuilder(),d=t.useSOLBalance&&n.equals(j),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(u.mint.programId),mint:n,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:i,checkCreateATAOwner:r});p&&l.addInstruction(p),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),b=Pe.collectRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:n});return l.addInstruction(b),l.addCustomComputeBudget(s),l.addTipInstruction(a),l.versionBuild({txVersion:c,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:s,txTipConfig:a}){let c=this.createTxBuilder(),u={};for(let l of n){let d=e.rewardDefaultInfos.find(g=>g.mint.address===l.toString());if(!d){this.logAndCreateError("reward mint error","not found reward mint",l);continue}let m=t.useSOLBalance&&l.equals(j),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(d.mint.programId),mint:l,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!m,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:i,checkCreateATAOwner:r});p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),f&&c.addInstruction(f);let b=await this.getClmmPoolKeys(e.id),y=Pe.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:l});c.addInstruction(y),u=O(O({},u),y.address)}return c.addCustomComputeBudget(s),c.addTipInstruction(a),c.build({address:u})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:i,amountOutMin:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:d=!1,txVersion:m,computeBudgetConfig:p,txTipConfig:f}){let b=this.createTxBuilder(),y=n.toString()===e.mintA.address,g=c.useSOLBalance&&e.mintA.address===j.toBase58(),w=c.useSOLBalance&&e.mintB.address===j.toBase58(),k;!s||s.equals(new v(0))?k=y?Kt.add(new bt(1)):Ct.sub(new bt(1)):k=ne.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||!y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?i:0}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:d});P=S,x&&b.addInstruction(x)}let T;if(!T){let{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?0:i}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:d});T=S,x&&b.addInstruction(x)}(!P||!T)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:T,mintAUseSOLBalance:g,mintBUseSOLBalance:w,associatedOnly:l});let h=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Pe.makeSwapBaseInInstructions({poolInfo:e,poolKeys:h,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:T},inputMint:new Q(n),amountIn:i,amountOutMin:r,sqrtPriceLimitX64:k,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:m})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:i,amountInMax:r,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:d=!1,txVersion:m,computeBudgetConfig:p,txTipConfig:f}){let b=this.createTxBuilder(),y=n.toString()===e.mintB.address,g=c.useSOLBalance&&e.mintA.address===j.toBase58(),w=c.useSOLBalance&&e.mintB.address===j.toBase58(),k;!s||s.equals(new v(0))?k=n.toString()===e.mintB.address?Kt.add(new bt(1)):Ct.sub(new bt(1)):k=ne.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||!y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?r:0}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:d});P=S,x&&b.addInstruction(x)}let T;if(!T){let{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?0:r}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:d});T=S,x&&b.addInstruction(x)}(!P||!T)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:T,mintAUseSOLBalance:g,mintBUseSOLBalance:w,associatedOnly:l});let h=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Pe.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:h,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:T},outputMint:new Q(n),amountOut:i,amountInMax:r,sqrtPriceLimitX64:k,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:m})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u}){var b,y;let l={};for(let g of this.scope.account.tokenAccountRawInfos)r?ie(this.scope.ownerPubKey,g.accountInfo.mint,a).publicKey.equals(g.pubkey)&&(l[g.accountInfo.mint.toString()]=g.pubkey):l[g.accountInfo.mint.toString()]=g.pubkey;let d=Object.values(t).flat().map(g=>g.nftMint),m=await Ue(this.scope.connection,d.map(g=>({pubkey:g}))),p={};m.forEach(g=>{var w,k;p[g.pubkey.toBase58()]=(k=(w=g==null?void 0:g.accountInfo)==null?void 0:w.owner)!=null?k:null});let f=this.createTxBuilder();for(let g of Object.values(e)){if(t[g.id]===void 0||!t[g.id].find(B=>!B.liquidity.isZero()||B.rewardInfos.find(C=>!C.rewardAmountOwed.isZero())))continue;let w=g,k=i.useSOLBalance&&w.mintA.address===j.toString(),P=i.useSOLBalance&&w.mintB.address===j.toString(),T=l[w.mintA.address];if(!T){let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintA.programId,mint:new Q(w.mintA.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r,checkCreateATAOwner:s});T=B,C&&f.addInstruction(C)}let h=l[w.mintB.address];if(!h){let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintB.programId,mint:new Q(w.mintB.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:P?!1:r,checkCreateATAOwner:s});h=B,C&&f.addInstruction(C)}l[w.mintA.address]=T,l[w.mintB.address]=h;let S=[];for(let B of w.rewardDefaultInfos){let C=i.useSOLBalance&&B.mint.address===j.toString(),M=l[B.mint.address];if(!M){let{account:R,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(B.mint.programId),mint:new Q(B.mint.address),notUseTokenAccount:C,owner:this.scope.ownerPubKey,skipCloseAccount:!C,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:C?!1:r});M=R,_&&f.addInstruction(_)}l[B.mint.address]=M,S.push(M)}let x=await this.getClmmPoolKeys(w.id),K=[];for(let B=0;B<x.rewardInfos.length;B++)K.push({poolRewardVault:new Q(x.rewardInfos[B].vault),ownerRewardVault:S[B],rewardMint:new Q(x.rewardInfos[B].mint.address)});for(let B of t[g.id]){let C=(b=n==null?void 0:n[g.id])==null?void 0:b[B.nftMint.toBase58()];if(C){let M=ie(this.scope.ownerPubKey,C.lockNftMint,_i).publicKey,R=Y.getTickArrayStartIndexByTick(B.tickLower,x.config.tickSpacing),_=Y.getTickArrayStartIndexByTick(B.tickUpper,x.config.tickSpacing),{publicKey:q}=de(new Q(x.programId),C.poolId,R),{publicKey:N}=de(new Q(x.programId),C.poolId,_),{publicKey:se}=Et(new Q(x.programId),C.poolId,B.tickLower,B.tickUpper),Te=Ii(ri,C.lockNftMint).publicKey,ze=Pe.harvestLockPositionInstructionV2({programId:ri,auth:co,lockPositionId:Te,clmmProgram:An,lockOwner:this.scope.ownerPubKey,lockNftMint:C.lockNftMint,lockNftAccount:M,positionNftAccount:C.nftAccount,positionId:C.positionId,poolId:C.poolId,protocolPosition:se,vaultA:new Q(x.vault.A),vaultB:new Q(x.vault.B),tickArrayLower:q,tickArrayUpper:N,userVaultA:T,userVaultB:h,mintA:new Q(x.mintA.address),mintB:new Q(x.mintB.address),rewardAccounts:K,exTickArrayBitmap:Ve(An,C.poolId).publicKey});f.addInstruction({instructions:[ze],instructionTypes:[D.ClmmHarvestLockPosition],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]})}else{let M=Pe.decreaseLiquidityInstructions({poolInfo:w,poolKeys:x,ownerPosition:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:T,tokenAccountB:h,rewardAccounts:S},liquidity:new bt(0),amountMinA:new bt(0),amountMinB:new bt(0),nft2022:(y=p[B.nftMint.toBase58()])==null?void 0:y.equals(zn)});f.addInstruction(M)}}}return c===0?f.sizeCheckBuildV0({computeBudgetConfig:u}):f.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Ti(e).publicKey);return t?ku.decode(t.data).whitelistMints.filter(i=>!i.equals(Q.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new bt(1))).map(s=>lt(new Q(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),r=[];return i.forEach(s=>{if(!s)return;let a=Ki.decode(s.data);r.push(a)}),r}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Ue(this.scope.connection,e.map(r=>({pubkey:new Q(r)})),t),i={};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=In.decode(s.accountInfo.data),c=ne.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[r])]=U(O({},a),{currentPrice:c,programId:s.accountInfo.owner})}return i}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),i=await Ue(this.scope.connection,Array.from(n).map(c=>({pubkey:new Q(c)}))),r={};i.forEach(c=>{!c.accountInfo||(r[c.pubkey.toBase58()]=wu.decode(c.accountInfo.data))});let s=await Be.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var d,m,p,f;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:st({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||_i.toBase58(),extensions:{feeConfig:(d=t[u])!=null&&d.feeConfig?fn((m=t[u])==null?void 0:m.feeConfig):void 0}}),mintB:st({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||_i.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?fn((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[c].currentPrice,config:U(O({},r[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Be.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()]),i=await Nn({connection:this.scope.connection,mints:Array.from(n).map(d=>new Q(d))}),{computeClmmPoolInfo:r,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:i}),a=await Ue(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=yu(r[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Eu.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Eu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=U(O({},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(d=>!d.tokenVault.equals(Q.default)).map(d=>({mint:st({address:d.tokenMint.toBase58(),programId:_i.toBase58(),decimals:10}),vault:d.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:r[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{AccountLayout as Ud,NATIVE_MINT as $o,TOKEN_PROGRAM_ID as Ft}from"@solana/spl-token";import Ps from"bn.js";import Qo from"decimal.js-light";import Ei from"bn.js";function Go(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function Rd(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=Go(o,e);return n.gt(Qn)&&(t=t.add(new Ei(1)),e=o.div(t),n=Go(o,t),n.gt(Qn)&&(e=e.add(new Ei(1)))),[t,e]}var Qn=new Ei(0),Xo=class{static swapWithoutFees(e,t,n){let i=t.mul(n),r=t.add(e),[s,a]=Rd(i,r),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,i,r){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(r===0)return{tokenAmount0:s,tokenAmount1:a};if(r===1)return Go(e.mul(n),t).gt(Qn)&&s.gt(Qn)&&(s=s.add(new Ei(1))),Go(e.mul(i),t).gt(Qn)&&a.gt(Qn)&&(a=a.add(new Ei(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Du from"bn.js";var ks=new Du(1e6);function Ld(o,e,t){return o.mul(e).add(t).sub(new Du(1)).div(t)}function Fu(o,e,t){return o.mul(e).div(t)}var zo=class{static tradingFee(e,t){return Ld(e,t,ks)}static protocolFee(e,t){return Fu(e,t,ks)}static fundFee(e,t){return Fu(e,t,ks)}};var Yo=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,i){let r=zo.tradingFee(e,i),s=e.sub(r),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Xo.swapWithoutFees(s,t,n),u=a.add(r);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:r}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:i,quoteReserve:r,outputMint:s,outputAmount:a}){let[c,u,l,d,m]=t.address===s.toString()?[i,r,e.decimals,t.decimals,e.address]:[r,i,t.decimals,e.decimals,t.address],p=new Qo(u.toString()).div(10**d).div(new Qo(c.toString()).div(10**l)),f=a.gte(u)?u.sub(new Ps(1)):a,b=u.sub(f),y=cn(c.mul(f),b),g=cn(y.mul(new Ps(1e6)),new Ps(1e6).sub(n)),w=g.sub(y),k=new Qo(f.toString()).div(10**d).div(new Qo(g.toString()).div(10**l)),P=p.isZero()?0:k.sub(p).div(p).abs().toNumber();return{amountRealOut:f,amountIn:g,amountInWithoutFee:y,tradeFee:w,priceImpact:P}}};import Ee from"bn.js";import{PublicKey as Di,TransactionInstruction as Rn,Keypair as Fd,SystemProgram as Dd}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Uu,TOKEN_2022_PROGRAM_ID as Ts,TOKEN_PROGRAM_ID as yn}from"@solana/spl-token";var Od=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),uB=Buffer.from("amm_config","utf8"),Md=Buffer.from("pool","utf8"),Nd=Buffer.from("pool_lp_mint","utf8"),vd=Buffer.from("pool_vault","utf8"),_d=Buffer.from("observation","utf8");function Yn(o){return me([Od],o)}function hs(o,e,t,n){return me([Md,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Vd(o,e){return me([Nd,e.toBuffer()],o)}function Wu(o,e,t){return me([vd,e.toBuffer(),t.toBuffer()],o)}function Fi(o,e){return me([_d,e.toBuffer()],o)}function qu({poolId:o,programId:e,configId:t,mintA:n,mintB:i}){let r=Yn(e).publicKey,s=o||hs(e,t,n,i).publicKey,a=Vd(e,s).publicKey,c=Wu(e,s,n).publicKey,u=Wu(e,s,i).publicKey,l=Fi(e,s).publicKey;return{poolId:s,configId:t,authority:r,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Ed=Buffer.from("locked_liquidity","utf8");function Ho(o,e){return me([Ed,e.toBuffer()],o)}var Wd=le("Raydium_cpmm"),Ln={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133]};function Gu(o,e,t,n,i,r,s,a,c,u,l,d,m,p,f,b,y,g,w,k){let P=W([A("amountMaxA"),A("amountMaxB"),A("openTime")]),T=hs(o,t,r,s).publicKey,h=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!i.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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:yn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Uu,isSigner:!1,isWritable:!1},{pubkey:kr,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],S=Buffer.alloc(P.span);return P.encode({amountMaxA:g,amountMaxB:w,openTime:k},S),new Rn({keys:h,programId:o,data:Buffer.from([...Ln.initialize,...S])})}function Xu(o,e,t,n,i,r,s,a,c,u,l,d,m,p,f){let b=W([A("lpAmount"),A("amountMaxA"),A("amountMaxB")]),y=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:yn,isSigner:!1,isWritable:!1},{pubkey:Ts,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0}],g=Buffer.alloc(b.span);return Wd.debug("cpmm deposit data",{lpAmount:m.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),b.encode({lpAmount:m,amountMaxA:p,amountMaxB:f},g),new Rn({keys:y,programId:o,data:Buffer.from([...Ln.deposit,...g])})}function zu(o,e,t,n,i,r,s,a,c,u,l,d,m,p,f){let b=W([A("lpAmount"),A("amountMinA"),A("amountMinB")]),y=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:yn,isSigner:!1,isWritable:!1},{pubkey:Ts,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:un,isSigner:!1,isWritable:!1}],g=Buffer.alloc(b.span);return b.encode({lpAmount:m,amountMinA:p,amountMinB:f},g),new Rn({keys:y,programId:o,data:Buffer.from([...Ln.withdraw,...g])})}function jo(o,e,t,n,i,r,s,a,c,u,l,d,m,p,f,b){let y=W([A("amountIn"),A("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey: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:d,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],w=Buffer.alloc(y.span);return y.encode({amountIn:f,amounOutMin:b},w),new Rn({keys:g,programId:o,data:Buffer.from([...Ln.swapBaseInput,...w])})}function Qu(o,e,t,n,i,r,s,a,c,u,l,d,m,p,f,b){let y=W([A("amountInMax"),A("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey: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:d,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],w=Buffer.alloc(y.span);return y.encode({amountInMax:f,amountOut:b},w),new Rn({keys:g,programId:o,data:Buffer.from([...Ln.swapBaseOutput,...w])})}async function Yu(o){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,getEphemeralSigners:i}=o,r=[],[s,a]=[new Di(t.id),new Di(t.lpMint.address)],c;if(i)c=new Di((await i(1))[0]);else{let y=Fd.generate();r.push(y),c=y.publicKey}let{publicKey:u}=ie(e.feePayer,c,yn),{publicKey:l}=Pn(c),{publicKey:d}=Ho(o.lockProgram,c),{publicKey:m}=ie(e.feePayer,a,yn),{publicKey:p}=ie(o.lockAuthProgram,a,yn),f=qd({programId:o.lockProgram,auth:o.lockAuthProgram,payer:e.feePayer,nftOwner:e.feePayer,liquidityOwner:e.feePayer,nftMint:c,nftAccount:u,poolId:s,lockPda:d,mintLp:a,userLpVault:m,lockLpVault:p,poolVaultA:new Di(n.vault.A),poolVaultB:new Di(n.vault.B),metadataAccount:l,lpAmount:o.lpAmount,withMetadata:(b=o.withMetadata)!=null?b:!0});return{address:{nftMint:c,nftAccount:u,metadataAccount:l,lockPda:d,userLpVault:m,lockLpVault:p},instructions:[f],signers:r,instructionTypes:[D.CpmmLockLp],lookupTableAddress:[]}}function qd({programId:o,auth:e,payer:t,liquidityOwner:n,nftOwner:i,nftMint:r,nftAccount:s,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:d,poolVaultA:m,poolVaultB:p,metadataAccount:f,lpAmount:b,withMetadata:y}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,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:d,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:Dd.programId,isSigner:!1,isWritable:!1},{pubkey:yn,isSigner:!1,isWritable:!1},{pubkey:Uu,isSigner:!1,isWritable:!1},{pubkey:Xt,isSigner:!1,isWritable:!1}],w=W([A("lpAmount"),Me("withMetadata")]),k=Buffer.alloc(w.span);w.encode({lpAmount:b,withMetadata:y},k);let P=Buffer.from([...Ln.lockCpLiquidity,...k]);return new Rn({keys:g,programId:o,data:P})}function Hu({programId:o,nftOwner:e,auth:t,nftAccount:n,lockPda:i,poolId:r,mintLp:s,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:d,mintB:m,lockLpVault:p,lpFeeAmount:f,cpmmProgram:b,cpmmAuthProgram:y}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:b!=null?b:lo,isSigner:!1,isWritable:!1},{pubkey:y!=null?y:Aa,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:d,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:yn,isSigner:!1,isWritable:!1},{pubkey:Ts,isSigner:!1,isWritable:!1},{pubkey:un,isSigner:!1,isWritable:!1}],w=W([A("lpFeeAmount")]),k=Buffer.alloc(w.span);w.encode({lpFeeAmount:f},k);let P=Buffer.from([...Ln.collectCpFee,...k]);return new Rn({keys:g,programId:o,data:P})}var ju=W([ye(8),X("bump"),Me("disableCreatePool"),Qt("index"),A("tradeFeeRate"),A("protocolFeeRate"),A("fundFeeRate"),A("createPoolFee"),L("protocolOwner"),L("fundOwner"),H(A(),16)]),Zo=W([ye(8),L("configId"),L("poolCreator"),L("vaultA"),L("vaultB"),L("mintLp"),L("mintA"),L("mintB"),L("mintProgramA"),L("mintProgramB"),L("observationId"),X("bump"),X("status"),X("lpDecimals"),X("mintDecimalA"),X("mintDecimalB"),A("lpAmount"),A("protocolFeesMintA"),A("protocolFeesMintB"),A("fundFeesMintA"),A("fundFeesMintB"),A("openTime"),H(A(),32)]);var Wi=class extends Oe{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 Ue(this.scope.connection,e.map(d=>({pubkey:new z(d)}))),i={},r=new Set,s=[];for(let d=0;d<e.length;d++){let m=n[d];if(m.accountInfo===null)throw Error("fetch pool info error: "+String(e[d]));let p=Zo.decode(m.accountInfo.data);i[String(e[d])]=U(O({},p),{programId:m.accountInfo.owner}),r.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let d=[...r],m=await Ue(this.scope.connection,d.map(p=>({pubkey:new z(p)})));for(let p=0;p<d.length;p++){let f=m[p].accountInfo;if(f===null)throw Error("fetch pool config error: "+d[p]);a[d[p]]=ju.decode(f.data)}}let c={},u=await Ue(this.scope.connection,s.map(d=>({pubkey:new z(d)})));for(let d=0;d<s.length;d++){let m=u[d].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[d]);c[String(s[d])]=new Ee(Ud.decode(m.data).amount.toString())}let l={};for(let[d,m]of Object.entries(i)){let p=c[m.vaultA.toString()].sub(m.protocolFeesMintA).sub(m.fundFeesMintA),f=c[m.vaultB.toString()].sub(m.protocolFeesMintB).sub(m.fundFeesMintB);l[d]=U(O({},m),{baseReserve:p,quoteReserve:f,vaultAAmount:c[m.vaultA.toString()],vaultBAmount:c[m.vaultB.toString()],configInfo:a[m.configId.toString()],poolPrice:new v(f.toString()).div(new v(10).pow(m.mintDecimalB)).div(new v(p.toString()).div(new v(10).pow(m.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,i)=>{var c,u,l,d;let r=e[i],[s,a]=[r.mintA.toBase58(),r.mintB.toBase58()];return U(O({},n),{[i]:U(O({},r),{id:new z(i),configInfo:r.configInfo,version:7,authority:Yn(r.programId).publicKey,mintA:st({address:s,decimals:r.mintDecimalA,programId:r.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?fn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:st({address:a,decimals:r.mintDecimalB,programId:r.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?fn((d=t[a])==null?void 0:d.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Nn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),i=st({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?fn(n[t.mintA.toBase58()].feeConfig):void 0}}),r=st({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?fn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=st({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Ft.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:i,mintB:r,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new v(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new v(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:i,mintB:r,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Yn(t.programId).publicKey.toBase58(),mintLp:s,config:a,observationId:Fi(t.programId,new z(e)).publicKey.toBase58()},rpcData:t}}async createPool(p){var f=p,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:d}=f,m=De(f,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig"]);var q,N,se;let b=r.feePayer||((q=this.scope.owner)==null?void 0:q.publicKey),y=new Ee(new z(m.mintA.address).toBuffer()).lte(new Ee(new z(m.mintB.address).toBuffer())),[g,w]=y?[m.mintA,m.mintB]:[m.mintB,m.mintA],[k,P]=y?[m.mintAAmount,m.mintBAmount]:[m.mintBAmount,m.mintAAmount],T=r.useSOLBalance&&g.address===$o.toBase58(),h=r.useSOLBalance&&w.address===$o.toBase58(),[S,x]=[new z(g.address),new z(w.address)],K=this.createTxBuilder(),{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({mint:S,tokenProgram:g.programId,owner:this.scope.ownerPubKey,createInfo:T?{payer:b,amount:k}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:s,checkCreateATAOwner:a});K.addInstruction(C||{});let{account:M,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new z(w.address),tokenProgram:w.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:P}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:s,checkCreateATAOwner:a});if(K.addInstruction(R||{}),B===void 0||M===void 0)throw Error("you don't has some token account");let _=qu({poolId:e,programId:t,configId:new z(u.id),mintA:S,mintB:x});return K.addInstruction({instructions:[Gu(t,this.scope.ownerPubKey,new z(u.id),_.authority,_.poolId,S,x,_.lpMint,B,M,ie(this.scope.ownerPubKey,_.lpMint).publicKey,_.vaultA,_.vaultB,n,new z((N=g.programId)!=null?N:Ft),new z((se=w.programId)!=null?se:Ft),_.observationId,k,P,i)],instructionTypes:[D.CpmmCreatePool]}),K.addCustomComputeBudget(l),K.addTipInstruction(d),K.versionBuild({txVersion:c,extInfo:{address:U(O({},_),{mintA:g,mintB:w,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:i,baseIn:r,slippage:s,computeResult:a,computeBudgetConfig:c,txTipConfig:u,config:l,txVersion:d}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),i.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:i.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:p,checkCreateATAOwner:f}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:y,inputAmountFee:g,anotherAmount:w}=a||this.computePairAmount({poolInfo:U(O({},t),{lpAmount:new v(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new Ye(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new v(i.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),k=w.amount,P=t.mintA.address===$o.toString(),T=t.mintB.address===$o.toString(),h=this.createTxBuilder(),[S,x]=[new z(t.mintA.address),new z(t.mintB.address)],{account:K,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(r?i:k).isZero()?{payer:this.scope.ownerPubKey,amount:r?i:k}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:f});h.addInstruction(B||{});let{account:C,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T||(r?k:i).isZero()?{payer:this.scope.ownerPubKey,amount:r?k:i}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!1,checkCreateATAOwner:f});h.addInstruction(M||{}),!K&&!C&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let R=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),Te=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:R,bypassAssociatedCheck:p,checkCreateATAOwner:f}),{tokenAccount:_}=Te,q=De(Te,["tokenAccount"]);h.addInstruction(q);let N=n!=null?n:await this.getCpmmPoolKeys(t.id),se=new Ye(new Ee(1)).sub(s);return h.addInstruction({instructions:[Xu(new z(t.programId),this.scope.ownerPubKey,new z(N.authority),new z(t.id),_,K,C,new z(N.vault.A),new z(N.vault.B),S,x,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:se.mul(y).quotient,r?g.amount:k,r?k:g.amount)],instructionTypes:[D.CpmmAddLiquidity],lookupTableAddress:N.lookupTableAccount?[N.lookupTableAccount]:[]}),h.addCustomComputeBudget(c),h.addTipInstruction(u),h.versionBuild({txVersion:d})}async withdrawLiquidity(e){var _,q;let{poolInfo:t,poolKeys:n,lpAmount:i,slippage:r,computeBudgetConfig:s,txTipConfig:a,txVersion:c}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let u=new Ye(new Ee(1)).sub(r),l=await this.getRpcPoolInfo(t.id),[d,m]=[u.mul(i.mul(l.baseReserve).div(l.lpAmount)).quotient,u.mul(i.mul(l.quoteReserve).div(l.lpAmount)).quotient],p=await this.scope.fetchEpochInfo(),[f,b]=[we(d,t.mintA.extensions.feeConfig,p,!1),we(m,t.mintB.extensions.feeConfig,p,!1)],{account:y}=this.scope,g=this.createTxBuilder(),[w,k]=[new z(t.mintA.address),new z(t.mintB.address)],P=w.equals(j),T=k.equals(j),h,S,{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});h=x,K&&g.addInstruction(K);let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!T,associatedOnly:!T,checkCreateATAOwner:!1});S=B,C&&g.addInstruction(C),(!h||!S)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",y.tokenAccounts);let M=await y.getCreatedTokenAccount({mint:new z(t.lpMint.address)});M||this.logAndCreateError("cannot found lp token account","tokenAccounts",y.tokenAccounts);let R=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[zu(new z(t.programId),this.scope.ownerPubKey,new z(R.authority),new z(t.id),M,h,S,new z(R.vault.A),new z(R.vault.B),w,k,new z(t.lpMint.address),i,d.sub((_=f.fee)!=null?_:new Ee(0)),m.sub((q=b.fee)!=null?q:new Ee(0)))],instructionTypes:[D.CpmmWithdrawLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),g.addCustomComputeBudget(s),g.addTipInstruction(a),g.versionBuild({txVersion:c})}async swap(e){var B,C,M,R,_,q;let{poolInfo:t,poolKeys:n,baseIn:i,fixedOut:r,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txTipConfig:d,txVersion:m}=e,{bypassAssociatedCheck:p,checkCreateATAOwner:f,associatedOnly:b}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),y=this.createTxBuilder(),[g,w]=[new z(t.mintA.address),new z(t.mintB.address)];r?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Ee((1+c)*1e4)).div(new Ee(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Ee((1-c)*1e4)).div(new Ee(1e4));let k=t.mintA.address===j.toBase58(),P=t.mintB.address===j.toBase58(),{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((B=t.mintA.programId)!=null?B:Ft),owner:this.scope.ownerPubKey,createInfo:k||!i?{payer:this.scope.ownerPubKey,amount:i?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:b,checkCreateATAOwner:f});h&&y.addInstruction(h);let{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:w,tokenProgram:new z((C=t.mintB.programId)!=null?C:Ft),owner:this.scope.ownerPubKey,createInfo:P||i?{payer:this.scope.ownerPubKey,amount:i?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:b,checkCreateATAOwner:f});x&&y.addInstruction(x),(!T||!S)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:T,mintBTokenAcc:S,mintAUseSOLBalance:k,mintBUseSOLBalance:P,associatedOnly:b});let K=n!=null?n:await this.getCpmmPoolKeys(t.id);return y.addInstruction({instructions:[r?Qu(new z(t.programId),this.scope.ownerPubKey,new z(K.authority),new z(K.config.id),new z(t.id),i?T:S,i?S:T,new z(K.vault[i?"A":"B"]),new z(K.vault[i?"B":"A"]),new z((_=t[i?"mintA":"mintB"].programId)!=null?_:Ft),new z((q=t[i?"mintB":"mintA"].programId)!=null?q:Ft),i?g:w,i?w:g,Fi(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):jo(new z(t.programId),this.scope.ownerPubKey,new z(K.authority),new z(K.config.id),new z(t.id),i?T:S,i?S:T,new z(K.vault[i?"A":"B"]),new z(K.vault[i?"B":"A"]),new z((M=t[i?"mintA":"mintB"].programId)!=null?M:Ft),new z((R=t[i?"mintB":"mintA"].programId)!=null?R:Ft),i?g:w,i?w:g,Fi(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[r?D.CpmmSwapBaseOut:D.ClmmSwapBaseIn]}),y.addCustomComputeBudget(l),y.addTipInstruction(d),y.versionBuild({txVersion:m})}async lockLp(e){var l,d,m,p,f;let{poolInfo:t,lpAmount:n,computeBudgetConfig:i,txTipConfig:r,txVersion:s}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let a=this.createTxBuilder(),c=(l=e.poolKeys)!=null?l:await this.getCpmmPoolKeys(t.id),u=await Yu({poolInfo:t,poolKeys:c,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(d=e.feePayer)!=null?d:this.scope.ownerPubKey},lockProgram:(m=e.programId)!=null?m:mo,lockAuthProgram:(p=e.authProgram)!=null?p:po,lpAmount:n,withMetadata:(f=e.withMetadata)!=null?f:!0,getEphemeralSigners:e.getEphemeralSigners});return a.addInstruction(u),a.addCustomComputeBudget(i),a.addTipInstruction(r),a.versionBuild({txVersion:s,extInfo:u.address})}async harvestLockLp(e){var C;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:r=mo,authProgram:s=po,cpmmProgram:a,computeBudgetConfig:c,txTipConfig:u,txVersion:l}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let d=e.feePayer||this.scope.ownerPubKey,m=this.createTxBuilder(),[p,f]=[new z(t.mintA.address),new z(t.mintB.address)],b=p.equals(j),y=f.equals(j),g,w,{account:k,instructionParams:P}=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,checkCreateATAOwner:!1});g=k,P&&m.addInstruction(P);let{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:!y,checkCreateATAOwner:!1});w=T,h&&m.addInstruction(h),(!g||!w)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:g,tokenAccountB:w});let S=(C=e.poolKeys)!=null?C:await this.getCpmmPoolKeys(t.id),{publicKey:x}=ie(d,i,Ft),{publicKey:K}=Ho(r,i),{publicKey:B}=ie(s,new z(t.lpMint.address),Ft);return m.addInstruction({instructions:[Hu({programId:r!=null?r:mo,nftOwner:this.scope.ownerPubKey,auth:s!=null?s:po,nftMint:i,nftAccount:x,lockPda:K,poolId:new z(t.id),mintLp:new z(S.mintLp.address),userVaultA:g,userVaultB:w,poolVaultA:new z(S.vault.A),poolVaultB:new z(S.vault.B),mintA:p,mintB:f,lockLpVault:B,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[D.CpmmCollectLockFee]}),m.addCustomComputeBudget(c),m.addTipInstruction(u),m.versionBuild({txVersion:l})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let r=n.toString()===e.mintB.address,s=Yo.swap(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new v(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Ee((1-i)*1e4)).div(new Ee(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:r,epochInfo:s,baseIn:a}){var P,T,h,S,x,K,B,C,M;let c=1-Number(r.toSignificant())/100,u=new Ee(new v(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=we(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),d=u.sub((P=l.fee)!=null?P:new Ee(0)),m=new Ee(new v(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,v.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(h=(T=l.fee)==null?void 0:T.toString())!=null?h:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${r.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=d.mul(m).div(p==="base"?t:n),b={amount:ft,fee:void 0,expirationTime:void 0};if(!d.isZero()){let R=Gd(f,t,n,m);this.logDebug("lpAmountData:",{amountA:R.amountA.toString(),amountB:R.amountB.toString()}),b=we(R[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let y=new Ye(new Ee(1)).add(r),g=new Ye(new Ee(1)).sub(r),w=we(y.mul(b.amount.sub((S=b.fee)!=null?S:new Ee(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),k=we(g.mul(b.amount.sub((x=b.fee)!=null?x:new Ee(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",b.amount.toString(),"anotherAmountFee:",(B=(K=b.fee)==null?void 0:K.toString())!=null?B:0,"maxAnotherAmount:",w.amount.toString(),"maxAnotherAmountFee:",(M=(C=w.fee)==null?void 0:C.toString())!=null?M:0),{inputAmountFee:l,anotherAmount:b,maxAnotherAmount:w,minAnotherAmount:k,liquidity:f}}};function Gd(o,e,t,n){let i=o.mul(e).div(n);!i.isZero()&&!o.mul(e).mod(n).isZero()&&(i=i.add(new Ee(1)));let r=o.mul(t).div(n);return!r.isZero()&&!o.mul(t).mod(n).isZero()&&(r=r.add(new Ee(1))),{amountA:i,amountB:r}}import{PublicKey as Mn}from"@solana/web3.js";import{createTransferInstruction as nc,TOKEN_PROGRAM_ID as Fe,TOKEN_2022_PROGRAM_ID as tr}from"@solana/spl-token";import nr from"bn.js";var Zu={[xr.toBase58()]:3},$u={3:xr};var Is=W([ye(5),ye(8),L("ownAddress"),A("vaultSignerNonce"),L("baseMint"),L("quoteMint"),L("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),L("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),L("requestQueue"),L("eventQueue"),L("bids"),L("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),ye(7)]),Ju={3:Is};import{PublicKey as ec}from"@solana/web3.js";var Jo=le("Serum"),er=class{static getProgramId(e){let t=$u[e];return t||Jo.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Zu[t];return n||Jo.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Ju[e];return t||Jo.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],i=0,r;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));r=ec.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:r,nonce:i}}return Jo.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:ec.default,nonce:i}}};import{PublicKey as te,SystemProgram as Xd,TransactionInstruction as zd}from"@solana/web3.js";import On from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Qd,TOKEN_2022_PROGRAM_ID as Yd,TOKEN_PROGRAM_ID as Hd}from"@solana/spl-token";function jd(o,e,t,n,i,r,s,a,c,u,l,d,m,p,f){var h;let b=[],y=[I({pubkey:Hd,isWritable:!1}),I({pubkey:Yd,isWritable:!1}),I({pubkey:Qd,isWritable:!1}),I({pubkey:Xd.programId,isWritable:!1}),I({pubkey:e,isSigner:!0})];y.push(I({pubkey:t})),y.push(I({pubkey:i}));let g=[c,u],w=[l,d],k=[r,s,a];for(let S=0;S<g.length;S++){let x=g[S],K=k[S]===x.mintA.address;if(y.push(I({pubkey:new te(x.programId),isWritable:!1})),S===g.length-1?y.push(I({pubkey:i})):y.push(I({pubkey:n})),y.push(I({pubkey:new te(k[S])})),y.push(I({pubkey:new te(k[S+1])})),x.version===6){let B=w[S];y.push(I({pubkey:new te(B.config.id)})),y.push(I({pubkey:new te(B.id)})),y.push(I({pubkey:new te(K?B.vault.A:B.vault.B)})),y.push(I({pubkey:new te(K?B.vault.B:B.vault.A)})),y.push(I({pubkey:new te(x.observationId)})),y.push(I({pubkey:un})),y.push(I({pubkey:Ve(new te(x.programId),new te(x.id)).publicKey})),b.push(Zd(x.sqrtPriceX64.toString(),K));for(let C of(h=f[S])!=null?h:[])y.push(I({pubkey:new te(C)}))}else if(x.version===5){let B=w[S];y.push(I({pubkey:new te(B.id)})),y.push(I({pubkey:new te(B.authority),isWritable:!1})),y.push(I({pubkey:new te(B.marketProgramId)})),y.push(I({pubkey:new te(B.marketAuthority)})),y.push(I({pubkey:ga,isWritable:!1})),y.push(I({pubkey:new te(B.openOrders)})),y.push(I({pubkey:new te(B.vault.A)})),y.push(I({pubkey:new te(B.vault.B)})),y.push(I({pubkey:new te(B.id)})),y.push(I({pubkey:new te(B.id)})),y.push(I({pubkey:new te(B.id)})),y.push(I({pubkey:new te(B.id)})),y.push(I({pubkey:new te(B.id)})),y.push(I({pubkey:new te(B.id)})),y.push(I({pubkey:new te(B.marketId)})),y.push(I({pubkey:new te(B.marketBids)})),y.push(I({pubkey:new te(B.marketAsks)})),y.push(I({pubkey:new te(B.marketEventQueue)})),y.push(I({pubkey:new te(B.marketBaseVault)})),y.push(I({pubkey:new te(B.marketQuoteVault)}))}else if(x.version===4){let B=w[S],C=x.status!==1;y.push(I({pubkey:new te(B.id)})),y.push(I({pubkey:new te(B.authority),isWritable:!1})),y.push(I({pubkey:new te(C?B.id:B.marketProgramId)})),y.push(I({pubkey:new te(C?B.id:B.marketAuthority)})),y.push(I({pubkey:new te(C?B.id:B.openOrders)})),y.push(I({pubkey:new te(B.vault.A)})),y.push(I({pubkey:new te(B.vault.B)})),y.push(I({pubkey:new te(C?B.id:B.marketId)})),y.push(I({pubkey:new te(C?B.id:B.marketBids)})),y.push(I({pubkey:new te(C?B.id:B.marketAsks)})),y.push(I({pubkey:new te(C?B.id:B.marketEventQueue)})),y.push(I({pubkey:new te(C?B.id:B.marketBaseVault)})),y.push(I({pubkey:new te(C?B.id:B.marketQuoteVault)}))}else if(x.version===7){let B=w[S];y.push(I({pubkey:new te(B.authority)})),y.push(I({pubkey:new te(B.config.id)})),y.push(I({pubkey:new te(B.id)})),y.push(I({pubkey:new te(K?B.vault.A:B.vault.B)})),y.push(I({pubkey:new te(K?B.vault.B:B.vault.A)})),y.push(I({pubkey:new te(x.observationId)}))}else throw Error("pool type error")}let P=W([X("insId"),A("amountIn"),A("amountOut"),H(J(),b.length,"clmmPriceLimit")]),T=Buffer.alloc(P.span);return P.encode({insId:0,amountIn:m,amountOut:p,clmmPriceLimit:b},T),new zd({keys:y,programId:o,data:T})}function Zd(o,e){if(o)if(e){let t=new On(o).div(new On(25));return t.gt(Lo)?t:Lo}else{let t=new On(o).mul(new On(25));return t.lt(Oo)?t:Oo}else return e?Lo:Oo}function tc({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var i,r,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let d=n.poolKey[0],m=$e(d),p=t.equals(m.mintA.address)?Kt.add(gt):Ct.sub(gt);return Pe.makeSwapBaseInInstructions({poolInfo:d,poolKeys:d,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:m.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:m.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((r=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?r:new On(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let d=n.poolInfo[0],m=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[jo(d.programId,e.wallet,d.authority,d.configId,d.id,e.sourceToken,e.destinationToken,m?d.vaultA:d.vaultB,m?d.vaultB:d.vaultA,m?d.mintProgramA:d.mintProgramB,m?d.mintProgramB:d.mintProgramA,new te(d[m?"mintA":"mintB"].address),new te(d[m?"mintB":"mintA"].address),d.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[m?D.CpmmSwapBaseIn:D.CpmmSwapBaseOut],address:{}}}else{let d=n.poolKey[0];return{signers:[],instructions:[Fo({poolKeys:d,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 On(0)),fixedSide:"in"})],lookupTableAddress:d.lookupTableAccount?[d.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?D.AmmV5SwapBaseIn:D.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let d=n.poolInfo[0],m=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:[jd(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),d,m,p,f,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new On(0)),n.remainingAccounts)],instructionTypes:[D.RouteSwap],lookupTableAddress:[p.lookupTableAccount,f.lookupTableAccount].filter(b=>b!==void 0),address:{}}}else throw Error("route type error")}var en=new nr(0),qi=class extends Oe{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(j));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:i=1}=e,r=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Ht({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Z(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(s.addInstruction({instructions:[Yt({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):s.addInstruction({instructions:[Yt({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return s.versionBuild({txVersion:i})}async wrapWSol(e,t,n){let i=this.createTxBuilder(),r=await Ht({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(r),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:i,routeProgram:r,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(j),d=u.amount.token.mint.equals(j),m=c.amount.token.mint,p=u.amount.token.mint,{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?tr:Fe,mint:m,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&a.addInstruction(b),f===void 0)throw Error("input account check error");let y;if(e.routeType==="route"&&!d)y=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?tr:Fe);else{let{account:P,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?tr:Fe,mint:p,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});y=P,T&&a.addInstruction(T)}d&&a.addInstruction({endInstructions:[Yt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:y,programId:Fe})],endInstructionTypes:[D.CloseAccount]});let g;if(e.routeType==="route"){let P=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(P.mint,P.isToken2022?tr:Fe)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),k=tc({routeProgram:r,inputMint:m,swapInfo:U(O({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:f,routeToken:g,destinationToken:y}});if(e.feeConfig!==void 0){let P=this.createTxBuilder();P.addInstruction({instructions:[nc(f,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[D.TransferAmount]}),P.addInstruction(k);let{transactions:T}=s===0?await P.sizeCheckBuildV0():await P.sizeCheckBuild();T.length<2&&a.addInstruction({instructions:[nc(f,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[D.TransferAmount]})}return a.addInstruction(k),s===0?a.sizeCheckBuildV0({computeBudgetConfig:i,address:k.address}):a.sizeCheckBuild({computeBudgetConfig:i,address:k.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=uo,clmm:n=An,cpmm:i=lo}=e||{},r=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Eo.offsetOf("baseMint"),length:64}}),s=W([L("baseMint"),L("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=W([L("mintA"),L("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:In.span}],dataSlice:{offset:In.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}}),m=(await this.scope.connection.getProgramAccounts(i,{dataSlice:{offset:Zo.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:m}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:i,cpmmPools:r}){e=e.toString()===Mn.default.toString()?j:e,t=t.toString()===Mn.default.toString()?j:t;let s={},a={},c={},u=[],l={};for(let m of n!=null?n:[]){if((m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),a[m.id.toString()]=m),m.mintA.equals(e)){let p=m.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(m)}if(m.mintB.equals(e)){let p=m.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(m)}if(m.mintA.equals(t)){let p=m.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(m)}if(m.mintB.equals(t)){let p=m.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(m)}}let d=[];for(let m of i)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),s[m.id.toBase58()]=m,d.push(m)),m.mintA.equals(e)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].out.push(m));for(let m of r)(m.mintA.equals(e)&&m.mintB.equals(t)||m.mintA.equals(t)&&m.mintB.equals(e))&&(u.push(m),c[m.id.toBase58()]=m),m.mintA.equals(e)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].in.push(m)),m.mintB.equals(e)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].in.push(m)),m.mintA.equals(t)&&(l[m.mintB.toBase58()]===void 0&&(l[m.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[m.mintB.toBase58()].out.push(m)),m.mintB.equals(t)&&(l[m.mintA.toBase58()]===void 0&&(l[m.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[m.mintA.toBase58()].out.push(m));for(let m of Object.keys(l)){if(l[m].in.length===1&&l[m].out.length===1&&l[m].in[0].id.equals(l[m].out[0].id)){delete l[m];continue}if(l[m].in.length===0||l[m].out.length===0){delete l[m];continue}let p=l[m];for(let f of p.in)for(let b 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),b.version===6&&a[b.id.toString()]===void 0?a[b.id.toString()]=b:b.version===7&&c[b.id.toString()]===void 0?c[b.id.toString()]=b:(b.version===4||b.version===5)&&s[b.id.toString()]===void 0&&(s[b.id.toString()]=b)}return{directPath:u,addLiquidityPools:d,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let i=new Set([...e.needTickArray.map(b=>[b.mintA.toBase58(),b.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(b=>b.id)),s=Wo(r),a={};Object.values(s).forEach(b=>{i.delete(b.mintA.address),a[b.mintA.address]={address:new Mn(b.mintA.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:b.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(b.mintB.address),a[b.mintB.address]={address:new Mn(b.mintB.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:b.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(b=>b.id.toBase58()),!0);Object.values(c).forEach(b=>{let[y,g]=[b.mintA.toBase58(),b.mintB.toBase58()];b.mintProgramA.equals(Fe)?(i.delete(y),a[y]={address:b.mintA,programId:b.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:b.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(y),b.mintProgramB.equals(Fe)?(i.delete(g),a[g]={address:b.mintB,programId:b.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:b.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(g)}),console.log("fetching mints info, total: ",i.size);let u=await Nn({connection:this.scope.connection,mints:Array.from(i).map(b=>new Mn(b))});a=O(O({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let d=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(b=>b.id)}),{computeClmmPoolInfo:m,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:d,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((b,y)=>U(O({},b),{[y]:U(O({},e.routePathDict[y]),{mintProgram:a[y].programId,mDecimals:a[y].decimals,in:e.routePathDict[y].in.map(g=>s[g.id.toBase58()]||m[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[y].out.map(g=>s[g.id.toBase58()]||m[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:r,ammSimulateCache:s,clmmPoolsRpcInfo:d,computeClmmPoolInfo:m,computePoolTickData:p,computeCpmmData:l,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:i,simulateCache:r,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,w,k,P,T,h,S,x,K;let d=l===void 0?new nr(0):e.raw.mul(new nr(l.feeBps.toNumber())).div(new nr(1e4)),m=e.raw.sub(d),p=new ge(e.token,m),f=l===void 0?void 0:{feeAmount:d,feeAccount:l.feeAccount},b=U(O({},t),{address:tt(t.address).toString()}),y=[];for(let B of n)try{y.push(U(O({},this.computeAmountOut({itemPool:B,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:b,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(i)){let M={chainId:101,address:B,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},R=C.in.map(q=>{try{return{pool:q,data:this.computeAmountOut({itemPool:q,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:M,amountIn:p})}}catch(N){this.logDebug("route in error",q.version,q.id.toString(),N.message);return}}).sort((q,N)=>{var ze,xe,qe,Ie;let se=q===void 0?en:q.data.amountOut.amount.raw.sub((xe=(ze=q.data.amountOut.fee)==null?void 0:ze.raw)!=null?xe:en),Te=N===void 0?en:N.data.amountOut.amount.raw.sub((Ie=(qe=N.data.amountOut.fee)==null?void 0:qe.raw)!=null?Ie:en);return se.lt(Te)?1:-1})[0];if(R===void 0)continue;let _=new ge(_o(M),R.data.amountOut.amount.raw.sub((w=(g=R.data.amountOut.fee)==null?void 0:g.raw)!=null?w:en));for(let q of C.out)try{let N=this.computeAmountOut({itemPool:q,tickCache:s,simulateCache:r,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:_});y.push(U(O({},N),{allTrade:!!(R.data.allTrade&&N.allTrade),amountIn:R.data.amountIn,amountOut:N.amountOut,minAmountOut:N.minAmountOut,currentPrice:void 0,executionPrice:new v(new pt({baseToken:R.data.amountIn.amount.token,denominator:R.data.amountIn.amount.raw,quoteToken:N.amountOut.amount.token,numerator:N.amountOut.amount.raw.sub((P=(k=N.amountOut.fee)==null?void 0:k.raw)!=null?P:en)}).toFixed()),priceImpact:new v(R.data.priceImpact.add(N.priceImpact).toFixed()),fee:[R.data.fee[0],N.fee[0]],routeType:"route",poolInfoList:[R.pool,q],remainingAccounts:[R.data.remainingAccounts[0],N.remainingAccounts[0]],minMiddleAmountFee:(T=N.amountOut.fee)!=null&&T.raw?new ge(R.data.amountOut.amount.token,((S=(h=R.data.amountOut.fee)==null?void 0:h.raw)!=null?S:en).add((K=(x=N.amountOut.fee)==null?void 0:x.raw)!=null?K:en)):void 0,middleToken:R.data.amountOut.amount.token,poolReady:R.data.poolReady&&N.poolReady,poolType:[R.data.poolType,N.poolType],feeConfig:f,expirationTime:_t(R.data.expirationTime,N.expirationTime)}))}catch(N){this.logDebug("route out error",q.version,q.id.toString(),N.message)}}return y.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(en)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:i,epochInfo:r,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:d,minAmountOut:m,expirationTime:p,currentPrice:f,executionPrice:b,priceImpact:y,fee:g,remainingAccounts:w,executionPriceX64:k}=Be.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:d,minAmountOut:m,currentPrice:new v(f.toFixed()),executionPrice:new v(b.toFixed()),priceImpact:new v(y.toFixed()),fee:[g],remainingAccounts:[w],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[k],expirationTime:_t(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:d,minAmountOut:m,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:Ri(U(O({},a),{amount:d})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ri(U(O({},a),{amount:m})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ge(c.token,f)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<i,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:d,executionPrice:m,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:Ri(U(O({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ri(U(O({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:d,executionPrice:m,priceImpact:p,fee:[new ge(c.token,f)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<i,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 i=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(i)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));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 Ue(this.scope.connection,Array.from(s).map(l=>({pubkey:new Mn(l)})))).forEach(l=>{if(!l.accountInfo)return;let d=Is.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:er.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:d.baseVault.toString(),marketQuoteVault:d.quoteVault.toString(),marketBids:d.bids.toString(),marketAsks:d.asks.toString(),marketEventQueue:d.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],d={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(O({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(d)}else if(u.version===4){let l=n[u.id.toString()],d=O({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:gs({programId:new Mn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(d)}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:Yn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:st({address:u.mintLp.toBase58(),programId:Fe.toBase58(),decimals:u.lpDecimals}),config:U(O({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 $d,Transaction as Bs,TransactionInstruction as Jd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ep}from"@solana/spl-token";import ic from"bn.js";var at=class extends Oe{static getPdaPoolId(e,t){return me([at.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return me([at.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new ic(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:r}){if(n.length===0)return[];let s=n.map(l=>at.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<at.VERSION_PROJECT.length;l++)a.push(...s.map(d=>at.getPdaOwnerId(t,d,i,l).publicKey));let c=await Lt(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let d=Math.floor(l/n.length),m=l%n.length,p=s[m],f=a[l],b=c[m],y=c[n.length+l];if(!(b&&y)||b.data.length!==at.POOL_LAYOUT.span||y.data.length!==at.OWNER_LAYOUT.span)continue;let g=at.POOL_LAYOUT.decode(b.data),w=at.OWNER_LAYOUT.decode(y.data),k=g.openTime.toNumber(),P=g.endTime.toNumber(),T=w.tokenInfo.map(x=>x.debtAmount.gt(new ic(0))).filter(x=>!x).length!==3,h=r>k&&r<P&&g.status===1,S=T&&h;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:w.lpAmount,project:at.VERSION_PROJECT[d],openTime:k,endTime:P,canClaim:S,canClaimErrorType:T?h?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,K)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:w.tokenInfo[K].debtAmount.add(w.tokenInfo[K].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(Re.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!c.mintAddress.equals(Re.WSOL.mint),associatedOnly:c.mintAddress.equals(Re.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),r.push(u)}n.addInstruction({instructions:[at.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r={};for(let u of e){let l=[];for(let d of u.tokenInfo){let{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:d.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:d.mintAddress.equals(Re.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!d.mintAddress.equals(Re.WSOL.mint),associatedOnly:d.mintAddress.equals(Re.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),m&&(r[d.mintAddress.toString()]=m,l.push(m))}n.addInstruction({instructions:[at.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:i,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return Br(c,[i,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new Bs().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new Bs().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new Bs().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=W([]),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:ep,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Jd({keys:r,programId:e,data:a})}},Rt=at;Rt.CLAIMED_NUM=3,Rt.POOL_LAYOUT=W([ye(8),X("bump"),X("status"),A("openTime"),A("endTime"),L("ammId"),H(W([X("mintDecimals"),L("mintAddress"),L("mintVault"),A("perLpLoss"),A("totalClaimedAmount")]),at.CLAIMED_NUM,"tokenInfo"),H(A(),10,"padding")]),Rt.OWNER_LAYOUT=W([ye(8),X("bump"),X("version"),L("poolId"),L("owner"),A("lpAmount"),H(W([L("mintAddress"),A("debtAmount"),A("claimedAmount")]),at.CLAIMED_NUM,"tokenInfo"),H(A(),4,"padding")]),Rt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new $d(e)),Rt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Rt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Gi}from"@solana/web3.js";import sc from"bn.js";import{SYSVAR_CLOCK_PUBKEY as np,TransactionInstruction as oc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as rc}from"@solana/spl-token";var tp=W([X("instruction"),La("amount")]),Ui=W([X("instruction")]);function ir({programId:o},e){let t=[{pubkey:rc,isSigner:!1,isWritable:!1},{pubkey:ia,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,r])=>({pubkey:r,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(Ui.span);return Ui.encode({instruction:2},n),new oc({keys:t,programId:o,data:n})}function xs(o){let{poolConfig:e,userKeys:t,side:n}=o,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,r=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Ui.span);Ui.encode({instruction:2},s);let a=[{pubkey:rc,isWritable:!1,isSigner:!1},{pubkey:np,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:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new oc({programId:e.programId,keys:a,data:s})}var ip={[si.IDO_PROGRAM_ID_V1.toString()]:1,[si.IDO_PROGRAM_ID_V2.toString()]:2,[si.IDO_PROGRAM_ID_V3.toString()]:3,[si.IDO_PROGRAM_ID_V4.toString()]:4},Hn=class extends Oe{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:r}){let s=this.createTxBuilder(),a=ip[t.programId];a||this.logAndCreateError("invalid version",a);let c=$e(t),[u,l]=[!new sc(e.coin).isZero(),!new sc(e.pc).isZero()],d=c.projectInfo.mint.address.equals(j),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!d,notUseTokenAccount:d,associatedOnly:d?!1:n,checkCreateATAOwner:i});!m&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let f=c.buyInfo.mint.address.equals(j),{account:b,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:n,checkCreateATAOwner:i});if(!m&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&y&&s.addInstruction(y),(!m||!b)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[ir({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:m,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[ir({programId:new Gi(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:b,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:r});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[ir({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:m,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:r});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:m,quoteTokenAccount:b,ledgerAccount:new Gi(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[xs(U(O({},g),{side:"base"}))]:[],...l?[xs(U(O({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:r})}};import{PublicKey as op}from"@solana/web3.js";import{MintLayout as rp,TOKEN_2022_PROGRAM_ID as Ss,TOKEN_PROGRAM_ID as Ks}from"@solana/spl-token";var Xi=class extends Oe{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:i="strict"}=t||{},{mintList: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 Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(an.address,an),this._mintGroup.official.add(an.address),s.forEach(u=>{this._blackTokenMap.set(u.address,U(O({},u),{priority:-1}))}),r.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,U(O({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ss.toBase58():Ks.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(O({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Ss.toBase58():Ks.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(O({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Ss.toBase58():Ks.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(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return an;let r=(await this.scope.api.getTokenInfo([n]))[0];if(r)return this._mintGroup.extra.add(n),this._tokenMap.set(n,U(O({},r),{priority:2})),r;let s=await this.scope.connection.getAccountInfo(new op(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=rp.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 or=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:r,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed",loopMultiTxStatus:l}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new Nt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=r,this._apiCacheTime=c||5*60*1e3,this.logger=le("Raydium"),this.farm=new ki({scope:this,moduleName:"Raydium_Farm"}),this.account=new di({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new vi({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Xi({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new qi({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Vi({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Wi({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Rt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Xn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Hn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let d=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:d,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=sp({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:r,logRequests:s,urlConfigs:a}=t,c=new ko({cluster:n,timeout:i,urlConfigs:a,logCount:r,logRequests:s}),u=new or(U(O({},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(Po);return this._owner.publicKey}setOwner(e){return this._owner=e?new Nt(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Ta);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw this.logger.error(Po),new Error(Po)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(i=>U(O({},i),{mintAuthority:i.mint_authority||void 0,freezeAuthority:i.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};export{or as Raydium};
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
//# sourceMappingURL=raydium.mjs.map