@msafe/sui-app-store 0.0.307 → 0.0.311
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -8
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Hl=Object.create;var br=Object.defineProperty;var Xl=Object.getOwnPropertyDescriptor;var zl=Object.getOwnPropertyNames;var Gl=Object.getPrototypeOf,Ql=Object.prototype.hasOwnProperty;var Jl=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var Yl=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),ks=(a,e)=>{for(var t in e)br(a,t,{get:e[t],enumerable:!0})},Zl=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of zl(e))!Ql.call(a,o)&&o!==t&&br(a,o,{get:()=>e[o],enumerable:!(n=Xl(e,o))||n.enumerable});return a};var tu=(a,e,t)=>(t=a!=null?Hl(Gl(a)):{},Zl(e||!a||!a.__esModule?br(t,"default",{value:a,enumerable:!0}):t,a));var kl=Yl((Dl,as)=>{"use strict";(function(a,e){"use strict";function t(y,r){if(!y)throw new Error(r||"Assertion failed")}function n(y,r){y.super_=r;var u=function(){};u.prototype=r.prototype,y.prototype=new u,y.prototype.constructor=y}function o(y,r,u){if(o.isBN(y))return y;this.negative=0,this.words=null,this.length=0,this.red=null,y!==null&&((r==="le"||r==="be")&&(u=r,r=10),this._init(y||0,r||10,u||"be"))}typeof a=="object"?a.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var i;try{typeof window<"u"&&typeof window.Buffer<"u"?i=window.Buffer:i=Jl("buffer").Buffer}catch{}o.isBN=function(r){return r instanceof o?!0:r!==null&&typeof r=="object"&&r.constructor.wordSize===o.wordSize&&Array.isArray(r.words)},o.max=function(r,u){return r.cmp(u)>0?r:u},o.min=function(r,u){return r.cmp(u)<0?r:u},o.prototype._init=function(r,u,m){if(typeof r=="number")return this._initNumber(r,u,m);if(typeof r=="object")return this._initArray(r,u,m);u==="hex"&&(u=16),t(u===(u|0)&&u>=2&&u<=36),r=r.toString().replace(/\s+/g,"");var p=0;r[0]==="-"&&(p++,this.negative=1),p<r.length&&(u===16?this._parseHex(r,p,m):(this._parseBase(r,u,p),m==="le"&&this._initArray(this.toArray(),u,m)))},o.prototype._initNumber=function(r,u,m){r<0&&(this.negative=1,r=-r),r<67108864?(this.words=[r&67108863],this.length=1):r<4503599627370496?(this.words=[r&67108863,r/67108864&67108863],this.length=2):(t(r<9007199254740992),this.words=[r&67108863,r/67108864&67108863,1],this.length=3),m==="le"&&this._initArray(this.toArray(),u,m)},o.prototype._initArray=function(r,u,m){if(t(typeof r.length=="number"),r.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(r.length/3),this.words=new Array(this.length);for(var p=0;p<this.length;p++)this.words[p]=0;var h,T,w=0;if(m==="be")for(p=r.length-1,h=0;p>=0;p-=3)T=r[p]|r[p-1]<<8|r[p-2]<<16,this.words[h]|=T<<w&67108863,this.words[h+1]=T>>>26-w&67108863,w+=24,w>=26&&(w-=26,h++);else if(m==="le")for(p=0,h=0;p<r.length;p+=3)T=r[p]|r[p+1]<<8|r[p+2]<<16,this.words[h]|=T<<w&67108863,this.words[h+1]=T>>>26-w&67108863,w+=24,w>=26&&(w-=26,h++);return this._strip()};function s(y,r){var u=y.charCodeAt(r);if(u>=48&&u<=57)return u-48;if(u>=65&&u<=70)return u-55;if(u>=97&&u<=102)return u-87;t(!1,"Invalid character in "+y)}function l(y,r,u){var m=s(y,u);return u-1>=r&&(m|=s(y,u-1)<<4),m}o.prototype._parseHex=function(r,u,m){this.length=Math.ceil((r.length-u)/6),this.words=new Array(this.length);for(var p=0;p<this.length;p++)this.words[p]=0;var h=0,T=0,w;if(m==="be")for(p=r.length-1;p>=u;p-=2)w=l(r,u,p)<<h,this.words[T]|=w&67108863,h>=18?(h-=18,T+=1,this.words[T]|=w>>>26):h+=8;else{var f=r.length-u;for(p=f%2===0?u+1:u;p<r.length;p+=2)w=l(r,u,p)<<h,this.words[T]|=w&67108863,h>=18?(h-=18,T+=1,this.words[T]|=w>>>26):h+=8}this._strip()};function d(y,r,u,m){for(var p=0,h=0,T=Math.min(y.length,u),w=r;w<T;w++){var f=y.charCodeAt(w)-48;p*=m,f>=49?h=f-49+10:f>=17?h=f-17+10:h=f,t(f>=0&&h<m,"Invalid character"),p+=h}return p}o.prototype._parseBase=function(r,u,m){this.words=[0],this.length=1;for(var p=0,h=1;h<=67108863;h*=u)p++;p--,h=h/u|0;for(var T=r.length-m,w=T%p,f=Math.min(T,T-w)+m,c=0,g=m;g<f;g+=p)c=d(r,g,g+p,u),this.imuln(h),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(w!==0){var v=1;for(c=d(r,g,r.length,u),g=0;g<w;g++)v*=u;this.imuln(v),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}this._strip()},o.prototype.copy=function(r){r.words=new Array(this.length);for(var u=0;u<this.length;u++)r.words[u]=this.words[u];r.length=this.length,r.negative=this.negative,r.red=this.red};function b(y,r){y.words=r.words,y.length=r.length,y.negative=r.negative,y.red=r.red}if(o.prototype._move=function(r){b(r,this)},o.prototype.clone=function(){var r=new o(null);return this.copy(r),r},o.prototype._expand=function(r){for(;this.length<r;)this.words[this.length++]=0;return this},o.prototype._strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},o.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{o.prototype[Symbol.for("nodejs.util.inspect.custom")]=I}catch{o.prototype.inspect=I}else o.prototype.inspect=I;function I(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var C=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],x=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],D=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(r,u){r=r||10,u=u|0||1;var m;if(r===16||r==="hex"){m="";for(var p=0,h=0,T=0;T<this.length;T++){var w=this.words[T],f=((w<<p|h)&16777215).toString(16);h=w>>>24-p&16777215,p+=2,p>=26&&(p-=26,T--),h!==0||T!==this.length-1?m=C[6-f.length]+f+m:m=f+m}for(h!==0&&(m=h.toString(16)+m);m.length%u!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}if(r===(r|0)&&r>=2&&r<=36){var c=x[r],g=D[r];m="";var v=this.clone();for(v.negative=0;!v.isZero();){var M=v.modrn(g).toString(r);v=v.idivn(g),v.isZero()?m=M+m:m=C[c-M.length]+M+m}for(this.isZero()&&(m="0"+m);m.length%u!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}t(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var r=this.words[0];return this.length===2?r+=this.words[1]*67108864:this.length===3&&this.words[2]===1?r+=4503599627370496+this.words[1]*67108864:this.length>2&&t(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-r:r},o.prototype.toJSON=function(){return this.toString(16,2)},i&&(o.prototype.toBuffer=function(r,u){return this.toArrayLike(i,r,u)}),o.prototype.toArray=function(r,u){return this.toArrayLike(Array,r,u)};var k=function(r,u){return r.allocUnsafe?r.allocUnsafe(u):new r(u)};o.prototype.toArrayLike=function(r,u,m){this._strip();var p=this.byteLength(),h=m||Math.max(1,p);t(p<=h,"byte array longer than desired length"),t(h>0,"Requested array length <= 0");var T=k(r,h),w=u==="le"?"LE":"BE";return this["_toArrayLike"+w](T,p),T},o.prototype._toArrayLikeLE=function(r,u){for(var m=0,p=0,h=0,T=0;h<this.length;h++){var w=this.words[h]<<T|p;r[m++]=w&255,m<r.length&&(r[m++]=w>>8&255),m<r.length&&(r[m++]=w>>16&255),T===6?(m<r.length&&(r[m++]=w>>24&255),p=0,T=0):(p=w>>>24,T+=2)}if(m<r.length)for(r[m++]=p;m<r.length;)r[m++]=0},o.prototype._toArrayLikeBE=function(r,u){for(var m=r.length-1,p=0,h=0,T=0;h<this.length;h++){var w=this.words[h]<<T|p;r[m--]=w&255,m>=0&&(r[m--]=w>>8&255),m>=0&&(r[m--]=w>>16&255),T===6?(m>=0&&(r[m--]=w>>24&255),p=0,T=0):(p=w>>>24,T+=2)}if(m>=0)for(r[m--]=p;m>=0;)r[m--]=0},Math.clz32?o.prototype._countBits=function(r){return 32-Math.clz32(r)}:o.prototype._countBits=function(r){var u=r,m=0;return u>=4096&&(m+=13,u>>>=13),u>=64&&(m+=7,u>>>=7),u>=8&&(m+=4,u>>>=4),u>=2&&(m+=2,u>>>=2),m+u},o.prototype._zeroBits=function(r){if(r===0)return 26;var u=r,m=0;return(u&8191)===0&&(m+=13,u>>>=13),(u&127)===0&&(m+=7,u>>>=7),(u&15)===0&&(m+=4,u>>>=4),(u&3)===0&&(m+=2,u>>>=2),(u&1)===0&&m++,m},o.prototype.bitLength=function(){var r=this.words[this.length-1],u=this._countBits(r);return(this.length-1)*26+u};function P(y){for(var r=new Array(y.bitLength()),u=0;u<r.length;u++){var m=u/26|0,p=u%26;r[u]=y.words[m]>>>p&1}return r}o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var r=0,u=0;u<this.length;u++){var m=this._zeroBits(this.words[u]);if(r+=m,m!==26)break}return r},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(r){return this.negative!==0?this.abs().inotn(r).iaddn(1):this.clone()},o.prototype.fromTwos=function(r){return this.testn(r-1)?this.notn(r).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return this.negative!==0},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(r){for(;this.length<r.length;)this.words[this.length++]=0;for(var u=0;u<r.length;u++)this.words[u]=this.words[u]|r.words[u];return this._strip()},o.prototype.ior=function(r){return t((this.negative|r.negative)===0),this.iuor(r)},o.prototype.or=function(r){return this.length>r.length?this.clone().ior(r):r.clone().ior(this)},o.prototype.uor=function(r){return this.length>r.length?this.clone().iuor(r):r.clone().iuor(this)},o.prototype.iuand=function(r){var u;this.length>r.length?u=r:u=this;for(var m=0;m<u.length;m++)this.words[m]=this.words[m]&r.words[m];return this.length=u.length,this._strip()},o.prototype.iand=function(r){return t((this.negative|r.negative)===0),this.iuand(r)},o.prototype.and=function(r){return this.length>r.length?this.clone().iand(r):r.clone().iand(this)},o.prototype.uand=function(r){return this.length>r.length?this.clone().iuand(r):r.clone().iuand(this)},o.prototype.iuxor=function(r){var u,m;this.length>r.length?(u=this,m=r):(u=r,m=this);for(var p=0;p<m.length;p++)this.words[p]=u.words[p]^m.words[p];if(this!==u)for(;p<u.length;p++)this.words[p]=u.words[p];return this.length=u.length,this._strip()},o.prototype.ixor=function(r){return t((this.negative|r.negative)===0),this.iuxor(r)},o.prototype.xor=function(r){return this.length>r.length?this.clone().ixor(r):r.clone().ixor(this)},o.prototype.uxor=function(r){return this.length>r.length?this.clone().iuxor(r):r.clone().iuxor(this)},o.prototype.inotn=function(r){t(typeof r=="number"&&r>=0);var u=Math.ceil(r/26)|0,m=r%26;this._expand(u),m>0&&u--;for(var p=0;p<u;p++)this.words[p]=~this.words[p]&67108863;return m>0&&(this.words[p]=~this.words[p]&67108863>>26-m),this._strip()},o.prototype.notn=function(r){return this.clone().inotn(r)},o.prototype.setn=function(r,u){t(typeof r=="number"&&r>=0);var m=r/26|0,p=r%26;return this._expand(m+1),u?this.words[m]=this.words[m]|1<<p:this.words[m]=this.words[m]&~(1<<p),this._strip()},o.prototype.iadd=function(r){var u;if(this.negative!==0&&r.negative===0)return this.negative=0,u=this.isub(r),this.negative^=1,this._normSign();if(this.negative===0&&r.negative!==0)return r.negative=0,u=this.isub(r),r.negative=1,u._normSign();var m,p;this.length>r.length?(m=this,p=r):(m=r,p=this);for(var h=0,T=0;T<p.length;T++)u=(m.words[T]|0)+(p.words[T]|0)+h,this.words[T]=u&67108863,h=u>>>26;for(;h!==0&&T<m.length;T++)u=(m.words[T]|0)+h,this.words[T]=u&67108863,h=u>>>26;if(this.length=m.length,h!==0)this.words[this.length]=h,this.length++;else if(m!==this)for(;T<m.length;T++)this.words[T]=m.words[T];return this},o.prototype.add=function(r){var u;return r.negative!==0&&this.negative===0?(r.negative=0,u=this.sub(r),r.negative^=1,u):r.negative===0&&this.negative!==0?(this.negative=0,u=r.sub(this),this.negative=1,u):this.length>r.length?this.clone().iadd(r):r.clone().iadd(this)},o.prototype.isub=function(r){if(r.negative!==0){r.negative=0;var u=this.iadd(r);return r.negative=1,u._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(r),this.negative=1,this._normSign();var m=this.cmp(r);if(m===0)return this.negative=0,this.length=1,this.words[0]=0,this;var p,h;m>0?(p=this,h=r):(p=r,h=this);for(var T=0,w=0;w<h.length;w++)u=(p.words[w]|0)-(h.words[w]|0)+T,T=u>>26,this.words[w]=u&67108863;for(;T!==0&&w<p.length;w++)u=(p.words[w]|0)+T,T=u>>26,this.words[w]=u&67108863;if(T===0&&w<p.length&&p!==this)for(;w<p.length;w++)this.words[w]=p.words[w];return this.length=Math.max(this.length,w),p!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(r){return this.clone().isub(r)};function U(y,r,u){u.negative=r.negative^y.negative;var m=y.length+r.length|0;u.length=m,m=m-1|0;var p=y.words[0]|0,h=r.words[0]|0,T=p*h,w=T&67108863,f=T/67108864|0;u.words[0]=w;for(var c=1;c<m;c++){for(var g=f>>>26,v=f&67108863,M=Math.min(c,r.length-1),O=Math.max(0,c-y.length+1);O<=M;O++){var B=c-O|0;p=y.words[B]|0,h=r.words[O]|0,T=p*h+v,g+=T/67108864|0,v=T&67108863}u.words[c]=v|0,f=g|0}return f!==0?u.words[c]=f|0:u.length--,u._strip()}var K=function(r,u,m){var p=r.words,h=u.words,T=m.words,w=0,f,c,g,v=p[0]|0,M=v&8191,O=v>>>13,B=p[1]|0,N=B&8191,L=B>>>13,oe=p[2]|0,j=oe&8191,F=oe>>>13,ls=p[3]|0,H=ls&8191,X=ls>>>13,us=p[4]|0,z=us&8191,G=us>>>13,ms=p[5]|0,Q=ms&8191,J=ms>>>13,ps=p[6]|0,Y=ps&8191,Z=ps>>>13,ds=p[7]|0,tt=ds&8191,et=ds>>>13,fs=p[8]|0,nt=fs&8191,ot=fs>>>13,hs=p[9]|0,at=hs&8191,it=hs>>>13,gs=h[0]|0,rt=gs&8191,st=gs>>>13,ys=h[1]|0,ct=ys&8191,lt=ys>>>13,bs=h[2]|0,ut=bs&8191,mt=bs>>>13,Ts=h[3]|0,pt=Ts&8191,dt=Ts>>>13,Ss=h[4]|0,ft=Ss&8191,ht=Ss>>>13,Is=h[5]|0,gt=Is&8191,yt=Is>>>13,ws=h[6]|0,bt=ws&8191,Tt=ws>>>13,Cs=h[7]|0,St=Cs&8191,It=Cs>>>13,xs=h[8]|0,wt=xs&8191,Ct=xs>>>13,Ds=h[9]|0,xt=Ds&8191,Dt=Ds>>>13;m.negative=r.negative^u.negative,m.length=19,f=Math.imul(M,rt),c=Math.imul(M,st),c=c+Math.imul(O,rt)|0,g=Math.imul(O,st);var Zi=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(Zi>>>26)|0,Zi&=67108863,f=Math.imul(N,rt),c=Math.imul(N,st),c=c+Math.imul(L,rt)|0,g=Math.imul(L,st),f=f+Math.imul(M,ct)|0,c=c+Math.imul(M,lt)|0,c=c+Math.imul(O,ct)|0,g=g+Math.imul(O,lt)|0;var tr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(tr>>>26)|0,tr&=67108863,f=Math.imul(j,rt),c=Math.imul(j,st),c=c+Math.imul(F,rt)|0,g=Math.imul(F,st),f=f+Math.imul(N,ct)|0,c=c+Math.imul(N,lt)|0,c=c+Math.imul(L,ct)|0,g=g+Math.imul(L,lt)|0,f=f+Math.imul(M,ut)|0,c=c+Math.imul(M,mt)|0,c=c+Math.imul(O,ut)|0,g=g+Math.imul(O,mt)|0;var er=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(er>>>26)|0,er&=67108863,f=Math.imul(H,rt),c=Math.imul(H,st),c=c+Math.imul(X,rt)|0,g=Math.imul(X,st),f=f+Math.imul(j,ct)|0,c=c+Math.imul(j,lt)|0,c=c+Math.imul(F,ct)|0,g=g+Math.imul(F,lt)|0,f=f+Math.imul(N,ut)|0,c=c+Math.imul(N,mt)|0,c=c+Math.imul(L,ut)|0,g=g+Math.imul(L,mt)|0,f=f+Math.imul(M,pt)|0,c=c+Math.imul(M,dt)|0,c=c+Math.imul(O,pt)|0,g=g+Math.imul(O,dt)|0;var nr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(nr>>>26)|0,nr&=67108863,f=Math.imul(z,rt),c=Math.imul(z,st),c=c+Math.imul(G,rt)|0,g=Math.imul(G,st),f=f+Math.imul(H,ct)|0,c=c+Math.imul(H,lt)|0,c=c+Math.imul(X,ct)|0,g=g+Math.imul(X,lt)|0,f=f+Math.imul(j,ut)|0,c=c+Math.imul(j,mt)|0,c=c+Math.imul(F,ut)|0,g=g+Math.imul(F,mt)|0,f=f+Math.imul(N,pt)|0,c=c+Math.imul(N,dt)|0,c=c+Math.imul(L,pt)|0,g=g+Math.imul(L,dt)|0,f=f+Math.imul(M,ft)|0,c=c+Math.imul(M,ht)|0,c=c+Math.imul(O,ft)|0,g=g+Math.imul(O,ht)|0;var or=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(or>>>26)|0,or&=67108863,f=Math.imul(Q,rt),c=Math.imul(Q,st),c=c+Math.imul(J,rt)|0,g=Math.imul(J,st),f=f+Math.imul(z,ct)|0,c=c+Math.imul(z,lt)|0,c=c+Math.imul(G,ct)|0,g=g+Math.imul(G,lt)|0,f=f+Math.imul(H,ut)|0,c=c+Math.imul(H,mt)|0,c=c+Math.imul(X,ut)|0,g=g+Math.imul(X,mt)|0,f=f+Math.imul(j,pt)|0,c=c+Math.imul(j,dt)|0,c=c+Math.imul(F,pt)|0,g=g+Math.imul(F,dt)|0,f=f+Math.imul(N,ft)|0,c=c+Math.imul(N,ht)|0,c=c+Math.imul(L,ft)|0,g=g+Math.imul(L,ht)|0,f=f+Math.imul(M,gt)|0,c=c+Math.imul(M,yt)|0,c=c+Math.imul(O,gt)|0,g=g+Math.imul(O,yt)|0;var ar=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(ar>>>26)|0,ar&=67108863,f=Math.imul(Y,rt),c=Math.imul(Y,st),c=c+Math.imul(Z,rt)|0,g=Math.imul(Z,st),f=f+Math.imul(Q,ct)|0,c=c+Math.imul(Q,lt)|0,c=c+Math.imul(J,ct)|0,g=g+Math.imul(J,lt)|0,f=f+Math.imul(z,ut)|0,c=c+Math.imul(z,mt)|0,c=c+Math.imul(G,ut)|0,g=g+Math.imul(G,mt)|0,f=f+Math.imul(H,pt)|0,c=c+Math.imul(H,dt)|0,c=c+Math.imul(X,pt)|0,g=g+Math.imul(X,dt)|0,f=f+Math.imul(j,ft)|0,c=c+Math.imul(j,ht)|0,c=c+Math.imul(F,ft)|0,g=g+Math.imul(F,ht)|0,f=f+Math.imul(N,gt)|0,c=c+Math.imul(N,yt)|0,c=c+Math.imul(L,gt)|0,g=g+Math.imul(L,yt)|0,f=f+Math.imul(M,bt)|0,c=c+Math.imul(M,Tt)|0,c=c+Math.imul(O,bt)|0,g=g+Math.imul(O,Tt)|0;var ir=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(ir>>>26)|0,ir&=67108863,f=Math.imul(tt,rt),c=Math.imul(tt,st),c=c+Math.imul(et,rt)|0,g=Math.imul(et,st),f=f+Math.imul(Y,ct)|0,c=c+Math.imul(Y,lt)|0,c=c+Math.imul(Z,ct)|0,g=g+Math.imul(Z,lt)|0,f=f+Math.imul(Q,ut)|0,c=c+Math.imul(Q,mt)|0,c=c+Math.imul(J,ut)|0,g=g+Math.imul(J,mt)|0,f=f+Math.imul(z,pt)|0,c=c+Math.imul(z,dt)|0,c=c+Math.imul(G,pt)|0,g=g+Math.imul(G,dt)|0,f=f+Math.imul(H,ft)|0,c=c+Math.imul(H,ht)|0,c=c+Math.imul(X,ft)|0,g=g+Math.imul(X,ht)|0,f=f+Math.imul(j,gt)|0,c=c+Math.imul(j,yt)|0,c=c+Math.imul(F,gt)|0,g=g+Math.imul(F,yt)|0,f=f+Math.imul(N,bt)|0,c=c+Math.imul(N,Tt)|0,c=c+Math.imul(L,bt)|0,g=g+Math.imul(L,Tt)|0,f=f+Math.imul(M,St)|0,c=c+Math.imul(M,It)|0,c=c+Math.imul(O,St)|0,g=g+Math.imul(O,It)|0;var rr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(rr>>>26)|0,rr&=67108863,f=Math.imul(nt,rt),c=Math.imul(nt,st),c=c+Math.imul(ot,rt)|0,g=Math.imul(ot,st),f=f+Math.imul(tt,ct)|0,c=c+Math.imul(tt,lt)|0,c=c+Math.imul(et,ct)|0,g=g+Math.imul(et,lt)|0,f=f+Math.imul(Y,ut)|0,c=c+Math.imul(Y,mt)|0,c=c+Math.imul(Z,ut)|0,g=g+Math.imul(Z,mt)|0,f=f+Math.imul(Q,pt)|0,c=c+Math.imul(Q,dt)|0,c=c+Math.imul(J,pt)|0,g=g+Math.imul(J,dt)|0,f=f+Math.imul(z,ft)|0,c=c+Math.imul(z,ht)|0,c=c+Math.imul(G,ft)|0,g=g+Math.imul(G,ht)|0,f=f+Math.imul(H,gt)|0,c=c+Math.imul(H,yt)|0,c=c+Math.imul(X,gt)|0,g=g+Math.imul(X,yt)|0,f=f+Math.imul(j,bt)|0,c=c+Math.imul(j,Tt)|0,c=c+Math.imul(F,bt)|0,g=g+Math.imul(F,Tt)|0,f=f+Math.imul(N,St)|0,c=c+Math.imul(N,It)|0,c=c+Math.imul(L,St)|0,g=g+Math.imul(L,It)|0,f=f+Math.imul(M,wt)|0,c=c+Math.imul(M,Ct)|0,c=c+Math.imul(O,wt)|0,g=g+Math.imul(O,Ct)|0;var sr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(sr>>>26)|0,sr&=67108863,f=Math.imul(at,rt),c=Math.imul(at,st),c=c+Math.imul(it,rt)|0,g=Math.imul(it,st),f=f+Math.imul(nt,ct)|0,c=c+Math.imul(nt,lt)|0,c=c+Math.imul(ot,ct)|0,g=g+Math.imul(ot,lt)|0,f=f+Math.imul(tt,ut)|0,c=c+Math.imul(tt,mt)|0,c=c+Math.imul(et,ut)|0,g=g+Math.imul(et,mt)|0,f=f+Math.imul(Y,pt)|0,c=c+Math.imul(Y,dt)|0,c=c+Math.imul(Z,pt)|0,g=g+Math.imul(Z,dt)|0,f=f+Math.imul(Q,ft)|0,c=c+Math.imul(Q,ht)|0,c=c+Math.imul(J,ft)|0,g=g+Math.imul(J,ht)|0,f=f+Math.imul(z,gt)|0,c=c+Math.imul(z,yt)|0,c=c+Math.imul(G,gt)|0,g=g+Math.imul(G,yt)|0,f=f+Math.imul(H,bt)|0,c=c+Math.imul(H,Tt)|0,c=c+Math.imul(X,bt)|0,g=g+Math.imul(X,Tt)|0,f=f+Math.imul(j,St)|0,c=c+Math.imul(j,It)|0,c=c+Math.imul(F,St)|0,g=g+Math.imul(F,It)|0,f=f+Math.imul(N,wt)|0,c=c+Math.imul(N,Ct)|0,c=c+Math.imul(L,wt)|0,g=g+Math.imul(L,Ct)|0,f=f+Math.imul(M,xt)|0,c=c+Math.imul(M,Dt)|0,c=c+Math.imul(O,xt)|0,g=g+Math.imul(O,Dt)|0;var cr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(cr>>>26)|0,cr&=67108863,f=Math.imul(at,ct),c=Math.imul(at,lt),c=c+Math.imul(it,ct)|0,g=Math.imul(it,lt),f=f+Math.imul(nt,ut)|0,c=c+Math.imul(nt,mt)|0,c=c+Math.imul(ot,ut)|0,g=g+Math.imul(ot,mt)|0,f=f+Math.imul(tt,pt)|0,c=c+Math.imul(tt,dt)|0,c=c+Math.imul(et,pt)|0,g=g+Math.imul(et,dt)|0,f=f+Math.imul(Y,ft)|0,c=c+Math.imul(Y,ht)|0,c=c+Math.imul(Z,ft)|0,g=g+Math.imul(Z,ht)|0,f=f+Math.imul(Q,gt)|0,c=c+Math.imul(Q,yt)|0,c=c+Math.imul(J,gt)|0,g=g+Math.imul(J,yt)|0,f=f+Math.imul(z,bt)|0,c=c+Math.imul(z,Tt)|0,c=c+Math.imul(G,bt)|0,g=g+Math.imul(G,Tt)|0,f=f+Math.imul(H,St)|0,c=c+Math.imul(H,It)|0,c=c+Math.imul(X,St)|0,g=g+Math.imul(X,It)|0,f=f+Math.imul(j,wt)|0,c=c+Math.imul(j,Ct)|0,c=c+Math.imul(F,wt)|0,g=g+Math.imul(F,Ct)|0,f=f+Math.imul(N,xt)|0,c=c+Math.imul(N,Dt)|0,c=c+Math.imul(L,xt)|0,g=g+Math.imul(L,Dt)|0;var lr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(lr>>>26)|0,lr&=67108863,f=Math.imul(at,ut),c=Math.imul(at,mt),c=c+Math.imul(it,ut)|0,g=Math.imul(it,mt),f=f+Math.imul(nt,pt)|0,c=c+Math.imul(nt,dt)|0,c=c+Math.imul(ot,pt)|0,g=g+Math.imul(ot,dt)|0,f=f+Math.imul(tt,ft)|0,c=c+Math.imul(tt,ht)|0,c=c+Math.imul(et,ft)|0,g=g+Math.imul(et,ht)|0,f=f+Math.imul(Y,gt)|0,c=c+Math.imul(Y,yt)|0,c=c+Math.imul(Z,gt)|0,g=g+Math.imul(Z,yt)|0,f=f+Math.imul(Q,bt)|0,c=c+Math.imul(Q,Tt)|0,c=c+Math.imul(J,bt)|0,g=g+Math.imul(J,Tt)|0,f=f+Math.imul(z,St)|0,c=c+Math.imul(z,It)|0,c=c+Math.imul(G,St)|0,g=g+Math.imul(G,It)|0,f=f+Math.imul(H,wt)|0,c=c+Math.imul(H,Ct)|0,c=c+Math.imul(X,wt)|0,g=g+Math.imul(X,Ct)|0,f=f+Math.imul(j,xt)|0,c=c+Math.imul(j,Dt)|0,c=c+Math.imul(F,xt)|0,g=g+Math.imul(F,Dt)|0;var ur=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(ur>>>26)|0,ur&=67108863,f=Math.imul(at,pt),c=Math.imul(at,dt),c=c+Math.imul(it,pt)|0,g=Math.imul(it,dt),f=f+Math.imul(nt,ft)|0,c=c+Math.imul(nt,ht)|0,c=c+Math.imul(ot,ft)|0,g=g+Math.imul(ot,ht)|0,f=f+Math.imul(tt,gt)|0,c=c+Math.imul(tt,yt)|0,c=c+Math.imul(et,gt)|0,g=g+Math.imul(et,yt)|0,f=f+Math.imul(Y,bt)|0,c=c+Math.imul(Y,Tt)|0,c=c+Math.imul(Z,bt)|0,g=g+Math.imul(Z,Tt)|0,f=f+Math.imul(Q,St)|0,c=c+Math.imul(Q,It)|0,c=c+Math.imul(J,St)|0,g=g+Math.imul(J,It)|0,f=f+Math.imul(z,wt)|0,c=c+Math.imul(z,Ct)|0,c=c+Math.imul(G,wt)|0,g=g+Math.imul(G,Ct)|0,f=f+Math.imul(H,xt)|0,c=c+Math.imul(H,Dt)|0,c=c+Math.imul(X,xt)|0,g=g+Math.imul(X,Dt)|0;var mr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(mr>>>26)|0,mr&=67108863,f=Math.imul(at,ft),c=Math.imul(at,ht),c=c+Math.imul(it,ft)|0,g=Math.imul(it,ht),f=f+Math.imul(nt,gt)|0,c=c+Math.imul(nt,yt)|0,c=c+Math.imul(ot,gt)|0,g=g+Math.imul(ot,yt)|0,f=f+Math.imul(tt,bt)|0,c=c+Math.imul(tt,Tt)|0,c=c+Math.imul(et,bt)|0,g=g+Math.imul(et,Tt)|0,f=f+Math.imul(Y,St)|0,c=c+Math.imul(Y,It)|0,c=c+Math.imul(Z,St)|0,g=g+Math.imul(Z,It)|0,f=f+Math.imul(Q,wt)|0,c=c+Math.imul(Q,Ct)|0,c=c+Math.imul(J,wt)|0,g=g+Math.imul(J,Ct)|0,f=f+Math.imul(z,xt)|0,c=c+Math.imul(z,Dt)|0,c=c+Math.imul(G,xt)|0,g=g+Math.imul(G,Dt)|0;var pr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(pr>>>26)|0,pr&=67108863,f=Math.imul(at,gt),c=Math.imul(at,yt),c=c+Math.imul(it,gt)|0,g=Math.imul(it,yt),f=f+Math.imul(nt,bt)|0,c=c+Math.imul(nt,Tt)|0,c=c+Math.imul(ot,bt)|0,g=g+Math.imul(ot,Tt)|0,f=f+Math.imul(tt,St)|0,c=c+Math.imul(tt,It)|0,c=c+Math.imul(et,St)|0,g=g+Math.imul(et,It)|0,f=f+Math.imul(Y,wt)|0,c=c+Math.imul(Y,Ct)|0,c=c+Math.imul(Z,wt)|0,g=g+Math.imul(Z,Ct)|0,f=f+Math.imul(Q,xt)|0,c=c+Math.imul(Q,Dt)|0,c=c+Math.imul(J,xt)|0,g=g+Math.imul(J,Dt)|0;var dr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(dr>>>26)|0,dr&=67108863,f=Math.imul(at,bt),c=Math.imul(at,Tt),c=c+Math.imul(it,bt)|0,g=Math.imul(it,Tt),f=f+Math.imul(nt,St)|0,c=c+Math.imul(nt,It)|0,c=c+Math.imul(ot,St)|0,g=g+Math.imul(ot,It)|0,f=f+Math.imul(tt,wt)|0,c=c+Math.imul(tt,Ct)|0,c=c+Math.imul(et,wt)|0,g=g+Math.imul(et,Ct)|0,f=f+Math.imul(Y,xt)|0,c=c+Math.imul(Y,Dt)|0,c=c+Math.imul(Z,xt)|0,g=g+Math.imul(Z,Dt)|0;var fr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(fr>>>26)|0,fr&=67108863,f=Math.imul(at,St),c=Math.imul(at,It),c=c+Math.imul(it,St)|0,g=Math.imul(it,It),f=f+Math.imul(nt,wt)|0,c=c+Math.imul(nt,Ct)|0,c=c+Math.imul(ot,wt)|0,g=g+Math.imul(ot,Ct)|0,f=f+Math.imul(tt,xt)|0,c=c+Math.imul(tt,Dt)|0,c=c+Math.imul(et,xt)|0,g=g+Math.imul(et,Dt)|0;var hr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(hr>>>26)|0,hr&=67108863,f=Math.imul(at,wt),c=Math.imul(at,Ct),c=c+Math.imul(it,wt)|0,g=Math.imul(it,Ct),f=f+Math.imul(nt,xt)|0,c=c+Math.imul(nt,Dt)|0,c=c+Math.imul(ot,xt)|0,g=g+Math.imul(ot,Dt)|0;var gr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(gr>>>26)|0,gr&=67108863,f=Math.imul(at,xt),c=Math.imul(at,Dt),c=c+Math.imul(it,xt)|0,g=Math.imul(it,Dt);var yr=(w+f|0)+((c&8191)<<13)|0;return w=(g+(c>>>13)|0)+(yr>>>26)|0,yr&=67108863,T[0]=Zi,T[1]=tr,T[2]=er,T[3]=nr,T[4]=or,T[5]=ar,T[6]=ir,T[7]=rr,T[8]=sr,T[9]=cr,T[10]=lr,T[11]=ur,T[12]=mr,T[13]=pr,T[14]=dr,T[15]=fr,T[16]=hr,T[17]=gr,T[18]=yr,w!==0&&(T[19]=w,m.length++),m};Math.imul||(K=U);function Bt(y,r,u){u.negative=r.negative^y.negative,u.length=y.length+r.length;for(var m=0,p=0,h=0;h<u.length-1;h++){var T=p;p=0;for(var w=m&67108863,f=Math.min(h,r.length-1),c=Math.max(0,h-y.length+1);c<=f;c++){var g=h-c,v=y.words[g]|0,M=r.words[c]|0,O=v*M,B=O&67108863;T=T+(O/67108864|0)|0,B=B+w|0,w=B&67108863,T=T+(B>>>26)|0,p+=T>>>26,T&=67108863}u.words[h]=w,m=T,T=p}return m!==0?u.words[h]=m:u.length--,u._strip()}function Et(y,r,u){return Bt(y,r,u)}o.prototype.mulTo=function(r,u){var m,p=this.length+r.length;return this.length===10&&r.length===10?m=K(this,r,u):p<63?m=U(this,r,u):p<1024?m=Bt(this,r,u):m=Et(this,r,u),m};function Mt(y,r){this.x=y,this.y=r}Mt.prototype.makeRBT=function(r){for(var u=new Array(r),m=o.prototype._countBits(r)-1,p=0;p<r;p++)u[p]=this.revBin(p,m,r);return u},Mt.prototype.revBin=function(r,u,m){if(r===0||r===m-1)return r;for(var p=0,h=0;h<u;h++)p|=(r&1)<<u-h-1,r>>=1;return p},Mt.prototype.permute=function(r,u,m,p,h,T){for(var w=0;w<T;w++)p[w]=u[r[w]],h[w]=m[r[w]]},Mt.prototype.transform=function(r,u,m,p,h,T){this.permute(T,r,u,m,p,h);for(var w=1;w<h;w<<=1)for(var f=w<<1,c=Math.cos(2*Math.PI/f),g=Math.sin(2*Math.PI/f),v=0;v<h;v+=f)for(var M=c,O=g,B=0;B<w;B++){var N=m[v+B],L=p[v+B],oe=m[v+B+w],j=p[v+B+w],F=M*oe-O*j;j=M*j+O*oe,oe=F,m[v+B]=N+oe,p[v+B]=L+j,m[v+B+w]=N-oe,p[v+B+w]=L-j,B!==f&&(F=c*M-g*O,O=c*O+g*M,M=F)}},Mt.prototype.guessLen13b=function(r,u){var m=Math.max(u,r)|1,p=m&1,h=0;for(m=m/2|0;m;m=m>>>1)h++;return 1<<h+1+p},Mt.prototype.conjugate=function(r,u,m){if(!(m<=1))for(var p=0;p<m/2;p++){var h=r[p];r[p]=r[m-p-1],r[m-p-1]=h,h=u[p],u[p]=-u[m-p-1],u[m-p-1]=-h}},Mt.prototype.normalize13b=function(r,u){for(var m=0,p=0;p<u/2;p++){var h=Math.round(r[2*p+1]/u)*8192+Math.round(r[2*p]/u)+m;r[p]=h&67108863,h<67108864?m=0:m=h/67108864|0}return r},Mt.prototype.convert13b=function(r,u,m,p){for(var h=0,T=0;T<u;T++)h=h+(r[T]|0),m[2*T]=h&8191,h=h>>>13,m[2*T+1]=h&8191,h=h>>>13;for(T=2*u;T<p;++T)m[T]=0;t(h===0),t((h&-8192)===0)},Mt.prototype.stub=function(r){for(var u=new Array(r),m=0;m<r;m++)u[m]=0;return u},Mt.prototype.mulp=function(r,u,m){var p=2*this.guessLen13b(r.length,u.length),h=this.makeRBT(p),T=this.stub(p),w=new Array(p),f=new Array(p),c=new Array(p),g=new Array(p),v=new Array(p),M=new Array(p),O=m.words;O.length=p,this.convert13b(r.words,r.length,w,p),this.convert13b(u.words,u.length,g,p),this.transform(w,T,f,c,p,h),this.transform(g,T,v,M,p,h);for(var B=0;B<p;B++){var N=f[B]*v[B]-c[B]*M[B];c[B]=f[B]*M[B]+c[B]*v[B],f[B]=N}return this.conjugate(f,c,p),this.transform(f,c,O,T,p,h),this.conjugate(O,T,p),this.normalize13b(O,p),m.negative=r.negative^u.negative,m.length=r.length+u.length,m._strip()},o.prototype.mul=function(r){var u=new o(null);return u.words=new Array(this.length+r.length),this.mulTo(r,u)},o.prototype.mulf=function(r){var u=new o(null);return u.words=new Array(this.length+r.length),Et(this,r,u)},o.prototype.imul=function(r){return this.clone().mulTo(r,this)},o.prototype.imuln=function(r){var u=r<0;u&&(r=-r),t(typeof r=="number"),t(r<67108864);for(var m=0,p=0;p<this.length;p++){var h=(this.words[p]|0)*r,T=(h&67108863)+(m&67108863);m>>=26,m+=h/67108864|0,m+=T>>>26,this.words[p]=T&67108863}return m!==0&&(this.words[p]=m,this.length++),this.length=r===0?1:this.length,u?this.ineg():this},o.prototype.muln=function(r){return this.clone().imuln(r)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(r){var u=P(r);if(u.length===0)return new o(1);for(var m=this,p=0;p<u.length&&u[p]===0;p++,m=m.sqr());if(++p<u.length)for(var h=m.sqr();p<u.length;p++,h=h.sqr())u[p]!==0&&(m=m.mul(h));return m},o.prototype.iushln=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26,p=67108863>>>26-u<<26-u,h;if(u!==0){var T=0;for(h=0;h<this.length;h++){var w=this.words[h]&p,f=(this.words[h]|0)-w<<u;this.words[h]=f|T,T=w>>>26-u}T&&(this.words[h]=T,this.length++)}if(m!==0){for(h=this.length-1;h>=0;h--)this.words[h+m]=this.words[h];for(h=0;h<m;h++)this.words[h]=0;this.length+=m}return this._strip()},o.prototype.ishln=function(r){return t(this.negative===0),this.iushln(r)},o.prototype.iushrn=function(r,u,m){t(typeof r=="number"&&r>=0);var p;u?p=(u-u%26)/26:p=0;var h=r%26,T=Math.min((r-h)/26,this.length),w=67108863^67108863>>>h<<h,f=m;if(p-=T,p=Math.max(0,p),f){for(var c=0;c<T;c++)f.words[c]=this.words[c];f.length=T}if(T!==0)if(this.length>T)for(this.length-=T,c=0;c<this.length;c++)this.words[c]=this.words[c+T];else this.words[0]=0,this.length=1;var g=0;for(c=this.length-1;c>=0&&(g!==0||c>=p);c--){var v=this.words[c]|0;this.words[c]=g<<26-h|v>>>h,g=v&w}return f&&g!==0&&(f.words[f.length++]=g),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},o.prototype.ishrn=function(r,u,m){return t(this.negative===0),this.iushrn(r,u,m)},o.prototype.shln=function(r){return this.clone().ishln(r)},o.prototype.ushln=function(r){return this.clone().iushln(r)},o.prototype.shrn=function(r){return this.clone().ishrn(r)},o.prototype.ushrn=function(r){return this.clone().iushrn(r)},o.prototype.testn=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26,p=1<<u;if(this.length<=m)return!1;var h=this.words[m];return!!(h&p)},o.prototype.imaskn=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26;if(t(this.negative===0,"imaskn works only with positive numbers"),this.length<=m)return this;if(u!==0&&m++,this.length=Math.min(m,this.length),u!==0){var p=67108863^67108863>>>u<<u;this.words[this.length-1]&=p}return this._strip()},o.prototype.maskn=function(r){return this.clone().imaskn(r)},o.prototype.iaddn=function(r){return t(typeof r=="number"),t(r<67108864),r<0?this.isubn(-r):this.negative!==0?this.length===1&&(this.words[0]|0)<=r?(this.words[0]=r-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(r),this.negative=1,this):this._iaddn(r)},o.prototype._iaddn=function(r){this.words[0]+=r;for(var u=0;u<this.length&&this.words[u]>=67108864;u++)this.words[u]-=67108864,u===this.length-1?this.words[u+1]=1:this.words[u+1]++;return this.length=Math.max(this.length,u+1),this},o.prototype.isubn=function(r){if(t(typeof r=="number"),t(r<67108864),r<0)return this.iaddn(-r);if(this.negative!==0)return this.negative=0,this.iaddn(r),this.negative=1,this;if(this.words[0]-=r,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var u=0;u<this.length&&this.words[u]<0;u++)this.words[u]+=67108864,this.words[u+1]-=1;return this._strip()},o.prototype.addn=function(r){return this.clone().iaddn(r)},o.prototype.subn=function(r){return this.clone().isubn(r)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(r,u,m){var p=r.length+m,h;this._expand(p);var T,w=0;for(h=0;h<r.length;h++){T=(this.words[h+m]|0)+w;var f=(r.words[h]|0)*u;T-=f&67108863,w=(T>>26)-(f/67108864|0),this.words[h+m]=T&67108863}for(;h<this.length-m;h++)T=(this.words[h+m]|0)+w,w=T>>26,this.words[h+m]=T&67108863;if(w===0)return this._strip();for(t(w===-1),w=0,h=0;h<this.length;h++)T=-(this.words[h]|0)+w,w=T>>26,this.words[h]=T&67108863;return this.negative=1,this._strip()},o.prototype._wordDiv=function(r,u){var m=this.length-r.length,p=this.clone(),h=r,T=h.words[h.length-1]|0,w=this._countBits(T);m=26-w,m!==0&&(h=h.ushln(m),p.iushln(m),T=h.words[h.length-1]|0);var f=p.length-h.length,c;if(u!=="mod"){c=new o(null),c.length=f+1,c.words=new Array(c.length);for(var g=0;g<c.length;g++)c.words[g]=0}var v=p.clone()._ishlnsubmul(h,1,f);v.negative===0&&(p=v,c&&(c.words[f]=1));for(var M=f-1;M>=0;M--){var O=(p.words[h.length+M]|0)*67108864+(p.words[h.length+M-1]|0);for(O=Math.min(O/T|0,67108863),p._ishlnsubmul(h,O,M);p.negative!==0;)O--,p.negative=0,p._ishlnsubmul(h,1,M),p.isZero()||(p.negative^=1);c&&(c.words[M]=O)}return c&&c._strip(),p._strip(),u!=="div"&&m!==0&&p.iushrn(m),{div:c||null,mod:p}},o.prototype.divmod=function(r,u,m){if(t(!r.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var p,h,T;return this.negative!==0&&r.negative===0?(T=this.neg().divmod(r,u),u!=="mod"&&(p=T.div.neg()),u!=="div"&&(h=T.mod.neg(),m&&h.negative!==0&&h.iadd(r)),{div:p,mod:h}):this.negative===0&&r.negative!==0?(T=this.divmod(r.neg(),u),u!=="mod"&&(p=T.div.neg()),{div:p,mod:T.mod}):(this.negative&r.negative)!==0?(T=this.neg().divmod(r.neg(),u),u!=="div"&&(h=T.mod.neg(),m&&h.negative!==0&&h.isub(r)),{div:T.div,mod:h}):r.length>this.length||this.cmp(r)<0?{div:new o(0),mod:this}:r.length===1?u==="div"?{div:this.divn(r.words[0]),mod:null}:u==="mod"?{div:null,mod:new o(this.modrn(r.words[0]))}:{div:this.divn(r.words[0]),mod:new o(this.modrn(r.words[0]))}:this._wordDiv(r,u)},o.prototype.div=function(r){return this.divmod(r,"div",!1).div},o.prototype.mod=function(r){return this.divmod(r,"mod",!1).mod},o.prototype.umod=function(r){return this.divmod(r,"mod",!0).mod},o.prototype.divRound=function(r){var u=this.divmod(r);if(u.mod.isZero())return u.div;var m=u.div.negative!==0?u.mod.isub(r):u.mod,p=r.ushrn(1),h=r.andln(1),T=m.cmp(p);return T<0||h===1&&T===0?u.div:u.div.negative!==0?u.div.isubn(1):u.div.iaddn(1)},o.prototype.modrn=function(r){var u=r<0;u&&(r=-r),t(r<=67108863);for(var m=(1<<26)%r,p=0,h=this.length-1;h>=0;h--)p=(m*p+(this.words[h]|0))%r;return u?-p:p},o.prototype.modn=function(r){return this.modrn(r)},o.prototype.idivn=function(r){var u=r<0;u&&(r=-r),t(r<=67108863);for(var m=0,p=this.length-1;p>=0;p--){var h=(this.words[p]|0)+m*67108864;this.words[p]=h/r|0,m=h%r}return this._strip(),u?this.ineg():this},o.prototype.divn=function(r){return this.clone().idivn(r)},o.prototype.egcd=function(r){t(r.negative===0),t(!r.isZero());var u=this,m=r.clone();u.negative!==0?u=u.umod(r):u=u.clone();for(var p=new o(1),h=new o(0),T=new o(0),w=new o(1),f=0;u.isEven()&&m.isEven();)u.iushrn(1),m.iushrn(1),++f;for(var c=m.clone(),g=u.clone();!u.isZero();){for(var v=0,M=1;(u.words[0]&M)===0&&v<26;++v,M<<=1);if(v>0)for(u.iushrn(v);v-- >0;)(p.isOdd()||h.isOdd())&&(p.iadd(c),h.isub(g)),p.iushrn(1),h.iushrn(1);for(var O=0,B=1;(m.words[0]&B)===0&&O<26;++O,B<<=1);if(O>0)for(m.iushrn(O);O-- >0;)(T.isOdd()||w.isOdd())&&(T.iadd(c),w.isub(g)),T.iushrn(1),w.iushrn(1);u.cmp(m)>=0?(u.isub(m),p.isub(T),h.isub(w)):(m.isub(u),T.isub(p),w.isub(h))}return{a:T,b:w,gcd:m.iushln(f)}},o.prototype._invmp=function(r){t(r.negative===0),t(!r.isZero());var u=this,m=r.clone();u.negative!==0?u=u.umod(r):u=u.clone();for(var p=new o(1),h=new o(0),T=m.clone();u.cmpn(1)>0&&m.cmpn(1)>0;){for(var w=0,f=1;(u.words[0]&f)===0&&w<26;++w,f<<=1);if(w>0)for(u.iushrn(w);w-- >0;)p.isOdd()&&p.iadd(T),p.iushrn(1);for(var c=0,g=1;(m.words[0]&g)===0&&c<26;++c,g<<=1);if(c>0)for(m.iushrn(c);c-- >0;)h.isOdd()&&h.iadd(T),h.iushrn(1);u.cmp(m)>=0?(u.isub(m),p.isub(h)):(m.isub(u),h.isub(p))}var v;return u.cmpn(1)===0?v=p:v=h,v.cmpn(0)<0&&v.iadd(r),v},o.prototype.gcd=function(r){if(this.isZero())return r.abs();if(r.isZero())return this.abs();var u=this.clone(),m=r.clone();u.negative=0,m.negative=0;for(var p=0;u.isEven()&&m.isEven();p++)u.iushrn(1),m.iushrn(1);do{for(;u.isEven();)u.iushrn(1);for(;m.isEven();)m.iushrn(1);var h=u.cmp(m);if(h<0){var T=u;u=m,m=T}else if(h===0||m.cmpn(1)===0)break;u.isub(m)}while(!0);return m.iushln(p)},o.prototype.invm=function(r){return this.egcd(r).a.umod(r)},o.prototype.isEven=function(){return(this.words[0]&1)===0},o.prototype.isOdd=function(){return(this.words[0]&1)===1},o.prototype.andln=function(r){return this.words[0]&r},o.prototype.bincn=function(r){t(typeof r=="number");var u=r%26,m=(r-u)/26,p=1<<u;if(this.length<=m)return this._expand(m+1),this.words[m]|=p,this;for(var h=p,T=m;h!==0&&T<this.length;T++){var w=this.words[T]|0;w+=h,h=w>>>26,w&=67108863,this.words[T]=w}return h!==0&&(this.words[T]=h,this.length++),this},o.prototype.isZero=function(){return this.length===1&&this.words[0]===0},o.prototype.cmpn=function(r){var u=r<0;if(this.negative!==0&&!u)return-1;if(this.negative===0&&u)return 1;this._strip();var m;if(this.length>1)m=1;else{u&&(r=-r),t(r<=67108863,"Number is too big");var p=this.words[0]|0;m=p===r?0:p<r?-1:1}return this.negative!==0?-m|0:m},o.prototype.cmp=function(r){if(this.negative!==0&&r.negative===0)return-1;if(this.negative===0&&r.negative!==0)return 1;var u=this.ucmp(r);return this.negative!==0?-u|0:u},o.prototype.ucmp=function(r){if(this.length>r.length)return 1;if(this.length<r.length)return-1;for(var u=0,m=this.length-1;m>=0;m--){var p=this.words[m]|0,h=r.words[m]|0;if(p!==h){p<h?u=-1:p>h&&(u=1);break}}return u},o.prototype.gtn=function(r){return this.cmpn(r)===1},o.prototype.gt=function(r){return this.cmp(r)===1},o.prototype.gten=function(r){return this.cmpn(r)>=0},o.prototype.gte=function(r){return this.cmp(r)>=0},o.prototype.ltn=function(r){return this.cmpn(r)===-1},o.prototype.lt=function(r){return this.cmp(r)===-1},o.prototype.lten=function(r){return this.cmpn(r)<=0},o.prototype.lte=function(r){return this.cmp(r)<=0},o.prototype.eqn=function(r){return this.cmpn(r)===0},o.prototype.eq=function(r){return this.cmp(r)===0},o.red=function(r){return new V(r)},o.prototype.toRed=function(r){return t(!this.red,"Already a number in reduction context"),t(this.negative===0,"red works only with positives"),r.convertTo(this)._forceRed(r)},o.prototype.fromRed=function(){return t(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(r){return this.red=r,this},o.prototype.forceRed=function(r){return t(!this.red,"Already a number in reduction context"),this._forceRed(r)},o.prototype.redAdd=function(r){return t(this.red,"redAdd works only with red numbers"),this.red.add(this,r)},o.prototype.redIAdd=function(r){return t(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,r)},o.prototype.redSub=function(r){return t(this.red,"redSub works only with red numbers"),this.red.sub(this,r)},o.prototype.redISub=function(r){return t(this.red,"redISub works only with red numbers"),this.red.isub(this,r)},o.prototype.redShl=function(r){return t(this.red,"redShl works only with red numbers"),this.red.shl(this,r)},o.prototype.redMul=function(r){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,r),this.red.mul(this,r)},o.prototype.redIMul=function(r){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,r),this.red.imul(this,r)},o.prototype.redSqr=function(){return t(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return t(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return t(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return t(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return t(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(r){return t(this.red&&!r.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,r)};var Le={k256:null,p224:null,p192:null,p25519:null};function Wt(y,r){this.name=y,this.p=new o(r,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}Wt.prototype._tmp=function(){var r=new o(null);return r.words=new Array(Math.ceil(this.n/13)),r},Wt.prototype.ireduce=function(r){var u=r,m;do this.split(u,this.tmp),u=this.imulK(u),u=u.iadd(this.tmp),m=u.bitLength();while(m>this.n);var p=m<this.n?-1:u.ucmp(this.p);return p===0?(u.words[0]=0,u.length=1):p>0?u.isub(this.p):u.strip!==void 0?u.strip():u._strip(),u},Wt.prototype.split=function(r,u){r.iushrn(this.n,0,u)},Wt.prototype.imulK=function(r){return r.imul(this.k)};function dn(){Wt.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}n(dn,Wt),dn.prototype.split=function(r,u){for(var m=4194303,p=Math.min(r.length,9),h=0;h<p;h++)u.words[h]=r.words[h];if(u.length=p,r.length<=9){r.words[0]=0,r.length=1;return}var T=r.words[9];for(u.words[u.length++]=T&m,h=10;h<r.length;h++){var w=r.words[h]|0;r.words[h-10]=(w&m)<<4|T>>>22,T=w}T>>>=22,r.words[h-10]=T,T===0&&r.length>10?r.length-=10:r.length-=9},dn.prototype.imulK=function(r){r.words[r.length]=0,r.words[r.length+1]=0,r.length+=2;for(var u=0,m=0;m<r.length;m++){var p=r.words[m]|0;u+=p*977,r.words[m]=u&67108863,u=p*64+(u/67108864|0)}return r.words[r.length-1]===0&&(r.length--,r.words[r.length-1]===0&&r.length--),r};function ss(){Wt.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(ss,Wt);function cs(){Wt.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n(cs,Wt);function Yi(){Wt.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n(Yi,Wt),Yi.prototype.imulK=function(r){for(var u=0,m=0;m<r.length;m++){var p=(r.words[m]|0)*19+u,h=p&67108863;p>>>=26,r.words[m]=h,u=p}return u!==0&&(r.words[r.length++]=u),r},o._prime=function(r){if(Le[r])return Le[r];var u;if(r==="k256")u=new dn;else if(r==="p224")u=new ss;else if(r==="p192")u=new cs;else if(r==="p25519")u=new Yi;else throw new Error("Unknown prime "+r);return Le[r]=u,u};function V(y){if(typeof y=="string"){var r=o._prime(y);this.m=r.p,this.prime=r}else t(y.gtn(1),"modulus must be greater than 1"),this.m=y,this.prime=null}V.prototype._verify1=function(r){t(r.negative===0,"red works only with positives"),t(r.red,"red works only with red numbers")},V.prototype._verify2=function(r,u){t((r.negative|u.negative)===0,"red works only with positives"),t(r.red&&r.red===u.red,"red works only with red numbers")},V.prototype.imod=function(r){return this.prime?this.prime.ireduce(r)._forceRed(this):(b(r,r.umod(this.m)._forceRed(this)),r)},V.prototype.neg=function(r){return r.isZero()?r.clone():this.m.sub(r)._forceRed(this)},V.prototype.add=function(r,u){this._verify2(r,u);var m=r.add(u);return m.cmp(this.m)>=0&&m.isub(this.m),m._forceRed(this)},V.prototype.iadd=function(r,u){this._verify2(r,u);var m=r.iadd(u);return m.cmp(this.m)>=0&&m.isub(this.m),m},V.prototype.sub=function(r,u){this._verify2(r,u);var m=r.sub(u);return m.cmpn(0)<0&&m.iadd(this.m),m._forceRed(this)},V.prototype.isub=function(r,u){this._verify2(r,u);var m=r.isub(u);return m.cmpn(0)<0&&m.iadd(this.m),m},V.prototype.shl=function(r,u){return this._verify1(r),this.imod(r.ushln(u))},V.prototype.imul=function(r,u){return this._verify2(r,u),this.imod(r.imul(u))},V.prototype.mul=function(r,u){return this._verify2(r,u),this.imod(r.mul(u))},V.prototype.isqr=function(r){return this.imul(r,r.clone())},V.prototype.sqr=function(r){return this.mul(r,r)},V.prototype.sqrt=function(r){if(r.isZero())return r.clone();var u=this.m.andln(3);if(t(u%2===1),u===3){var m=this.m.add(new o(1)).iushrn(2);return this.pow(r,m)}for(var p=this.m.subn(1),h=0;!p.isZero()&&p.andln(1)===0;)h++,p.iushrn(1);t(!p.isZero());var T=new o(1).toRed(this),w=T.redNeg(),f=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new o(2*c*c).toRed(this);this.pow(c,f).cmp(w)!==0;)c.redIAdd(w);for(var g=this.pow(c,p),v=this.pow(r,p.addn(1).iushrn(1)),M=this.pow(r,p),O=h;M.cmp(T)!==0;){for(var B=M,N=0;B.cmp(T)!==0;N++)B=B.redSqr();t(N<O);var L=this.pow(g,new o(1).iushln(O-N-1));v=v.redMul(L),g=L.redSqr(),M=M.redMul(g),O=N}return v},V.prototype.invm=function(r){var u=r._invmp(this.m);return u.negative!==0?(u.negative=0,this.imod(u).redNeg()):this.imod(u)},V.prototype.pow=function(r,u){if(u.isZero())return new o(1).toRed(this);if(u.cmpn(1)===0)return r.clone();var m=4,p=new Array(1<<m);p[0]=new o(1).toRed(this),p[1]=r;for(var h=2;h<p.length;h++)p[h]=this.mul(p[h-1],r);var T=p[0],w=0,f=0,c=u.bitLength()%26;for(c===0&&(c=26),h=u.length-1;h>=0;h--){for(var g=u.words[h],v=c-1;v>=0;v--){var M=g>>v&1;if(T!==p[0]&&(T=this.sqr(T)),M===0&&w===0){f=0;continue}w<<=1,w|=M,f++,!(f!==m&&(h!==0||v!==0))&&(T=this.mul(T,p[w]),f=0,w=0)}c=26}return T},V.prototype.convertTo=function(r){var u=r.umod(this.m);return u===r?u.clone():u},V.prototype.convertFrom=function(r){var u=r.clone();return u.red=null,u},o.mont=function(r){return new fe(r)};function fe(y){V.call(this,y),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}n(fe,V),fe.prototype.convertTo=function(r){return this.imod(r.ushln(this.shift))},fe.prototype.convertFrom=function(r){var u=this.imod(r.mul(this.rinv));return u.red=null,u},fe.prototype.imul=function(r,u){if(r.isZero()||u.isZero())return r.words[0]=0,r.length=1,r;var m=r.imul(u),p=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(p).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},fe.prototype.mul=function(r,u){if(r.isZero()||u.isZero())return new o(0)._forceRed(this);var m=r.mul(u),p=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(p).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},fe.prototype.invm=function(r){var u=this.imod(r._invmp(this.m).mul(this.r2));return u._forceRed(this)}})(typeof as>"u"||as,Dl)});import{TransactionType as mu}from"@msafe/sui3-utils";import{coinsList as nu,poolIdPoolNameMap as ou,poolInfo as vs,singleAssetPoolCoinMap as au}from"@alphafi/alphafi-sdk";import{TransactionType as je}from"@msafe/sui3-utils";import{bcs as fn,fromBase64 as hn}from"@mysten/bcs";var gn=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isClaimRewardTransaction())return this.decodeClaimReward();let e=this.getLiquidityChangeEvent();if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson,n=t.pool_id,o=ou[n];if(console.log("Decoder event data - ",t),console.log("Decoder poolName - ",o),this.isWithdrawAlphaEvent(e))return this.decodeWithdrawAlpha(t);if(this.isWithdrawEvent(t))return this.decodeWithdraw(o);if(this.isDoubleAssetDepositEvent(t,o))return this.decodeDoubleAssetDeposit(o,t);if(this.isSingleAssetDepositEvent(t,o))return this.decodeSingleAssetDeposit(o,t);throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getLiquidityChangeEvent(){return this.simResult.events.find(e=>this.isLiquidityChangeEventType(e.type))}isClaimRewardTransaction(){return!!this.getMoveCallCommand("get_user_rewards_all")}isLiquidityChangeEventType(e){return e.includes("LiquidityChangeEvent")||e.includes("LiquidityChangeNewNewEvent")||e.includes("WithdrawEventV2")}isWithdrawAlphaEvent(e){return e.type.includes("WithdrawEventV2")}isWithdrawEvent(e){return e.event_type===1}isDoubleAssetDepositEvent(e,t){return e.event_type===0&&vs[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&vs[t].assetTypes.length===1}extractXTokensAmount(){let e=this.inputs.find(o=>o.Pure!==void 0);if(!e||!e.Pure?.bytes)throw new Error("Unable to extract xTokensAmount from inputs");let{bytes:t}=e.Pure,n;return t.length===12?n=fn.u64().parse(hn(t)):t.length===24?n=fn.u128().parse(hn(t)):t.length===44?n=fn.u256().parse(hn(t)):n=fn.u64().parse(hn(t)),n}decodeDoubleAssetDeposit(e,t){let{amount_a:n,amount_b:o}=t,i=Number(n)>0;return console.log("Decoder.decodeDoubleAssetDeposit",n,o,i),{txType:je.Other,type:"depositDoubleAsset",intentionData:{poolName:e,amount:i?n:o,isAmountA:i}}}decodeSingleAssetDeposit(e,t){let{amount:n}=t;if(console.log("Decoder.decodeSingleAssetDeposit",n),this.getLiquidityChangeEvent().type.includes(":alphafi_navi_pool:")){let{coin:i}=au[e],{expo:s}=nu[i];n=Math.floor(Number(n)/10**(9-s)).toString()}return{txType:je.Other,type:"depositSingleAsset",intentionData:{poolName:e,amount:n}}}decodeWithdraw(e){let t=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",t),{txType:je.Other,type:"withdraw",intentionData:{poolName:e,xTokensAmount:t}}}decodeWithdrawAlpha(e){let t=this.extractXTokensAmount(),{amount_withdrawn_from_locked:n}=e;return console.log("Decoder.decodeWithdrawAlpha",t,n),{txType:je.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:t}}}decodeClaimReward(){return{txType:je.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as ru}from"@alphafi/alphafi-sdk";import iu from"sort-keys-recursive";var S=class{constructor(e){this.data=e}serialize(){return JSON.stringify(iu(this.data))}};var yn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t;return await ru(n.address)}static fromData(t){return new a(t)}};import{depositDoubleAssetTxb as su}from"@alphafi/alphafi-sdk";var bn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i,isAmountA:s}=this.data;return await su(o,n.address,i,s)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new a(t)}};import{depositSingleAssetTxb as cu}from"@alphafi/alphafi-sdk";var Tn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i}=this.data;return await cu(o,n.address,i)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new a(t)}};import{withdrawTxb as lu}from"@alphafi/alphafi-sdk";var Sn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:i}=this.data;return await lu(i,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};import{withdrawAlphaTxb as uu}from"@alphafi/alphafi-sdk";var In=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:i}=this.data;return await uu(i,o,n.address)}static fromData(t){return console.log("WithdrawAlphaIntention.fromData",t),new a(t)}};var wn=class{application="alphafi";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n,account:o}=e,i=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("AlphaFiHelper Sim result - ",i);let l=new gn(t,i).decode();return{txType:mu.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{account:t}=e;console.log("AlphaFi build transaction type",e.txSubType);let n;switch(e.txSubType){case"depositSingleAsset":n=Tn.fromData(e.intentionData);break;case"depositDoubleAsset":n=bn.fromData(e.intentionData);break;case"withdraw":n=Sn.fromData(e.intentionData);break;case"withdrawAlpha":n=In.fromData(e.intentionData);break;case"claimReward":n=yn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return n.build({account:t})}};import{TransactionType as Eu}from"@msafe/sui3-utils";import{TransactionType as jt}from"@msafe/sui3-utils";import{bcs as Tr}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as Sr}from"bucket-protocol-sdk";var Cn=class{constructor(e){this.transaction=e}decode(){if(this.isSBUCKDepositTransaction())return this.decodeSBUCKDeposit();if(this.isSBUCKUnstakeTransaction())return this.decodeSBUCKUnstake();if(this.isSBUCKWithdrawTransaction())return this.decodeSBUCKWithdraw();if(this.isSBUCKClaimTransaction())return this.decodeSBUCKClaim();if(this.isLockedClaimTransaction())return this.decodeLockedClaim();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isCloseTransaction())return this.decodeClose();if(this.isTankDepositTransaction())return this.decodeTankDeposit();if(this.isTankWithdrawTransaction())return this.decodeTankWithdraw();if(this.isTankClaimTransaction())return this.decodeTankClaim();if(this.isPsmTransaction())return this.decodePsm();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getMoveCallModuleCommand(e,t){return this.commands.find(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getMoveCallPackageModuleCommand(e,t,n){return this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.package===e&&o.MoveCall.module===t&&o.MoveCall.function===n)}getMoveCallModuleCommands(e,t){return this.commands.filter(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getSplitCoinsCommands(){return this.commands.filter(e=>e.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(e=>e.$kind==="TransferObjects")}isPsmTransaction(){return!!this.getMoveCallCommand("charge_reservoir")||!!this.getMoveCallCommand("discharge_reservoir")}isStrapNewTransaction(){return!!this.getMoveCallModuleCommand("strap","new")}isBorrowTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","high_top_up")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow_with_strap")}isRepayTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","fully_repay")||!!this.getMoveCallModuleCommand("bucket_operations","fully_repay_with_strap")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw_with_strap")}isWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","withdraw")||!!this.getMoveCallModuleCommand("buck","withdraw_with_strap")}isCloseTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","destroy_empty_strap")}isTankDepositTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","deposit")}isTankWithdrawTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","withdraw")}isTankClaimTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","claim")}isSBUCKDepositTransaction(){return!!this.getMoveCallModuleCommand("buck","buck_to_sbuck")}isSBUCKWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","sbuck_to_buck")}isSBUCKStakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Sr,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Sr,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(Sr,"fountain_core","claim")}isLockedClaimTransaction(){return!!this.getMoveCallModuleCommand("proof_rule","claim")||!!this.getMoveCallModuleCommand("lst_proof_rule","claim")}isLstUnlockTransaction(){return!!this.getMoveCallModuleCommand("lst_proof_rule","unlock")}decodePsm(){let e,t,n="0",o=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return o.$kind==="Input"&&(n=this.getPureInputU64(o.Input)),this.getMoveCallCommand("charge_reservoir")?([e]=this.getMoveCallCommand("charge_reservoir").MoveCall.typeArguments,t=!1):([e]=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments,t=!0),console.log("Decoder.decodePsm",e,n,t),{txType:jt.Other,type:"psm",intentionData:{coinType:e,amount:n,buckToCoin:t}}}decodeBorrow(){let e="",t="0",n,o=this.getStrapId(),i="0",s=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];if(s.$kind==="Input"&&(i=this.getPureInputU64(s.Input)),this.getMoveCallCommand("high_top_up")){let l=this.getMoveCallCommand("high_top_up").MoveCall;[e]=l.typeArguments;let d=l.arguments[1];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let b=l.arguments[3];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([n]=I)}}else if(this.getMoveCallCommand("high_borrow")){let l=this.getMoveCallCommand("high_borrow").MoveCall;[e]=l.typeArguments;let d=l.arguments[4];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let b=l.arguments[5];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([n]=I)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let l=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[e]=l.typeArguments;let d=l.arguments[5];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let b=l.arguments[6];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([n]=I)}}return{txType:jt.Other,type:"borrow",intentionData:{collateralType:e,collateralAmount:i,borrowAmount:t,insertionPlace:n,strapId:o}}}decodeRepay(){let e="",t="0",n="0",i,s=this.getStrapId();if(this.getMoveCallCommand("fully_repay"))[e]=this.getMoveCallCommand("fully_repay").MoveCall.typeArguments;else if(this.getMoveCallCommand("fully_repay_with_strap"))[e]=this.getMoveCallCommand("fully_repay_with_strap").MoveCall.typeArguments;else if(this.getMoveCallCommand("repay_and_withdraw")){let l=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[e]=l.typeArguments;let d=l.arguments[4];d.$kind==="Input"&&(n=this.getPureInputU64(d.Input));let b=l.arguments[5];if(b.$kind==="Input"){let C=this.getPureAddresses(b.Input);C.length===1&&([i]=C)}let I=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];I.$kind==="Input"&&(t=this.getPureInputU64(I.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let l=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[e]=l.typeArguments;let d=l.arguments[5];d.$kind==="Input"&&(n=this.getPureInputU64(d.Input));let b=l.arguments[6];if(b.$kind==="Input"){let C=this.getPureAddresses(b.Input);C.length===1&&([i]=C)}let I=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];I.$kind==="Input"&&(t=this.getPureInputU64(I.Input))}return{txType:jt.Other,type:"repay",intentionData:{collateralType:e,repayAmount:t,withdrawAmount:n,isSurplus:!1,insertionPlace:i,strapId:s}}}decodeWithdraw(){let e="",t="0",n,o=this.getStrapId();if(this.getMoveCallCommand("withdraw_with_strap")){let i=this.getMoveCallCommand("withdraw_with_strap").MoveCall;[e]=i.typeArguments;let s=i.arguments[4];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let l=i.arguments[5];if(l.$kind==="Input"){let d=this.getPureAddresses(l.Input);d.length===1&&([n]=d)}}else if(this.getMoveCallCommand("withdraw")){let i=this.getMoveCallCommand("withdraw").MoveCall;[e]=i.typeArguments;let s=i.arguments[3];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let l=i.arguments[4];if(l.$kind==="Input"){let d=this.getPureAddresses(l.Input);d.length===1&&([n]=d)}}return{txType:jt.Other,type:"withdraw",intentionData:{collateralType:e,withdrawAmount:t,insertionPlace:n,strapId:o}}}decodeClose(){let e="",t=this.getStrapId();return this.getMoveCallCommand("destroy_empty_strap")&&([e]=this.getMoveCallCommand("destroy_empty_strap").MoveCall.typeArguments),{txType:jt.Other,type:"close",intentionData:{collateralType:e,strapId:t}}}decodeSBUCKDeposit(){let t=this.getMoveCallCommand("into_balance").MoveCall.typeArguments[0],n="0",i=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];i.$kind==="Input"&&(n=this.getPureInputU64(i.Input));let s=this.isSBUCKStakeTransaction();return console.log("Decoder.decodeSBUCKDeposit",t,n,s),{txType:jt.Other,type:"sbuck-deposit",intentionData:{coinType:t,amount:n,isStake:s}}}decodeSBUCKUnstake(){let e="0",t=this.isSBUCKStakeTransaction();if(t){let d=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];d.$kind==="Input"&&(e=this.getPureInputU64(d.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let l=0;l<o.length;l++){let d=o[l];n.push("")}else{let l=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let d=0;d<l.length;d++){let I=l[d].MoveCall.arguments[2];if(I.$kind==="Input"){let{objectId:C}=this.inputs[I.Input].UnresolvedObject;n.push(C)}}}let i=this.isSBUCKWithdrawTransaction(),s={stakeProofs:n,amount:e,isStake:t,toBuck:i};return console.log("Decoder.decodeSBUCKUnstake",s),{txType:jt.Other,type:"sbuck-unstake",intentionData:s}}decodeSBUCKWithdraw(){let e="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return n.$kind==="Input"&&(e=this.getPureInputU64(n.Input)),console.log("Decoder.SBUCKWithdraw",e),{txType:jt.Other,type:"sbuck-withdraw",intentionData:{amount:e}}}decodeSBUCKClaim(){let e=[],t=this.getMoveCallModuleCommands("fountain_core","claim");for(let n=0;n<t.length;n++){let i=t[n].MoveCall.arguments[2];if(i.$kind==="Input"){let{objectId:s}=this.inputs[i.Input].UnresolvedObject;e.push(s)}}return console.log("Decoder.decodeSBUCKClaim",e),{txType:jt.Other,type:"sbuck-claim",intentionData:{stakeProofs:e}}}decodeTankDeposit(){let e="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];n.$kind==="Input"&&(e=this.getPureInputU64(n.Input));let i=this.getMoveCallModuleCommand("tank_operations","deposit").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankDeposit",i,e),{txType:jt.Other,type:"tank-deposit",intentionData:{coinType:i,amount:e}}}decodeTankWithdraw(){let e=this.getMoveCallModuleCommand("tank_operations","withdraw").MoveCall,t=e.typeArguments[0],n="0",o=e.arguments[5];return o.$kind==="Input"&&(n=this.getPureInputU64(o.Input)),console.log("Decoder.decodeTankWithdraw",t,n),{txType:jt.Other,type:"tank-withdraw",intentionData:{coinType:t,amount:n}}}decodeTankClaim(){let t=this.getMoveCallModuleCommand("tank_operations","claim").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankClaim",t),{txType:jt.Other,type:"tank-claim",intentionData:{coinType:t}}}decodeLockedClaim(){let e="",t=0,n=this.getMoveCallModuleCommands("proof_rule","claim");for(let i=0;i<n.length;i++)[e]=n[i].MoveCall.typeArguments,t++;let o=this.getMoveCallModuleCommands("lst_proof_rule","claim");for(let i=0;i<o.length;i++)[e]=o[i].MoveCall.typeArguments,t++;return console.log("Decoder.decodeLockedClaim",e,t),{txType:jt.Other,type:"lock-claim",intentionData:{coinType:e,proofCount:t}}}getCoinInput(e){if(this.inputs[e].$kind!=="Object")throw new Error("not Object argument")}getStrapId(){let e;if(this.isStrapNewTransaction()?e="new":this.isLstUnlockTransaction()&&(e="locked"),!e){let t=this.getMoveCallModuleCommand("fountain","unstake");if(t){let n=t.MoveCall.arguments[2];n.$kind==="Input"&&(e=this.inputs[n.Input].UnresolvedObject.objectId)}}return e}getPureInputU64(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return Tr.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return Tr.vector(Tr.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as hu}from"@msafe/sui3-utils";import{Transaction as du}from"@mysten/sui/transactions";import{buildPsmTx as fu}from"bucket-protocol-sdk";import{BucketClient as pu}from"bucket-protocol-sdk";var Ot=(a,e)=>{let t=a==="sui:mainnet"?"mainnet":"testnet";return new pu(t,e.address)};var As=async(a,e,t)=>{let{coinType:n,amount:o,buckToCoin:i}=a,s=new du,l=Ot(t,e);return await fu(l,s,n,o,i,e.address),s};var xn=class a extends S{constructor(t){super(t);this.data=t}txType=hu.Other;txSubType="psm";async build(t){let{account:n,network:o}=t;return await As(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Su}from"@msafe/sui3-utils";import{Transaction as Dn}from"@mysten/sui/transactions";import{buildBorrowTx as gu,buildCloseTx as yu,buildRepayTx as bu,buildWithdrawTx as Tu}from"bucket-protocol-sdk";var Ms=async(a,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:i,insertionPlace:s,strapId:l}=a,d=new Dn,b=Ot(t,e);return await gu(b,d,n,o,i,e.address,s,l),d},Os=async(a,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:i,strapId:s}=a,l=new Dn,d=Ot(t,e);return await Tu(d,l,n,o,e.address,i,s),l},Ps=async(a,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:i,isSurplus:s,insertionPlace:l,strapId:d}=a,b=new Dn,I=Ot(t,e);return await bu(I,b,n,o,i,e.address,s,l,d),b},Rs=async(a,e,t)=>{let{collateralType:n,recipient:o,strapId:i}=a,s=new Dn,l=Ot(t,e);return await yu(l,s,n,o,i),s};var kn=class a extends S{constructor(t){super(t);this.data=t}txType=Su.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await Ms(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Iu}from"@msafe/sui3-utils";var vn=class a extends S{constructor(t){super(t);this.data=t}txType=Iu.Other;txSubType="repay";async build(t){let{account:n,network:o}=t;return await Ps(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as wu}from"@msafe/sui3-utils";var An=class a extends S{constructor(t){super(t);this.data=t}txType=wu.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await Os(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Cu}from"@msafe/sui3-utils";var Mn=class a extends S{constructor(t){super(t);this.data=t}txType=Cu.Other;txSubType="close";async build(t){let{account:n,network:o}=t;return await Rs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Wn}from"@msafe/sui3-utils";import{Transaction as On}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as xu,buildSBUCKDepositTx as Du,buildSBUCKUnstakeTx as ku,buildSBUCKWithdrawTx as vu}from"bucket-protocol-sdk";var Bs=async(a,e,t)=>{let{coinType:n,amount:o,isStake:i}=a,s=new On,l=Ot(t,e);return await Du(l,s,n,o,e.address,i),s},Es=async(a,e,t)=>{let{stakeProofs:n,amount:o,isStake:i,toBuck:s}=a,l=new On,d=Ot(t,e);return await ku(d,l,n,o,e.address,i,s),l},Ws=async(a,e,t)=>{let{amount:n}=a,o=new On,i=Ot(t,e);return await vu(i,o,n,e.address),o},Ns=async(a,e,t)=>{let{stakeProofs:n}=a,o=new On,i=Ot(t,e);return await xu(i,o,n,e.address),o};var Pn=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await Bs(this.data,n,o)}static fromData(t){return new a(t)}},Rn=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await Es(this.data,n,o)}static fromData(t){return new a(t)}},Bn=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await Ws(this.data,n,o)}static fromData(t){return new a(t)}},En=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-claim";async build(t){let{account:n,network:o}=t;return await Ns(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as wr}from"@msafe/sui3-utils";import{Transaction as Ir}from"@mysten/sui/transactions";import{buildTankClaimTx as Au,buildTankDepositTx as Mu,buildTankWithdrawTx as Ou}from"bucket-protocol-sdk";var _s=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Ir,s=Ot(t,e);return await Mu(s,i,n,o,e.address),i},Ls=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Ir,s=Ot(t,e);return await Ou(s,i,n,o,e.address),i},js=async(a,e,t)=>{let{coinType:n}=a,o=new Ir,i=Ot(t,e);return await Au(i,o,n,e.address),o};import{Transaction as Pu}from"@mysten/sui/transactions";import{buildLockedClaimTx as Ru}from"bucket-protocol-sdk";var Us=async(a,e,t)=>{let{coinType:n,proofCount:o}=a,i=new Pu,s=Ot(t,e);return await Ru(s,i,n,o,e.address),i};var Nn=class a extends S{constructor(t){super(t);this.data=t}txType=wr.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await _s(this.data,n,o)}static fromData(t){return new a(t)}},_n=class a extends S{constructor(t){super(t);this.data=t}txType=wr.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await Ls(this.data,n,o)}static fromData(t){return new a(t)}},Ln=class a extends S{constructor(t){super(t);this.data=t}txType=wr.Other;txSubType="tank-claim";async build(t){let{account:n,network:o}=t;return await js(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Bu}from"@msafe/sui3-utils";var jn=class a extends S{constructor(t){super(t);this.data=t}txType=Bu.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await Us(this.data,n,o)}static fromData(t){return new a(t)}};var Un=class{application="bucket";supportSDK="@mysten/sui";async deserialize(e){console.log("Bucket helper deserialize input: ",e);let{transaction:t}=e,o=new Cn(t).decode();return{txType:Eu.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e,i;switch(e.txSubType){case"psm":i=xn.fromData(e.intentionData);break;case"borrow":i=kn.fromData(e.intentionData);break;case"withdraw":i=An.fromData(e.intentionData);break;case"repay":i=vn.fromData(e.intentionData);break;case"close":i=Mn.fromData(e.intentionData);break;case"tank-deposit":i=Nn.fromData(e.intentionData);break;case"tank-withdraw":i=_n.fromData(e.intentionData);break;case"tank-claim":i=Ln.fromData(e.intentionData);break;case"sbuck-deposit":i=Pn.fromData(e.intentionData);break;case"sbuck-unstake":i=Rn.fromData(e.intentionData);break;case"sbuck-withdraw":i=Bn.fromData(e.intentionData);break;case"sbuck-claim":i=En.fromData(e.intentionData);break;case"lock-claim":i=jn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Im}from"@msafe/sui3-utils";import{TransactionType as Fu}from"@msafe/sui3-utils";import{AggregatorClient as Wu,Env as Nu}from"@cetusprotocol/aggregator-sdk";import{CetusFarmsSDK as _u}from"@cetusprotocol/farms-sdk";import{CetusClmmSDK as Lu}from"@cetusprotocol/sui-clmm-sdk";import{CetusVaultsSDK as ju}from"@cetusprotocol/vaults-sdk";import{CetusXcetusSDK as Uu}from"@cetusprotocol/xcetus-sdk";import{SuiClient as Cr,getFullnodeUrl as qs}from"@mysten/sui/client";var Gt=(a,e)=>{let t=Lu.createSDK({env:"mainnet",sui_client:new Cr({url:qs("mainnet")})});return t.setSenderAddress(e.address),t},Ut=(a,e)=>{let t=_u.createSDK({env:"mainnet",sui_client:new Cr({url:qs("mainnet")})});return t.setSenderAddress(e.address),t},qu="https://api-sui.cetus.zone/router_v2/find_routes",Fs=(a,e)=>{let t=new Cr({url:"https://fullnode.mainnet.sui.io/"});return new Wu({endpoint:qu,signer:e.address,client:t,env:Nu.Mainnet})},Ue=(a,e)=>{let t=ju.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t},Ie=(a,e)=>{let t=Uu.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t};var Ks=async(a,e,t)=>await Gt(t,e).Pool.createPoolPayload(a),Vs=async(a,e,t)=>await Gt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),$s=async(a,e,t)=>await Gt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Hs=async(a,e,t)=>await Gt(t,e).Position.closePositionPayload(a),Xs=async(a,e,t)=>await Gt(t,e).Position.removeLiquidityPayload(a),zs=async(a,e,t)=>await Gt(t,e).Rewarder.collectRewarderPayload(a);var qn=class a extends S{constructor(t){super(t);this.data=t}txType=Fu.Other;txSubType="OpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Vs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ku}from"@msafe/sui3-utils";var Fn=class a extends S{constructor(t){super(t);this.data=t}txType=Ku.Other;txSubType="ClaimFeeAndMining";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await zs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Vu}from"@msafe/sui3-utils";var Kn=class a extends S{constructor(t){super(t);this.data=t}txType=Vu.Other;txSubType="CreatePool";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Ks(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as $u}from"@msafe/sui3-utils";var Vn=class a extends S{constructor(t){super(t);this.data=t}txType=$u.Other;txSubType="DecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Xs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Hu}from"@msafe/sui3-utils";var Gs=async(a,e,t)=>await Ut(t,e).Farms.openPositionAddLiquidityStakePayload(a),Qs=async(a,e,t)=>await Ut(t,e).Farms.addLiquidityFixCoinPayload(a),Js=async(a,e,t)=>await Ut(t,e).Farms.removeLiquidityPayload(a),Ys=async(a,e,t)=>await Ut(t,e).Farms.removeLiquidityPayload(a),Zs=async(a,e,t)=>await Ut(t,e).Farms.claimFeeAndClmmReward(a),tc=async(a,e,t)=>await Ut(t,e).Farms.harvestPayload(a),ec=async(a,e,t)=>{let n=Ut(t,e),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},nc=async(a,e,t)=>await Ut(t,e).Farms.depositPayload(a),oc=async(a,e,t)=>await Ut(t,e).Farms.withdrawPayload(a);var $n=class a extends S{constructor(t){super(t);this.data=t}txType=Hu.Other;txSubType="FarmingOpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Gs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Xu}from"@msafe/sui3-utils";var Hn=class a extends S{constructor(t){super(t);this.data=t}txType=Xu.Other;txSubType="FarmingBatchHarvest";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await ec(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as zu}from"@msafe/sui3-utils";var Xn=class a extends S{constructor(t){super(t);this.data=t}txType=zu.Other;txSubType="FarmingClaimFeeAndReward";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Zs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Gu}from"@msafe/sui3-utils";var zn=class a extends S{constructor(t){super(t);this.data=t}txType=Gu.Other;txSubType="FarmingDecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Js(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Qu}from"@msafe/sui3-utils";var Gn=class a extends S{constructor(t){super(t);this.data=t}txType=Qu.Other;txSubType="FarmingHarvest";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await tc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ju}from"@msafe/sui3-utils";var Qn=class a extends S{constructor(t){super(t);this.data=t}txType=Ju.Other;txSubType="FarmingIncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Qs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Yu}from"@msafe/sui3-utils";var Jn=class a extends S{constructor(t){super(t);this.data=t}txType=Yu.Other;txSubType="FarmingRemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Ys(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Zu}from"@msafe/sui3-utils";var Yn=class a extends S{constructor(t){super(t);this.data=t}txType=Zu.Other;txSubType="FarmingStake";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await nc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as tm}from"@msafe/sui3-utils";var Zn=class a extends S{constructor(t){super(t);this.data=t}txType=tm.Other;txSubType="FarmingUnstake";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await oc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as em}from"@msafe/sui3-utils";var to=class a extends S{constructor(t){super(t);this.data=t}txType=em.Other;txSubType="IncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await $s(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as sm}from"@msafe/sui3-utils";import{Transaction as eo}from"@mysten/sui/transactions";import nm,{vaults_mainnet as om}from"haedal-vault-sdk";var am=async(a,e,t)=>{let n=Ue(t,e),o=new eo;return o.setSender(e.address),n.Vest.buildRedeemPayload(a.params,o),o},im=async(a,e,t)=>{let n=new nm(om);n.senderAddress=e.address;let o=new eo;return o.setSender(e.address),await n?.Vest.buildRedeemPayload(a.params,o),o},ac=(a,e,t)=>{let n=Gt(t,e),o=new eo;return n?.Vest.buildRedeemPayload(a.params,o),o},rm=async(a,e,t)=>{let n=Gt(t,e),o=Ut(t,e),i=new eo,s=await o.Farms.withdrawReturnPayload(a.withdrawParams,i);return n.Vest.buildRedeemPayload(a.redeemParms.map(l=>({...l,clmm_position_id:s})),i),o.Farms.depositPayload({...a.depositParams,clmm_position_id:s},i),i},ic=async(a,e,t)=>a.type==="clmm"?ac(a,e,t):a.type==="farms"?rm(a,e,t):a.type==="vaults"?am(a,e,t):a.type==="haedalVaults"?im(a,e,t):ac(a,e,t);var no=class a extends S{constructor(t){super(t);this.data=t}txType=sm.Other;txSubType="PosVestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await ic(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as cm}from"@msafe/sui3-utils";var oo=class a extends S{constructor(t){super(t);this.data=t}txType=cm.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Hs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as mm}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as lm}from"@cetusprotocol/aggregator-sdk";import{Transaction as um}from"@mysten/sui/transactions";var rc=async(a,e,t)=>{let n=Fs(t,e),o=new um;return await n.fastRouterSwap({...a,router:lm(a.router),txb:o}),o};var ao=class a extends S{constructor(t){super(t);this.data=t}txType=mm.Other;txSubType="AggregatorSwap";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await rc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as pm}from"@msafe/sui3-utils";import{Transaction as sc}from"@mysten/sui/transactions";var cc=async(a,e,t)=>{let n=Ue(t,e),o=new sc;return o.setSender(e.address),await n.Vaults.deposit(a,o),o},lc=async(a,e,t)=>{let n=Ue(t,e),o=new sc;return await n.Vaults.withdraw(a,o),o};var io=class a extends S{constructor(t){super(t);this.data=t}txType=pm.Other;txSubType="AddVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await cc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as dm}from"@msafe/sui3-utils";var ro=class a extends S{constructor(t){super(t);this.data=t}txType=dm.Other;txSubType="RemoveVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await lc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as hm}from"@msafe/sui3-utils";import{Transaction as fm}from"@mysten/sui/transactions";var uc={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},mc=async(a,e,t)=>{console.log("getVestingRedeemTxb txbParams: ",a),console.log("getVestingRedeemTxb account: ",e),console.log("getVestingRedeemTxb network: ",t);let{pool:n,nftId:o,periods:i,CLOCK_ADDRESS:s}=a,l=new fm;return i.forEach(d=>{l.moveCall({target:`${uc.published_at}::router::redeem`,typeArguments:[uc.cetus_coin_type],arguments:[l.object(n),l.object(o),l.pure(d),l.object(s)]})}),l};var so=class a extends S{constructor(t){super(t);this.data=t}txType=hm.Other;txSubType="VestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await mc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as gm}from"@msafe/sui3-utils";var pc=async(a,e,t)=>await Ie(t,e).XCetusModule.convertPayload(a),dc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemLockPayload(a),fc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemDividendV3Payload(a.veNftId,a.rewardList),hc=async(a,e,t)=>await Ie(t,e).XCetusModule.cancelRedeemPayload(a),gc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemPayload(a);var co=class a extends S{constructor(t){super(t);this.data=t}txType=gm.Other;txSubType="xCETUSCancelRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await hc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as ym}from"@msafe/sui3-utils";var lo=class a extends S{constructor(t){super(t);this.data=t}txType=ym.Other;txSubType="xCETUSClaimStakingRwewards";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await fc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as bm}from"@msafe/sui3-utils";var uo=class a extends S{constructor(t){super(t);this.data=t}txType=bm.Other;txSubType="xCETUSConvert";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await pc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Tm}from"@msafe/sui3-utils";var mo=class a extends S{constructor(t){super(t);this.data=t}txType=Tm.Other;txSubType="xCETUSRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await gc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Sm}from"@msafe/sui3-utils";var po=class a extends S{constructor(t){super(t);this.data=t}txType=Sm.Other;txSubType="xCETUSRedeemLock";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await dc(i,n,o)}static fromData(t){return new a(t)}};var fo=class{application="cetus";supportSDK="@mysten/sui";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{txbParams:t,action:n}=e;return{txType:Im.Other,txSubType:n,intentionData:{txbParams:{...t},action:n}}}async build(e){let{suiClient:t,account:n,network:o}=e,i;switch(e.txSubType){case"OpenAndAddLiquidity":i=qn.fromData(e.intentionData);break;case"IncreaseLiquidity":i=to.fromData(e.intentionData);break;case"DecreaseLiquidity":i=Vn.fromData(e.intentionData);break;case"RemoveLiquidity":i=oo.fromData(e.intentionData);break;case"ClaimFeeAndMining":i=Fn.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":i=$n.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":i=Qn.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":i=zn.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":i=Jn.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":i=Xn.fromData(e.intentionData);break;case"FarmingHarvest":i=Gn.fromData(e.intentionData);break;case"FarmingBatchHarvest":i=Hn.fromData(e.intentionData);break;case"FarmingStake":i=Yn.fromData(e.intentionData);break;case"FarmingUnstake":i=Zn.fromData(e.intentionData);break;case"xCETUSConvert":i=uo.fromData(e.intentionData);break;case"xCETUSRedeemLock":i=po.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":i=lo.fromData(e.intentionData);break;case"xCETUSCancelRedeem":i=co.fromData(e.intentionData);break;case"xCETUSRedeem":i=mo.fromData(e.intentionData);break;case"VestingRedeem":i=so.fromData(e.intentionData);break;case"AggregatorSwap":i=ao.fromData(e.intentionData);break;case"AddVaultsPosition":i=io.fromData(e.intentionData);break;case"RemoveVaultsPosition":i=ro.fromData(e.intentionData);break;case"PosVestingRedeem":i=no.fromData(e.intentionData);break;case"CreatePool":i=Kn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Tp}from"@msafe/sui3-utils";import wm from"sort-keys-recursive";var Nt=class{constructor(e){this.data=e}serialize(){return JSON.stringify(wm(this.data))}};import{getFullnodeUrl as ho}from"@mysten/sui.js/client";var xr={};ks(xr,{contractId:()=>Dm,default:()=>Om,feeObjId:()=>Am,roleObjId:()=>km,status:()=>xm,transaction:()=>Cm,upgradeCapObjId:()=>Mm,vaultObjId:()=>vm});var Cm="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",xm="success",Dm="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",km="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",vm="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Am="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Mm="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Om={transaction:Cm,status:xm,contractId:Dm,roleObjId:km,vaultObjId:vm,feeObjId:Am,upgradeCapObjId:Mm};var Dr={};ks(Dr,{contractId:()=>Bm,default:()=>Lm,feeObjId:()=>Nm,roleObjId:()=>Em,status:()=>Rm,transaction:()=>Pm,upgradeCapObjId:()=>_m,vaultObjId:()=>Wm});var Pm="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Rm="success",Bm="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Em="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Wm="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Nm="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",_m="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Lm={transaction:Pm,status:Rm,contractId:Bm,roleObjId:Em,vaultObjId:Wm,feeObjId:Nm,upgradeCapObjId:_m};var jm=ho("testnet"),Um=ho("testnet"),qm=ho("mainnet"),Fm=ho("mainnet"),Km="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",Vm="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",$m="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",Hm="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",yc=xr,bc=Dr,Xm=new Map([["dev",{env:"dev",rpc:{url:jm},backend:{url:Km},contract:yc}],["stg",{env:"stg",rpc:{url:Um},backend:{url:Vm},contract:yc}],["prev",{env:"prev",rpc:{url:qm},backend:{url:$m},contract:bc}],["prod",{env:"prod",rpc:{url:Fm},backend:{url:Hm},contract:bc}]]);function Tc(a,e){let t=Xm.get(a);if(!t)throw new Error(`Env not supported: ${a}`);return e&&e.rpc&&(t.rpc=e.rpc),e&&e.backend&&(t.backend=e.backend),e&&e.contract&&(t.contract=e.contract),t}import{SuiClient as Gm}from"@mysten/sui.js/client";var _=class extends Error{mpayErrorCode;context;constructor(e,t,n={}){let{cause:o,context:i}=n;o?super(`[MPay] ${t}: ${o}`):super(`[MPay] ${t}`),this.mpayErrorCode=e,this.context=i}};var go=class extends _{constructor(){super(11,"Backend is not specified")}};var yo=class extends _{constructor(){super(1,"Wallet not connected")}};import Ce,{AxiosError as zm}from"axios";var we=class extends _{constructor(e,t){super(10,e,{context:t})}};var bo=class a{constructor(e){this.apiURL=e}static parseResponseData(e){if(e instanceof zm)throw new we(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new we(e.data.code)}throw new we(e.status.toString())}async getIncomingStreams(e,t){let n=await Ce.post(`${this.apiURL}/stream`,{recipient:e,...t});return a.parseResponseData(n)}async getOutgoingStreams(e,t){let n=await Ce.post(`${this.apiURL}/stream`,{sender:e,...t});return a.parseResponseData(n)}async getStreamHistory(e){let t=await Ce.post(`${this.apiURL}/stream-events`,e),n=a.parseResponseData(t);return n.data.forEach(o=>{let i=o;return i.data.type==="create_stream"?i.data.balance=BigInt(i.data.balance):i.data.type==="cancel_stream"?i.data.withdrawAmount=BigInt(i.data.withdrawAmount):i.data.type==="claim"||i.data.type==="auto_claim"?i.data.claimAmount=BigInt(i.data.claimAmount):i.data.type==="set_auto_claim"&&(i.data.enabled=!!i.data.enabled),i.createdAt=new Date(i.createdAt),i}),n}async getAllCoinTypes(e){let t=await Ce.post(`${this.apiURL}/stream-info`,{address:e});return a.parseResponseData(t)}async getAllRecipients(e,t){let n=await Ce.post(`${this.apiURL}/stream-info`,{sender:e,status:t});return a.parseResponseData(n)}async getAllSenders(e,t){let n=await Ce.post(`${this.apiURL}/stream-info`,{recipient:e,status:t});return a.parseResponseData(n)}};var xe=class a{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new Gm({url:e.rpc.url}),e.backend&&(this._backend=new bo(e.backend.url))}static new(e,t){let n=Tc(e,t);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new go;return this._backend}set backend(e){this._backend=e}connectWallet(e){this.signer=e}disconnect(){this.signer=void 0}get wallet(){if(!this.signer)throw new yo;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as gp,normalizeStructTag as yp,normalizeSuiAddress as Kc}from"@mysten/sui.js/utils";import{TransactionBlock as xo}from"@mysten/sui.js/transactions";import{TransactionBlock as Ac}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as Mc,normalizeStructTag as Zm}from"@mysten/sui.js/utils";var kr=50n,To=10000n,Sc=25n,vr=100000000n;var Qt=class{constructor(e){this.object=e}moveArg(e){return e.object(this.object)}},qe=class{constructor(e){this.objects=e}moveArgs(e){return e.makeMoveVec({objects:this.objects.map(t=>e.object(t))})}},re=class a{constructor(e){this.result=e;return new Proxy(this,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(t,n){if(n in t)return Reflect.get(t,n);let o=s=>new a(t.result[s]);if(n===Symbol.iterator)return function*(){let s=0;for(;;)yield o(s),s++};if(typeof n=="symbol")return;let i=parseInt(n,10);if(!(Number.isNaN(i)||i<0))return o(i)}})}moveArg(){return this.result}};import{Buffer as Ic}from"buffer";import{normalizeSuiAddress as Qm}from"@mysten/sui.js/utils";var Fe=class extends _{constructor(e,t){super(3,e,{context:t})}};var So=class{constructor(e){this.results=e}callResult(e){return this.results.results[e]}returnValue(e,t){return e.returnValues[t]}getValue(e=0,t=0){let n=this.callResult(e);return this.returnValue(n,t)}getAddress(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="address")throw new Fe("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return Qm(Ic.from(n).toString("hex"))}getU64(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="u64")throw new Fe("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return Ic.from(n).readBigInt64LE()}};import{bcs as Cc}from"@mysten/sui.js/bcs";var $=class extends _{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var xc={groupId:"string",name:"string"},Jm=64;function Dc(a){return kc(a),Cc.ser(xc,a).toString("base64")}function Ke(a){let e=Cc.de(xc,a,"base64");return kc(e),e}function kc(a){if(!wc(a.name))throw new $("Invalid metadata: Name contains unknown character");if(!wc(a.groupId))throw new $("Invalid metadata: Group ID contains unknown character");if(a.name.length>Jm)throw new $("Invalid metadata: Name exceed max length 64")}function wc(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as Io}from"@mysten/sui.js/utils";function wo(a,e){return Io(a)===Io(e)}function se(a,e){return Io(a)===Io(e)}var Co="txn.gas";import{nanoid as Ym}from"nanoid";function vc(){return Ym()}var he=class a{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}static convertCreateStreamInfoToInternal(e){return{metadata:Dc({name:e.name,groupId:vc()}),coinType:Zm(e.coinType),recipients:e.recipients.map(t=>({address:t.address,cliffAmount:t.cliffAmount,amountPerEpoch:t.amountPerStep})),epochInterval:e.interval,numberEpoch:e.steps,startTime:e.startTimeMs,cancelable:e.cancelable}}async buildCreateStreamTransactionBlock(e){let t=new Ac,n=this.calculateFeesInternal(e),o=this.getCreateStreamCoinRequests(e,n),i=await this.wallet.requestCoins(o),s=await this.addMergeCoins(t,i[0]),l;o.length>1?l=await this.addMergeCoins(t,i[1]):l=s;for(let d=0;d<e.recipients.length;d++){let b=e.recipients[d],I=this.amountForRecipient(b,e.numberEpoch),C=this.getStreamFeeLocal(I),[x]=t.splitCoins(s,[t.pure(I+C,"u64")]),[D]=t.splitCoins(l,[t.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(t,{paymentCoin:new re(x),flatFeeCoin:new re(D),metadata:e.metadata,recipient:b.address,timeStart:e.startTime,cliff:b.cliffAmount,epochInterval:e.epochInterval,numEpoch:e.numberEpoch,amountPerEpoch:b.amountPerEpoch,cancelable:e.cancelable,coinType:e.coinType})}return t}calculateCreateStreamFees(e){let t=a.convertCreateStreamInfoToInternal(e);return this.calculateFeesInternal(t)}feeParams(){return{createFeePercent:{numerator:kr,denominator:To},claimFeePercent:{numerator:Sc,denominator:To},flatFeePerStream:vr}}async addMergeCoins(e,t){let n;return t.mergedCoins&&t.mergedCoins.length?(e.mergeCoins(e.object(t.primaryCoin),t.mergedCoins.map(o=>e.object(o))),n=e.object(t.primaryCoin)):t.primaryCoin===Co?n=e.gas:n=e.object(t.primaryCoin),n}getCreateStreamCoinRequests(e,t){let n=e.coinType;return wo(n,Mc)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:Mc,amount:t.flatFeeAmount}]}calculateFeesInternal(e){let t=e.recipients.reduce((o,i)=>{let s=this.amountForRecipient(i,e.numberEpoch),l=this.getStreamFeeLocal(s);return{totalAmount:o.totalAmount+s,streamFeeAmount:o.streamFeeAmount+l}},{totalAmount:0n,streamFeeAmount:0n});return{flatFeeAmount:BigInt(e.recipients.length)*this.flatSuiFee,...t}}amountForRecipient(e,t){return BigInt(e.amountPerEpoch)*BigInt(t)+BigInt(e.cliffAmount)}get flatSuiFee(){return vr}getStreamFeeLocal(e){return e*kr/To}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new Ac,e),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:t});return new So(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Pc}from"@mysten/sui.js/transactions";var Oc="0x0000000000000000000000000000000000000000000000000000000000000006";var De=class{constructor(e,t,n){this.moduleName=e;this.config=t;this.globals=n}addContractCall(e,t){let n=`${this.config.contractId}::${this.moduleName}::${t.method}`;return e.add(Pc.MoveCall({target:n,arguments:t.arguments.map(o=>o instanceof qe?o.moveArgs(e):o instanceof Qt?o.moveArg(e):o instanceof re?o.moveArg():e.pure(o)),typeArguments:t.typeArgs})),e}addTransactionBlock(e,t,n=[],o=[]){e.add(Pc.MoveCall({target:t,arguments:n.map(i=>i instanceof qe?i.moveArgs(e):i instanceof Qt?i.moveArg(e):i instanceof re?i.moveArg():e.pure(i)),typeArguments:o}))}makeObject(e){return typeof e=="string"?new Qt(e):e}vaultObject(){return new Qt(this.config.vaultObjId)}roleObject(){return new Qt(this.config.roleObjId)}feeObject(){return new Qt(this.config.feeObjId)}clockObject(){return new Qt(Oc)}};var ke=class a extends De{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_fee,arguments:[o,i,n],typeArgs:[]})}setStreamingFlatFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_flat_fee,arguments:[o,i,n],typeArgs:[]})}setClaimFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_claim_fee,arguments:[o,i,n],typeArgs:[]})}streamingFee(t,n){let o=this.feeObject();return this.addContractCall(t,{method:a.MethodName.streaming_fee,arguments:[o,n],typeArgs:[]})}claimFee(t,n){return this.addContractCall(t,{method:a.MethodName.claim_fee,arguments:[this.feeObject(),n],typeArgs:[]})}feeDenominator(t){return this.addContractCall(t,{method:a.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var Jt=class a extends De{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="stream";static MethodName={create_stream:"create_stream",set_auto_claim:"set_auto_claim",cancel_stream:"cancel_stream",claim_stream:"claim_stream",claim_stream_by_proxy:"claim_stream_by_proxy",stream_current_epoch:"stream_current_epoch",now_milli_seconds:"now_milli_seconds"};createStream(t,n){let o=this.feeObject(),i=this.vaultObject(),s=this.makeObject(n.paymentCoin),l=this.makeObject(n.flatFeeCoin),d=this.clockObject();return this.addContractCall(t,{method:a.MethodName.create_stream,arguments:[o,i,s,l,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,d],typeArgs:[n.coinType]})}setAutoClaim(t,n){let o=this.makeObject(n.streamId);return this.addContractCall(t,{method:a.MethodName.set_auto_claim,arguments:[o,n.enabled],typeArgs:[n.coinType]})}cancelStream(t,n){let o=this.makeObject(n.streamId),i=this.clockObject();return this.addContractCall(t,{method:a.MethodName.cancel_stream,arguments:[o,i],typeArgs:[n.coinType]})}claimStream(t,n){let o=this.makeObject(n.streamId),i=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream,arguments:[o,i],typeArgs:[n.coinType]})}claimStreamByProxy(t,n){let o=this.makeObject(n.streamId),i=this.vaultObject(),s=this.feeObject(),l=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream_by_proxy,arguments:[o,i,s,l],typeArgs:[n.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream_by_proxy}`}};var ve=class{constructor(e){this.globals=e;let t=e.envConfig.contract;this.feeContract=new ke(t,e),this.streamContract=new Jt(t,e)}feeContract;streamContract;async createStreams(e){let t=he.convertCreateStreamInfoToInternal(e);return this.createStreamHelper().buildCreateStreamTransactionBlock(t)}createStreamHelper(){return new he(this.globals,this.feeContract,this.streamContract)}setAutoClaim(e,t,n){let o=new xo;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new xo;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new xo;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new xo;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as Ar,SUI_TYPE_ARG as tp}from"@mysten/sui.js/utils";import{Duration as Rc}from"luxon";var Do=class extends _{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var ep=1e3,ko=class{constructor(e){this.globals=e;this.coinMetaHelper=new Mr(e.suiClient),this.createStreamHelper=new ve(e).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new Do(e.effects?.status.status,e.effects?.status.error);return e.objectChanges.filter(t=>t.type==="created"&&t.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(t=>t.objectId)}calculateCreateStreamFees(e){return this.createStreamHelper.calculateCreateStreamFees(e)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(e){if(e.steps===0n)throw new $("Invalid stream steps: 0");let t=e.cliff?e.cliff:{numerator:0n,denominator:100n},n=e.totalAmount*t.numerator/t.denominator,o=(e.totalAmount-n)/e.steps,s={realTotalAmount:o*e.steps+n,cliffAmount:n,amountPerStep:o};return this.validateStreamAmount(s,e.totalAmount),s}calculateTimelineByInterval(e){if(e.steps===0n)throw new $("Invalid stream steps: 0");let t=e.timeStart.plus(e.interval.toMillis()*Number(e.steps)),n={timeStart:e.timeStart,timeEnd:t,interval:e.interval,steps:e.steps};return this.validateTimeline(n),n}calculateTimelineByTotalDuration(e){if(e.steps===0n)throw new $("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus(Rc.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:Rc.fromMillis(Number(t)),steps:e.steps};return this.validateTimeline(o),o}async getBalance(e,t){let n=await this.globals.suiClient.getBalance({owner:e,coinType:t}),o=await this.getCoinMeta(t);return{...n,coinType:Ar(n.coinType),coinMeta:o}}async getAllBalance(e){let t=await this.globals.suiClient.getAllBalances({owner:e}),n=await Promise.all(t.map(o=>this.getCoinMeta(o.coinType)));return t.map((o,i)=>({...o,coinType:Ar(o.coinType),coinMeta:n[i]}))}async getCoinMeta(e){return this.coinMetaHelper.getCoinMeta(e)}async simulateTransactionBlock(e){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:e,sender:await this.globals.wallet.address()})}validateStreamAmount(e,t){if(e.amountPerStep===0n)throw new $("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new $("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<ep)throw new $("Interval shall be at least 1 second","interval",e.interval)}},Mr=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(e){let t=Ar(e||tp);if(this.coinMetaReg.has(t))return this.coinMetaReg.get(t);let n=await this.queryCoinMeta(t);return n&&this.coinMetaReg.set(t,n),n}async queryCoinMeta(e){return await this.suiClient.getCoinMetadata({coinType:e})||void 0}};import{normalizeStructTag as Wc,normalizeSuiAddress as Ro}from"@mysten/sui.js/utils";import{DateTime as Nc}from"luxon";import{TransactionBlock as Oo}from"@mysten/sui.js/transactions";import{normalizeStructTag as Ec,parseStructTag as ap}from"@mysten/sui.js/utils";import{DateTime as ip}from"luxon";var vo=class extends _{constructor(){super(7,"Connected wallet is not creator")}};var Ve=class extends _{constructor(){super(8,"Connected wallet is not recipient")}};var $e=class extends _{constructor(e,t){super(6,e,{context:t})}};var vt=class extends _{constructor(e,t={}){super(0,e,t)}};var Ao=class extends _{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as np,Duration as op}from"luxon";var Bc=(1n<<64n)-1n,Mo=1e3;function Or(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Mo);return np.fromMillis(t*Mo)}function Pr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Mo);return op.fromMillis(t*Mo)}var ce=class a{constructor(e,t,n){this.globals=e;this.streamId=t;this.rawData=n;this.streamContract=new Jt(e.envConfig.contract,e)}streamContract;type="Stream";static async new(e,t){let n=await a.fetchStreamData(e,t);return new a(e,t,n)}static fromObjectData(e,t,n){let o=a.parseRawStreamData(t,n);return new a(e,t,o)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await a.fetchStreamData(this.globals,this.streamId)}refreshWithData(e){if(e.data?.objectId!==this.streamId)throw new vt("Object Id does not align");this.rawData=a.parseRawStreamData(this.streamId,e)}async historyEvents(e){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:e})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new vo;let e=new Oo;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Ve;let e=new Oo;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new Ve;let t=new Oo;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new Oo;return this.streamContract.claimStreamByProxy(e,{streamId:this.streamId,coinType:this.coinType}),e}get wallet(){return this.globals.wallet}get client(){return this.globals.suiClient}get coinType(){return Ec(this.rawData.coinType)}get progress(){return{status:this.streamStatus,total:this.totalAmount,streamed:this.streamedAmount,claimed:this.claimedAmount,claimable:this.claimable,canceled:this.canceledAmount}}get balance(){return this.rawData.balance}get autoClaim(){return this.rawData.autoClaim}get amountPerEpoch(){return this.rawData.config.amountPerEpoch}get cancelable(){return this.rawData.config.cancelable}get cliff(){return this.rawData.config.cliff}get creator(){return this.rawData.config.creator}get interval(){return Pr(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return Ke(e).groupId}get name(){let{metadata:e}=this.rawData.config;return Ke(e).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return Or(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,t=e.epochInterval*e.totalEpoch;return Pr(t)}get timeEnd(){return this.timeStart.plus(this.duration)}get totalSteps(){return this.rawData.config.totalEpoch}get claimable(){return this.streamedAmount-this.claimedAmount}get nextReleaseDate(){return this.currentEpoch===-1n?this.timeStart:this.currentEpoch>=this.totalSteps||this.isCanceled?null:Or((this.currentEpoch+1n)*this.rawData.config.epochInterval+this.rawData.config.timeStart)}get nextReleaseAmount(){return this.currentEpoch===-1n?this.cliff:this.currentEpoch>=this.totalSteps||this.isCanceled?null:this.amountPerEpoch}get streamStatus(){let e=this.rawData.status.status;return e===16?"CANCELED":e===17?"SETTLED":e===1?"COMPLETED":this.currentEpoch>=this.totalSteps?"STREAMED":"STREAMING"}get streamedAmount(){return this.currentEpoch===-1n?0n:this.isCanceled?this.rawData.status.epochCanceled*this.amountPerEpoch+this.cliff:this.currentEpoch*this.amountPerEpoch+this.cliff}get claimedAmount(){return this.rawData.status.epochClaimed===Bc?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=ip.now().toMillis(),t=this.timeStart.toMillis();if(e<t)return-1n;let n=Math.floor((e-t)/Number(this.rawData.config.epochInterval));return BigInt(n)>Number(this.rawData.config.totalEpoch)?this.rawData.config.totalEpoch:BigInt(n)}get totalAmount(){let e=this.rawData.config;return e.amountPerEpoch*e.totalEpoch+e.cliff}get isCanceled(){let e=this.rawData.status.status;return e===16||e===17}get canceledAmount(){return this.isCanceled?this.totalAmount-this.streamedAmount:0n}static async fetchStreamData(e,t){let n=await e.suiClient.getObject({id:t,options:{showContent:!0,showType:!0}});return a.parseRawStreamData(t,n)}static parseRawStreamData(e,t){if(t.error)throw t.error.code==="notExists"?new Ao(e):new $e(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data.content;if(n.dataType!=="moveObject")throw new $e("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=ap(n.type),i=Ec(o[0]),s=n.fields,l=s.config.fields,d=s.status.fields;return{coinType:i,autoClaim:s.auto_claim,balance:BigInt(s.balance.fields.balance),config:{amountPerEpoch:BigInt(l.amount_per_epoch),cancelable:l.cancelable,cliff:BigInt(l.cliff),creator:l.creator,epochInterval:BigInt(l.epoch_interval),metadata:l.metadata,recipient:l.recipient,timeStart:BigInt(l.time_start),totalEpoch:BigInt(l.total_epoch)},status:{status:d.status,epochCanceled:BigInt(d.epoch_canceled),epochClaimed:BigInt(d.epoch_claimed)}}}};var Ae=class extends _{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function Br(a){let e=[];for(;await a.hasNext();){let t=await a.next();e.push(t)}return e&&Array.isArray(e[0])?e.flat(1):e}var Rr=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},Me=class{constructor(e){this.requester=e;this.pager=new Rr(e),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}};var rp=25;async function Wr(a,e,t){let n=new He(e),o=new Xe(a,n,t);return await Br(o)}var He=class{constructor(e){this.ids=e;this.cursor=-1}cursor;async hasNext(){return this.cursor<this.ids.length-1}async next(){if(this.cursor+=1,this.cursor>=this.ids.length)throw new Error("invalid iterator implementation");return this.ids[this.cursor]}},Xe=class extends Me{constructor(t,n,o){super(new Er(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}},Er=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||rp,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}filter;pageSize;objectOptions;async doNextRequest(){let e=[];for(;e.length<this.pageSize&&await this.stringIter.hasNext();){let i=await this.stringIter.next();i&&e.push(i)}let t=await this.suiClient.multiGetObjects({ids:e,options:this.objectOptions}),n;if(this.filter){let{filter:o}=this;n=t.filter(i=>o?.(i))}else n=t;return{data:n,hasNext:await this.stringIter.hasNext()}}};var Po=class a{constructor(e,t){this.globals=e;this.streams=t;if(t.length===0)throw new Ae("stream size 0");let n=t.map(i=>i.groupId);if(new Set(n).size!==1)throw new $("Stream does not have same group ID")}type="StreamGroup";static async new(e,t){let n=await Wr(e.suiClient,t);return n.forEach(o=>{if(!o)throw new vt("stream group object data undefined")}),a.newFromObjectResponse(e,t,n)}static async newFromObjectResponse(e,t,n){let o=await a.parseGroupStreams(e,t,n);return new a(e,o)}static checkStreamGroup(e){let t=e.map(i=>i.groupCommonInfo),n=t[0],o=!0;return t.forEach(i=>{sp(n,i)||(o=!1)}),o}async refresh(){let e=await Wr(this.globals.suiClient,this.streams.map(t=>t.streamId));this.streams.forEach((t,n)=>{t.refreshWithData(e[n])})}get groupId(){return this.streams[0].groupId}get creator(){return this.streams[0].creator}get info(){return{groupId:this.groupId,streamIds:this.streams.map(e=>e.streamId),progress:this.progress,name:this.streams[0].name,creator:this.creator,coinType:this.streams[0].coinType,totalAmount:this.streams.reduce((e,t)=>e+t.totalAmount,0n),start:this.streams[0].timeStart,end:this.streams[0].timeEnd,cancelable:this.streams[0].cancelable,cliffAmount:this.streams.reduce((e,t)=>e+t.cliff,0n),duration:this.streams[0].duration,interval:this.streams[0].interval,steps:this.streams[0].totalSteps,nextReleaseAmount:this.streams.reduce((e,t)=>t.nextReleaseAmount===null?e:e+t.nextReleaseAmount,0n),nextReleaseDate:this.streams[0].nextReleaseDate}}get progress(){return{total:this.streams.reduce((e,t)=>e+t.totalAmount,0n),streamed:this.streams.reduce((e,t)=>e+t.streamedAmount,0n),claimed:this.streams.reduce((e,t)=>e+t.claimedAmount,0n),claimable:this.streams.reduce((e,t)=>e+t.claimable,0n),canceled:this.streams.reduce((e,t)=>e+t.canceledAmount,0n)}}async historyEvents(e){return this.globals.backend.getStreamHistory({groupId:this.groupId,pagination:e})}static async parseGroupStreams(e,t,n){let o=n.map((i,s)=>ce.fromObjectData(e,t[s],i)).filter(i=>!!i);if(new Set(o.map(i=>i.groupId)).size!==1)throw new Ae("Not same group ID");if(!this.checkStreamGroup(o))throw new Ae("Not same stream settings");return o}};function sp(a,e){return a.name===e.name&&a.groupId===e.groupId&&a.creator===e.creator&&a.start.toMillis()===e.start.toMillis()&&a.interval.toMillis()===e.interval.toMillis()&&a.steps===e.steps&&a.cancelable===e.cancelable}var ze=class a{constructor(e,t){this.it=e;this.pageSize=t}static async newIncoming(e){let t=await Bo.newIncoming(e);return new a(t,e.pageSize)}static async newOutgoing(e){let t=await Bo.newOutgoing(e);return new a(t,e.pageSize)}async hasNext(){return this.it.hasNext()}async next(){let e=[];for(;e.length<this.pageSize&&await this.it.hasNext();)e.push(await this.it.next());return e}},Bo=class a{constructor(e){this.requester=e}cachedNext;static async newIncoming(e){let t=await Eo.newIncomingQuery(e);return new a(t)}static async newOutgoing(e){let t=await Eo.newOutgoingQuery(e);return new a(t)}async hasNext(){return this.cachedNext===void 0&&(this.cachedNext=await this.requester.doNextRequest()),this.cachedNext!==null}async next(){if(this.cachedNext===void 0){let t=await this.requester.doNextRequest();if(t===null)throw new vt("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new vt("No more results");return e}},Eo=class a{constructor(e,t,n,o){this.globals=e;this.recipient=t;this.groupRefs=n;this.query=o;this.current=0;let i=new He(n.flat().map(s=>s.streamId));this.objectIter=new Xe(e.suiClient,i)}current=0;objectIter;static async newIncomingQuery(e){let t=pp(e.query),n=await e.globals.walletAddress(),i=(await e.globals.backend.getIncomingStreams(n,t)).filter(l=>Ro(l.recipient)===Ro(n)),s=_c(i);return new a(e.globals,n,s,e.query)}static async newOutgoingQuery(e){let t=dp(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),i=_c(o);return new a(e.globals,n,i,e.query)}async doNextRequest(){if(this.current>=this.groupRefs.length)return null;let e=this.groupRefs[this.current];if(e.length===1){let t=await up(this.globals,e[0].streamId,this.objectIter);return this.current++,Lc(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await mp(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,lp(t,this.query)?t:this.doNextRequest()}throw new vt("Stream group with no stream")}};function _c(a){let e=new Map;return a.forEach(t=>{let n=e.get(t.groupId);n?(n.push(t),e.set(t.groupId,n)):e.set(t.groupId,[t])}),Array.from(e.values()).sort((t,n)=>Nc.fromISO(n[0].createDate).toMillis()-Nc.fromISO(t[0].createDate).toMillis())}function Lc(a,e){if(e===void 0)return!0;let t=cp(a,e.status);if(e&&"claimable"in e&&e.claimable!==void 0){let n=e.claimable?a.progress.claimable!==0n:a.progress.claimable===0n;return t&&n}return t}function cp(a,e){return e===void 0?!0:Array.isArray(e)?e.includes(a.progress.status):a.progress.status===e}function lp(a,e){if(!e)return!0;let t=!1;return a.streams.forEach(n=>{Lc(n,e)&&(t=!0)}),t}async function up(a,e,t){let n=await jc(t,e);return ce.fromObjectData(a,e,n)}async function mp(a,e,t){let n=[];for(;n.length<e.length;){let o=await jc(t,e[n.length]);n.push(o)}return Po.newFromObjectResponse(a,e,n)}async function jc(a,e){if(!await a.hasNext())throw new vt("object iterator has been consumed");let t=await a.next();if(!t||t.error||t.data===void 0||t.data===null)throw new vt("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new vt("stream id not aligned");return t}function pp(a){return{status:Nr(a?.status),coinType:Uc(a?.coinType),sender:qc(a?.sender)}}function dp(a){return{status:Nr(a?.status),coinType:Uc(a?.coinType),recipient:qc(a?.recipient)}}function Nr(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((e,t)=>{let n=Nr(t);return!e||e===n?n:"all"},void 0):fp(a)}function fp(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new $("Unknown stream filtered status")}}function Uc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Wc(e)):void 0:Wc(a)}function qc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Ro(e)):void 0:Ro(a)}var Wo=class extends _{constructor(t,n,o){super(4,`Not enough balance: ${t}`,{context:{coinType:t,requestAmount:n,gotAmount:o}});this.coinType=t;this.requestAmount=n;this.gotAmount=o}};var hp=25;async function Fc(a,e,t,n="0x2::sui::SUI",o=hp){let i=new _r(a,e,n,o),s=BigInt(0),l=[];for(;await i.hasNext()&&s<t;){let d=await i.next();d&&(l.push(d),s+=BigInt(d.balance))}if(s<t)throw new Wo(n,t,s);return l}var _r=class extends Me{constructor(t,n,o,i){super(new Lr(t,n,o,i));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=i}},Lr=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new vt("Invalid reqPageSize")}nextCursor;async doNextRequest(){let e=await this.suiClient.getCoins({owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=e.nextCursor,{data:e.data,hasNext:e.hasNextPage}}};var jr=class{constructor(e){this.msafe=e}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},No=class{constructor(e){this.account=e}async address(){return this.account.address}},Ur=class{constructor(e,t){this.singleWallet=e;this.suiClient=t}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(e){return Promise.all(e.map(t=>this.requestCoin(t)))}async requestCoin(e){if(wo(e.coinType,gp))return{primaryCoin:Co};if(e.amount<=0)throw new $("Invalid coin request","coinAmount",e.amount);let t=await Fc(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new vt("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(n=>n.coinObjectId)}}},_o=class{globals;helper;constructor(e,t){this.globals=xe.new(e,t),this.helper=new ko(this.globals)}connectSingleWallet(e){let t=new Ur(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new jr(e);this.globals.connectWallet(t)}async createStream(e){return this.builder().createStreams(e)}async getStream(e){return ce.new(this.globals,e)}async getIncomingStreams(e,t=10){return ze.newIncoming({globals:this.globals,query:e,pageSize:t})}async getOutgoingStreams(e,t=10){return ze.newOutgoing({globals:this.globals,query:e,pageSize:t})}async getCoinTypesForStreamFilter(){let e=await this.wallet.address();return(await this.globals.backend.getAllCoinTypes(e)).map(n=>yp(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>Kc(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>Kc(o))}get wallet(){return this.globals.wallet}builder(){return new ve(this.globals)}};var Ft=class extends Nt{application="mpay";getClient(e,t){let n=new _o(e==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new No(t)),n}};var Ge=class extends Ft{constructor(t){super(t);this.data=t}txType=Tp.Stream;txSubType="Cancel";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).cancel()}};import{TransactionType as Sp}from"@msafe/sui3-utils";var Qe=class extends Ft{constructor(t){super(t);this.data=t}txType=Sp.Stream;txSubType="ClaimByProxy";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claimByProxy()}};import{TransactionType as Ip}from"@msafe/sui3-utils";var Je=class extends Ft{constructor(t){super(t);this.data=t}txType=Ip.Stream;txSubType="Claim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claim()}};import{TransactionType as wp}from"@msafe/sui3-utils";var Ye=class extends Ft{constructor(t){super(t);this.data=t}txType=wp.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o}=t;return this.getClient(n,o).createStream(this.data)}};import{bcs as Vc}from"@mysten/sui.js/bcs";import{normalizeStructTag as Cp,normalizeSuiAddress as Ze}from"@mysten/sui.js/utils";var Oe=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return BigInt(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return Ze(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Vc.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return Ze(e.value.Object.ImmOrOwned.objectId)}return Ze(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Ze(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Ze(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Vc.de(t,new Uint8Array(n))}typeArg(e){return Cp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};var Lo=class{constructor(e,t){this.globals=e;this.txb=t}decode(){let e=this.decodeCreateStreamInfo(),t=this.createStreamHelper().calculateCreateStreamFees(e);return{type:"CreateStream",info:e,fees:t}}decodeCreateStreamInfo(){let t=this.createStreamTransactions().map(n=>this.getCreationInfoFromMoveCall(n));return this.aggregateGroupStreamInfo(t)}createStreamTransactions(){let e=this.transactions.filter(t=>t.kind==="MoveCall"&&se(t.target,this.contract.createStreamTarget));if(e.length===0)throw new vt("No create stream transactions");return e.map(t=>new Oe(t,this.txb))}getCreationInfoFromMoveCall(e){let t=e.decodeInputString(4),{name:n,groupId:o}=Ke(t),i=e.decodeInputAddress(5),s=e.decodeInputU64(6),l=e.decodeInputU64(7),d=e.decodeInputU64(8),b=e.decodeInputU64(9),I=e.decodeInputU64(10),C=e.decodeInputBool(11),x=e.typeArg(0);return{name:n,groupId:o,recipient:i,timeStart:s,cliff:l,epochInterval:d,totalEpoch:b,amountPerEpoch:I,cancelable:C,coinType:x}}aggregateGroupStreamInfo(e){if(new Set(e.map(o=>JSON.stringify({name:o.name,groupId:o.groupId,timeStart:String(o.timeStart),epochInterval:String(o.epochInterval),totalEpoch:String(o.totalEpoch),cancelable:o.cancelable,coinType:o.coinType}))).size!==1)throw new $("Stream group not have common info");let n=e.map(o=>({address:o.recipient,amountPerStep:o.amountPerEpoch,cliffAmount:o.cliff}));return{name:e[0].name,coinType:e[0].coinType,recipients:n,interval:e[0].epochInterval,steps:e[0].totalEpoch,startTimeMs:e[0].timeStart,cancelable:e[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(e=>e.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new Jt(this.globals.envConfig.contract,this.globals)}get feeContract(){return new ke(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new he(this.globals,this.feeContract,this.contract)}getInputArg(e){if(e.kind!=="Input")throw new Error("not input type");return"value"in e?e:this.txb.blockData.inputs[e.index]}};var jo=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new Jt(e.envConfig.contract,e)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(t=>t.kind==="MoveCall"&&se(t.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new Lo(this.globals,this.txb).decode()}decodeSetAutoClaimTransaction(){let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeInputBool(1);return{type:"SetAutoClaim",streamId:e,enabled:t}}decodeClaimTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Claim",streamId:e}}decodeClaimByProxyTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"ClaimByProxy",streamId:e}}decodeCancelStreamTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Cancel",streamId:e}}get helper(){let e=this.transactions[0];return new Oe(e,this.txb)}};import{TransactionType as xp}from"@msafe/sui3-utils";var tn=class extends Ft{constructor(t){super(t);this.data=t}txType=xp.Stream;txSubType="SetAutoClaim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}};var Uo=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(e){let{network:t,transactionBlock:n}=e,o=xe.new(t==="sui:mainnet"?"prod":"dev"),s=new jo(o,n).decode(),l;switch(s.type){case"CreateStream":l=new Ye(s.info);break;case"SetAutoClaim":l=new tn({streamId:s.streamId,enabled:s.enabled});break;case"Claim":l=new Je({streamId:s.streamId});break;case"ClaimByProxy":l=new Qe({streamId:s.streamId});break;case"Cancel":l=new Ge({streamId:s.streamId});break;default:throw new Error(`Unknown transaction type: ${s}`)}return{txType:l.txType,txSubType:l.txSubType,intentionData:l.data}}async build(e){let{intentionData:t}=e,n;switch(e.txSubType){case"CreateStream":n=new Ye(t);break;case"Claim":n=new Je(t);break;case"ClaimByProxy":n=new Qe(t);break;case"SetAutoClaim":n=new tn(t);break;case"Cancel":n=new Ge(t);break;default:throw new Error("not implemented")}return n.build({...e})}};import{TransactionDefaultApplication as vp,TransactionSubTypes as $c}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Dp}from"@msafe/sui3-utils";var qo=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return Dp(n,this.data,o.address)}static fromData(t){return new a(t)}};import{buildObjectTransferTxb as kp}from"@msafe/sui3-utils";var Fo=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return kp(n,this.data,o.address)}static fromData(t){return new a(t)}};var Ko=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=vp}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case $c.assets.coin.send:o=qo.fromData(e.intentionData);break;case $c.assets.object.send:o=Fo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as Up}from"@msafe/sui3-utils";var Hc=!1,en={ProtocolPackage:"0x81c408448d0d57b3e371ea94de1d40bf852784d3e225de1e74acab3e8395c18f",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},wusdc:{name:"wUSDC",assetId:1,coinType:"wusdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"},wbtc:{name:"WBTC",coinType:"wbtc",assetId:8,poolId:"0xd162cbe40f8829ce71c9b3d3bf3a83859689a79fa220b23d70dc0300b777ae6e",type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",reserveObjectId:"0x8b4d81f004e4e9faf4540951a896b6d96e42598a270e6375f598b99742db767e",borrowBalanceParentId:"0x55e1f3c9e6e5cf9fff563bdd61db07a3826458c56ef72c455e049ab3b1b0e99c",supplyBalanceParentId:"0x821e505a0091b089edba94deaa14c2f2230d026bbaa7b85680554441aad447e0"},ausd:{name:"AUSD",coinType:"ausd",assetId:9,poolId:"0xc9208c1e75f990b2c814fa3a45f1bf0e85bb78404cfdb2ae6bb97de58bb30932",type:"0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",reserveObjectId:"0x918889c6a9d9b93108531d4d59a4ebb9cc4d41689798ffc1d4aed6e1ae816ec0",borrowBalanceParentId:"0x551300b9441c9a3a16ca1d7972c1dbb4715e15004ccd5f001b2c2eee22fd92c1",supplyBalanceParentId:"0xe151af690355de8be1c0281fbd0d483c099ea51920a57c4bf8c9666fd36808fd"},nusdc:{name:"USDC",assetId:10,coinType:"nusdc",poolId:"0xa3582097b4c57630046c0c49a88bfc6b202a3ec0a9db5597c31765f7563755a8",type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",reserveObjectId:"0x4c8a2c72a22ae8da803a8519798d312c86e74a9e0d6ec0eec2bfcf7e4b3fef5e",borrowBalanceParentId:"0xb0b0c7470e96cabbb4f1e8d06bef2fbea65f4dbac52afae8635d9286b1ea9a09",supplyBalanceParentId:"0x08b5ce8574ac3bc9327e66ad5decd34d07ee798f724ad01058e8855ac9acb605"},eth:{name:"ETH",assetId:11,coinType:"eth",poolId:"0x78ba01c21d8301be15690d3c30dc9f111871e38cfb0b2dd4b70cc6052fba41bb",type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",reserveObjectId:"0x376faea6dfbffab9ea808474cb751d91222b6d664f38c0f1d23de442a8edb1ce",borrowBalanceParentId:"0xf0c6ce5cfaee96073876a5fab7426043f3a798b79502c4caeb6d9772cd35af1f",supplyBalanceParentId:"0xc0a0cb43620eb8a84d5a4a50a85650e7fa7ba81e660f9cc2863404fd84591d4b"},usdy:{name:"USDY",assetId:12,coinType:"usdy",poolId:"0x4b6253a9f8cf7f5d31e6d04aed4046b9e325a1681d34e0eff11a8441525d4563",type:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",reserveObjectId:"",borrowBalanceParentId:"",supplyBalanceParentId:""}},borrowFee:.003,borrowFeeAddress:"0x70b9b10704263cf53392849e33b1f5fd16005869b4198ed5524836bad1234ea2"};async function qr(){if(!Hc)try{let a=await fetch("https://open-api.naviprotocol.io/api/msafe").then(i=>i.json()),{packageId:e,borrowFee:t,borrowFeeAddress:n,pool:o}=a;e&&(en.ProtocolPackage=e),t&&(en.borrowFee=t),n&&(en.borrowFeeAddress=n),o&&(en.pool=o),Hc=!0}catch(a){console.error(a.message)}}var $t=en;import{TransactionType as ye}from"@msafe/sui3-utils";import{normalizeStructTag as Mp,normalizeSuiAddress as nn}from"@mysten/sui/utils";import{bcs as Xc}from"@mysten/sui.js/bcs";var Vo=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.isEntryMultiDepositTransaction())return this.decodeEntryMultiDeposit();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();if(this.isEntryClaimAndDepositTransaction())return this.decodeEntryClaimAndDeposit();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isClaimRewardTransaction(){return!!this.transactions.find(t=>!!(t.kind==="MoveCall"&&t.target.includes("claim_reward")))}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::borrow`)}isEntryMultiDepositTransaction(){let e=`${$t.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))?!1:t.length>1}isEntryClaimAndDepositTransaction(){let e=`${$t.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return!!(this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))&&t.length>0)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::withdraw`)}findPoolByAssetId(e){let t=Object.values($t.pool).find(n=>n.assetId===e);if(!t)throw new Error("Pool not found");return t}decodeEntryClaimAndDeposit(){return{txType:ye.Other,type:"EntryClaimAndDeposit",intentionData:{type:"entry_claim_and_deposit"}}}decodeClaimReward(){return console.log("decode claims"),{txType:ye.Other,type:"ClaimReward",intentionData:{type:"claim_reward"}}}decodeEntryBorrow(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryBorrow",intentionData:{amount:t,assetId:e}}}decodeEntryMultiDeposit(){let e=[],t=`${$t.ProtocolPackage}::incentive_v3::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===t){let o=new $o(n,this.txb),i=o.decodeInputU8(3),s=o.decodeInputU64(5);e.push({assetId:i,amount:s})}}),{txType:ye.Other,type:"EntryMultiDeposit",intentionData:{list:e}}}decodeEntryDeposit(){let e=this.helper.decodeInputU8(3),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryDeposit",intentionData:{amount:t,assetId:e}}}decodeEntryRepay(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(6);return{txType:ye.Other,type:"EntryRepay",intentionData:{amount:t,assetId:e}}}decodeEntryWithdraw(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryWithdraw",intentionData:{amount:t,assetId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith($t.ProtocolPackage));return new $o(e,this.txb)}},$o=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return nn(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Xc.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return nn(e.value.Object.ImmOrOwned.objectId)}return nn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return nn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return nn(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Xc.de(t,new Uint8Array(n))}typeArg(e){return Mp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{Transaction as zc}from"@mysten/sui/transactions";import{depositCoinPTB as Op,withdrawCoinPTB as Pp,repayCoinPTB as Rp,borrowCoinPTB as Bp,claimLendingRewardsPTB as Gc,getUserAvailableLendingRewards as Qc}from"@naviprotocol/lending";async function Pe(a,e,t,n){return await Op(a,e,t,{amount:n}),a}async function Jc(a,e,t,n){let[o]=await Pp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function Yc(a,e,t,n){let[o]=await Bp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function Fr(a,e,t,n){return await Rp(a,e,t,{amount:n}),a}async function Zc(a,e){let t=new zc,n=await Qc(e,{client:a});return await Gc(t,n),t}async function tl(a,e){let t=new zc,n=await Qc(e,{client:a});return await Gc(t,n,{customCoinReceive:{type:"depositNAVI",depositNAVI:{fallbackReceiveAddress:e}}}),t}var Ho=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await Zc(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};var Xo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward and supply",n),await tl(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Wp}from"@mysten/sui/transactions";import{getPool as Ep}from"@naviprotocol/lending";async function Yt(a){return Ep(a)}var zo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Wp;console.log("build",this.data);let s=await Yt(n);return await Yc(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Np}from"@mysten/sui/transactions";async function Re(a,e,t){let n=await a.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,n),n}var Go=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,l=new Np;console.log("build",this.data);let d=await Yt(i);if(i===0){let[x]=l.splitCoins(l.gas,[s]);return await Pe(l,d,x,s)}let b=await Re(n,o.address,d.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${d.suiCoinType} Token`);let I=b.data[0].coinObjectId;if(b.data.length>=2){let x=1;for(;x<b.data.length;)l.mergeCoins(I,[b.data[x].coinObjectId]),x++}return await Pe(l,d,l.object(I),s)}static fromData(t){return new a(t)}};import{Transaction as _p}from"@mysten/sui/transactions";var Qo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,l=new _p;console.log("build",this.data);let d=await Yt(i);if(i===0){let[C]=l.splitCoins(l.gas,[s]);return Fr(l,d,C,s)}let b=await Re(n,o.address,d.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${d.suiCoinType} Token`);let I=b.data[0].coinObjectId;if(b.data.length>=2){let C=1;for(;C<b.data.length;)l.mergeCoins(I,[b.data[C].coinObjectId]),C++}return Fr(l,d,l.object(I),s)}static fromData(t){return new a(t)}};import{Transaction as Lp}from"@mysten/sui/transactions";var Jo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Lp;console.log("build",this.data);let s=await Yt(n);return await Jc(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as jp}from"@mysten/sui/transactions";var Yo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:i}=this.data,s=new jp;console.log("build",this.data);for(let l=0;l<i.length;l++){let{assetId:d,amount:b}=i[l],I=await Yt(d);if(d===0){let[D]=s.splitCoins(s.gas,[b]);await Pe(s,I,D,b);continue}let C=await Re(n,o.address,I.suiCoinType);if(!C.data[0])throw new Error(`Insufficient balance for ${I.suiCoinType} Token`);let x=C.data[0].coinObjectId;if(C.data.length>=2){let D=1;for(;D<C.data.length;)s.mergeCoins(x,[C.data[D].coinObjectId]),D++}await Pe(s,I,s.object(x),b)}return s}static fromData(t){return new a(t)}};var Zo=class{application="navi";supportSDK="@mysten/sui";async deserialize(e){await qr();let{transaction:t}=e,o=new Vo(t).decode();return{txType:Up.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await qr(),e.txSubType){case"EntryDeposit":o=Go.fromData(e.intentionData);break;case"EntryBorrow":o=zo.fromData(e.intentionData);break;case"EntryRepay":o=Qo.fromData(e.intentionData);break;case"EntryWithdraw":o=Jo.fromData(e.intentionData);break;case"EntryMultiDeposit":o=Yo.fromData(e.intentionData);break;case"ClaimReward":o=Ho.fromData(e.intentionData);break;case"EntryClaimAndDeposit":o=Xo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionSubTypes as qp,TransactionType as el}from"@msafe/sui3-utils";import{fromHex as Fp}from"@mysten/bcs";import{Transaction as Kp}from"@mysten/sui/transactions";import Vp from"sort-keys-recursive";var nl="msafe-plain-tx",ol=qp.others.plain,Kr=class a{constructor(e){this.data=e}application=nl;txType=el.Other;txSubType=ol;serialize(){return JSON.stringify(Vp(this.data))}async build(e){return Kp.from(Fp(this.data.content))}static fromData(e){return new a(e)}},ta=class{application;supportSDK="@mysten/sui";constructor(){this.application=nl}async deserialize(e){let{content:t}=e.appContext;return{txType:el.Other,txSubType:ol,intentionData:{content:t}}}async build(e){let{suiClient:t,network:n,account:o}=e;return Kr.fromData(e.intentionData).build({suiClient:t,network:n,account:o})}};import{SuiClient as al}from"@mysten/sui/client";import{Transaction as Jp}from"@mysten/sui/transactions";import{SuiClient as Hr}from"@mysten/sui.js/client";import{TransactionBlock as Yp}from"@mysten/sui.js/transactions";import{RequestManager as zp,HTTPTransport as Gp,Client as Qp}from"@open-rpc/client-js";var $p={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},Vr=class extends Error{},ea=class extends Vr{code;type;constructor(e,t){super(e),this.code=t,this.type=$p[t]??"ServerError"}};function Hp(a){let e=new URL(a);return e.protocol=e.protocol.replace("http","ws"),e.toString()}var Xp={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},na=class{endpoint;options;#n=0;#a=0;#t=null;#e=null;#i=new Set;#o=new Map;constructor(e,t={}){this.endpoint=e,this.options={...Xp,...t},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=Hp(this.endpoint))}async makeRequest(e,t){let n=await this.#r();return new Promise((o,i)=>{this.#n+=1,this.#o.set(this.#n,{resolve:o,reject:i,timeout:setTimeout(()=>{this.#o.delete(this.#n),i(new Error(`Request timeout: ${e}`))},this.options.callTimeout)}),n.send(JSON.stringify({jsonrpc:"2.0",id:this.#n,method:e,params:t}))}).then(({error:o,result:i})=>{if(o)throw new ea(o.message,o.code);return i})}#r(){return this.#e?this.#e:(this.#e=new Promise(e=>{this.#t?.close(),this.#t=new this.options.WebSocketConstructor(this.endpoint),this.#t.addEventListener("open",()=>{this.#a=0,e(this.#t)}),this.#t.addEventListener("close",()=>{this.#a++,this.#a<=this.options.maxReconnects&&setTimeout(()=>{this.#s()},this.options.reconnectTimeout)}),this.#t.addEventListener("message",({data:t})=>{let n;try{n=JSON.parse(t)}catch(o){console.error(new Error(`Failed to parse RPC message: ${t}`,{cause:o}));return}if("id"in n&&n.id!=null&&this.#o.has(n.id)){let{resolve:o,timeout:i}=this.#o.get(n.id);clearTimeout(i),o(n)}else if("params"in n){let{params:o}=n;this.#i.forEach(i=>{i.subscriptionId===o.subscription&&o.subscription===i.subscriptionId&&i.onMessage(o.result)})}})}),this.#e)}async#s(){return this.#t?.close(),this.#e=null,Promise.allSettled([...this.#i].map(e=>e.subscribe(this)))}async subscribe(e){let t=new $r(e);return this.#i.add(t),await t.subscribe(this),()=>t.unsubscribe(this)}},$r=class{subscriptionId=null;input;subscribed=!1;constructor(e){this.input=e}onMessage(e){this.subscribed&&this.input.onMessage(e)}async unsubscribe(e){let{subscriptionId:t}=this;return this.subscribed=!1,t==null?!1:(this.subscriptionId=null,e.makeRequest(this.input.unsubscribe,[t]))}async subscribe(e){this.subscriptionId=null,this.subscribed=!0;let t=await e.makeRequest(this.input.method,this.input.params);this.subscribed&&(this.subscriptionId=t)}};var le=class{rpcClient;websocketClient;constructor({url:e,websocket:{url:t,...n}={},rpc:o}){let i=new Gp(o?.url??e,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new Qp(new zp([i])),this.websocketClient=new na(t??e,n)}async request(e){return await this.rpcClient.request(e)}async subscribe(e){let t=await this.websocketClient.subscribe(e);return async()=>!!await t()}};var oa=class a{apps;constructor(){this.apps=new Map}static fromHelpers(e){let t=new a;for(let n=0;n<e.length;n++){let o=e[n];switch(o.supportSDK){case"@mysten/sui.js":t.addLegacyHelper(o);break;case"@mysten/sui":t.addHelper(o);break;default:throw new Error(`${o.application}: ${o.supportSDK} SDK not supported`)}}return t}addLegacyHelper(e){this.apps.set(e.application,new zr(e))}addHelper(e){this.apps.set(e.application,new Xr(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}},Xr=class{constructor(e){this.helper=e}async deserialize(e){let t=new al({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=new Hr({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),i=Jp.from(o);return this.helper.deserialize({...e,suiClient:t,transaction:i})}async build(e){let t=new al({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");let o=await this.helper.build({...e,suiClient:t});o.setSender(e.account.address);let i=await o.build({client:t});return Yp.from(i)}},zr=class{constructor(e){this.helper=e}async deserialize(e){let t=new Hr({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})});return this.helper.deserialize({...e,transactionBlock:e.transactionBlock,suiClient:t})}async build(e){let t=new Hr({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");return this.helper.build({...e,suiClient:t})}};import{TransactionType as cd}from"@msafe/sui3-utils";import{getFullnodeUrl as ld}from"@mysten/sui/client";import{Scallop as ud}from"@scallop-io/sui-scallop-sdk";import{TransactionType as Pt}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as ll}from"@scallop-io/sui-scallop-sdk";import{parseStructTag as Zp}from"@mysten/sui/utils";var ue=class{constructor(e,t){this.transaction=e;this.scallopClient=t;this.scallopClient=t,this.inputs=e.getData().inputs,this.commands=e.getData().commands,this.movecallsAsSet=new Set(this.commands.filter(this.isMoveCall).map(n=>`${n.MoveCall.package}::${n.MoveCall.module}::${n.MoveCall.function}`))}inputs;commands;movecallsAsSet;get address(){return this.scallopClient.address}get utils(){return this.scallopClient.utils}get coreId(){return{protocolPkg:this.address.get("core.packages.protocol.id"),market:this.address.get("core.market"),version:this.address.get("core.version"),coinDecimalsRegistry:this.address.get("core.coinDecimalsRegistry"),xOracle:this.address.get("core.oracles.xOracle"),spoolPkg:this.address.get("spool.id"),borrowIncentivePkg:this.address.get("borrowIncentive.id"),veScaPkgId:this.address.get("vesca.id"),veScaObjId:this.address.get("vesca.object"),scoin:this.address.get("scoin.id"),referral:this.address.get("referral.id")}}matchMoveCallCommand(e,t){let{address:n,module:o,name:i}=Zp(t);return e?e.package===n&&e.module===o&&e.function===i:!1}isMoveCall(e){return e.$kind==="MoveCall"&&!!e.MoveCall}filterMoveCallCommands(e,t){return this.isMoveCall(e)&&this.matchMoveCallCommand(e.MoveCall,t)}getMoveCallCommands(e){let t=new Set(e),n=e.reduce((i,s,l)=>(i[s]=l,i),{}),o=[];return this.commands.forEach(i=>{this.isMoveCall(i)&&i.MoveCall&&t.has(i.MoveCall.package)&&(o[n[i.MoveCall.package]]=i.MoveCall)}),o}hasMoveCallCommand(e){return this.movecallsAsSet.has(e)}};import{bcs as Gr}from"@mysten/sui/bcs";import{normalizeStructTag as td,normalizeSuiAddress as on}from"@mysten/sui/utils";var Qr=class a{constructor(e,t,n=0){this.moveCall=e;this.transaction=t;let o=[];e?.MoveCall&&t.getData().commands.filter((i,s)=>{if(i.$kind==="MoveCall"){let l=`${i.MoveCall.package}::${i.MoveCall.module}::${i.MoveCall.function}`,d=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;return l===d?(o.push(s),!0):!1}return!1}),this.cmdIdx=o[n]}cmdIdx;get txBlockTransactions(){return this.transaction.blockData.transactions[this.cmdIdx]}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"U64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"U8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"Address");return on(t)}decodeInputString(e){return this.decodePureArg(e,"String")}decodeInputBool(e){return this.decodePureArg(e,"Bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return t}getNestedInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="NestedResult")throw new Error("not input type");return this.transaction.blockData.transactions[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure,o=Gr[t];return Gr[t].parse(new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return on(e.value.Object.ImmOrOwned.objectId)}return on(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return on(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return on(e.value.Object.Shared.objectId)}static getPureInput(e){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let t=e.value.Pure;return Gr.U64.parse(new Uint8Array(t))}typeArg(e){return td(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},W=Qr;var Jr=class{constructor(e,t){this.splitCoin=e;this.txb=t}getAmountInput(){return this.splitCoin.amounts.map(e=>{if(e.kind==="Input")return Number(W.getPureInputValue(e,"U64"))}).filter(e=>e!==void 0)}},Rt=Jr;import{normalizeStructTag as il,SUI_CLOCK_OBJECT_ID as rl,SUI_TYPE_ARG as ed}from"@mysten/sui/utils";var sl=async(a,e)=>{let t=await a.scallopSuiKit.client.getObject({id:e,options:{showContent:!0}});if(t?.data?.content?.dataType!=="moveObject")return!1;let o=t.data.content.fields.lock_key?.fields.name;if(!o)return!1;let i=a.address.get("borrowIncentive.object");return o===`${i.slice(2)}::incentive_account::IncentiveProgramLockKey`},Be={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},Kt={unstakeObligation:(a,e,t)=>a.moveCall(`${Be.id}::user::unstake`,[Be.incentivePools,Be.incentiveAccounts,a.object(e),a.object(t),rl],[il(ed)]),redeem_rewards:(a,e,t,n)=>a.moveCall(`${Be.id}::user::redeem_rewards`,[Be.incentivePools,Be.incentiveAccounts,a.object(e),a.object(t),rl],[il(n)])};var cl=(a,e)=>{let t=[];for(let n=0;n<a.length;n+=e)t.push(a.slice(n,n+e));return t};var aa=class extends ue{decode(){if(this.isSupplyWithStakeSpoolTransaction())return this.decodeSupplyWithStakeSpool();if(this.isUnstakeAndWithdrawTransaction())return this.decodeUnstakeAndWithdraw();if(this.isStakeSpoolTransaction())return this.decodeStakeSpool();if(this.isDepositCollateralTransaction())return this.decodeDepositCollateral();if(this.isWithdrawCollateralTransaction())return this.decodeWithdrawCollateral();if(this.isWithdrawLendingScoinTransaction())return this.decodeWithdrawLendingScoin();if(this.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithReferralTransaction())return this.decodeBorrowWithReferral();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayWithBoostTransaction())return this.decodeRepayWithBoost();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isMigrateScoinTransaction())return this.decodeMigrateScoin()}isMigrateScoinTransaction(){return this.hasMoveCallCommand(`${this.coreId.scoin}::s_coin_converter::mint_s_coin`)}isSupplyLendingTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::mint::mint`)}isSupplyWithStakeSpoolTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::mint::mint`),t=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::stake`);return e&&t}isUnstakeAndWithdrawTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::unstake`),t=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`);return e&&t}isStakeSpoolTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::stake`)}isWithdrawLendingTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`)}isWithdrawLendingScoinTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`),t=this.hasMoveCallCommand(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`);return e&&t}isDepositCollateralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`)}isWithdrawCollateralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`)}isBorrowTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow`)}isBorrowWithBoostTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`);return e&&t}isBorrowWithReferralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`)}isRepayTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::repay::repay`)}isRepayWithBoostTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::repay::repay`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`);return e&&t}isUnstakeSpoolTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::unstake`)}isCreateStakeAccountTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::new_spool_account`)}isClaimRewardTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::redeem_rewards`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`);return e||t}isOpenObligationTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::open_obligation::open_obligation`)}isMigrateAndClaim(){let e=this.hasMoveCallCommand(`${ll}::user::redeem_rewards`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`),n=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake`);return e&&(t||n)}get helperClaimLendingReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperClaimBorrowV2Reward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new W(e,this.transaction)}get helperClaimBorrowReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${ll}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperMint(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::mint::mint`));return new W(e,this.transaction)}get helperUnstakes(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new W(t,this.transaction))}get helperRedeems(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new W(t,this.transaction))}get helperRedeem(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`));return new W(e,this.transaction)}get helperBurnScoin(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new W(e,this.transaction)}get helperStake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::stake`));return new W(e,this.transaction)}get helperUnstake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`));return new W(e,this.transaction)}get helperDepositCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new W(e,this.transaction)}get helperWithdrawCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new W(e,this.transaction)}get helperBorrow(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow`));return new W(e,this.transaction)}get helperBorrowWithReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new W(e,this.transaction)}get helperRepay(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::repay::repay`));return new W(e,this.transaction)}decodeMigrateScoin(){return{txType:Pt.Other,type:"MigrateScoin",intentionData:{}}}decodeMigrateAndClaim(){let e;this.helperStakeObligationWithVeSca.moveCall&&(e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let t=this.helperClaimBorrowReward[0].decodeOwnedObjectId(2),n=this.helperClaimBorrowReward[0].decodeSharedObjectId(3),o=this.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:Pt.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:Pt.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Rt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Pt.Other,type:"SupplyLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLending(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),t=this.helperRedeem.getNestedInputParam(2),n=new Rt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Pt.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLendingScoin(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0));console.log({coinName:e});let t=this.helperBurnScoin.getNestedInputParam(1),n=new Rt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Pt.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeDepositCollateral(){let e=this.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),t=this.helperDepositCollateral.getNestedInputParam(3),n=new Rt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:Pt.Other,type:"DepositCollateral",intentionData:{amount:n,obligationId:o,collateralCoinName:e}}}decodeWithdrawCollateral(){let e=this.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),t=this.helperWithdrawCollateral.decodeInputU64(5),n=this.helperWithdrawCollateral.decodeSharedObjectId(1),o=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"WithdrawCollateral",intentionData:{amount:t,collateralCoinName:e,obligationKey:o,obligationId:n}}}decodeBorrow(){let e=this.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),t=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),o=this.helperBorrow.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"Borrow",intentionData:{amount:t,coinName:e,obligationKey:o,obligationId:n}}}decodeBorrowWithBoost(){let e=this.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperBorrow.decodeInputU64(5),o=this.helperBorrow.decodeSharedObjectId(1),i=this.helperBorrow.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:e,obligationKey:i,obligationId:o,veScaKey:t}}}decodeBorrowWithReferral(){let e=this.utils.parseCoinNameFromType(this.helperBorrowWithReferral.typeArg(0)),t;this.helperStakeObligationWithVeSca.moveCall&&(t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let n=this.helperBorrowWithReferral.decodeInputU64(6),o=this.helperBorrowWithReferral.decodeSharedObjectId(1),i=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:e,obligationKey:i,obligationId:o,veScaKey:t}}}decodeRepay(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperRepay.getNestedInputParam(3),n=new Rt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:Pt.Other,type:"Repay",intentionData:{amount:n,obligationId:o,coinName:e}}}decodeRepayWithBoost(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperRepay.getNestedInputParam(3),o=new Rt(n,this.transaction).getAmountInput().reduce((s,l)=>s+l,0),i=this.helperRepay.decodeSharedObjectId(1);return{txType:Pt.Other,type:"RepayWithBoost",intentionData:{amount:o,obligationId:i,coinName:e,veScaKey:t}}}decodeStakeSpool(){let e;this.isCreateStakeAccountTransaction()||(e=this.helperStake.decodeOwnedObjectId(1));let t=0;if(this.helperBurnScoin.moveCall){let i=this.helperBurnScoin.getNestedInputParam(1);t=new Rt(i,this.transaction).getAmountInput().reduce((s,l)=>s+l,0)}if(this.helperStake.moveCall&&t===0){let i=this.helperStake.getNestedInputParam(2);t=new Rt(i,this.transaction).getAmountInput().reduce((s,l)=>s+l,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Pt.Other,type:"StakeSpool",intentionData:{amount:t,marketCoinName:o,stakeAccountId:e}}}decodeUnstakeSpool(){let e=this.helperUnstake.decodeOwnedObjectId(1),t=this.helperUnstake.decodeInputU64(2),n=this.helperUnstake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Pt.Other,type:"UnstakeSpool",intentionData:{amount:t,marketCoinName:o,stakeAccountId:e}}}decodeSupplyWithStakeSpool(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Rt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:Pt.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let e=[];this.helperUnstakes.forEach(o=>{let i=o.decodeOwnedObjectId(1),s=o.decodeInputU64(2);e.push({id:i,coin:s})});let t=this.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let o=this.helperBurnScoin.getNestedInputParam(1);n=new Rt(o,this.transaction).getAmountInput().reduce((i,s)=>i+s,0)}return{txType:Pt.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:e}}}decodeClaimReward(){let e=[],t=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let i=o.decodeOwnedObjectId(2),s=o.typeArg(0),l=this.utils.parseCoinNameFromType(s);e.push({stakeMarketCoinName:l,stakeAccountId:i})}),this.helperClaimBorrowV2Reward.forEach(o=>{let i=o.decodeSharedObjectId(4),s=o.decodeOwnedObjectId(3),l=this.utils.parseCoinNameFromType(o.typeArg(0));t.push({obligationId:s,obligationKey:i,rewardCoinName:l})}),this.helperClaimBorrowReward.forEach(o=>{let i=o.decodeSharedObjectId(2),s=o.decodeOwnedObjectId(3),l=this.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:s,obligationKey:i,rewardCoinName:l})}),{txType:Pt.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as Zr}from"@msafe/sui3-utils";var ia=class extends ue{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(t=>new W(t,this.transaction))}get helperBindReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new W(e,this.transaction)}decodeCreateReferralLink(){return{txType:Zr.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Zr.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:Zr.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as te}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as nd}from"@scallop-io/sui-scallop-sdk";var ra=class extends ue{async decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca();if(this.isMergeVeSca())return this.decodeMergeVesca();if(this.isSplitVeSca())return this.decodeSplitVesca();if(this.isVeScaObligationBindings())return this.decodeVeScaObligationBindings();if(await this.isTransferVeScaKey())return this.decodeTransferVeScaKey()}isStakeScaFirsTime(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let e=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),t=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!e&&!!t}isRedeemSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}isMergeVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::merge`)}isSplitVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::split`)}isVeScaObligationBindings(){let e=this.commands.filter(l=>this.filterMoveCallCommands(l,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`)),t=this.commands.filter(l=>this.filterMoveCallCommands(l,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`)),n=this.commands.filter(l=>this.filterMoveCallCommands(l,`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`)),o=e.length>0&&t.length>0&&e.length===t.length,i=n.length>0;return this.commands.length===e.length+t.length+n.length&&(o||i)}async isTransferVeScaKey(){let e=this.commands.filter(d=>d.$kind==="TransferObjects");if(e.length!==1)return!1;let{objects:t}=e[0].TransferObjects,n=t.filter(d=>d.$kind==="Input").map(({Input:d})=>d);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((d,b)=>d.$kind==="Object"&&o.has(b)).map(d=>d.Object.ImmOrOwnedObject),s=`${this.coreId.veScaObjId}::ve_sca::VeScaKey`,l=cl(i.map(({objectId:d})=>d),50);for(let d=0;d<l.length;d++){let b=l[d];if((await this.scallopClient.scallopSuiKit.queryGetObjects(b,{showType:!0})).some(C=>C.type!==s))return!1}return i.length>0}get helperStakeMoreSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new W(e,this.transaction)}get helperStakeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new W(e,this.transaction)}get helperExtendStakePeriod(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new W(e,this.transaction)}get helperRedeemSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new W(e,this.transaction)}get helperRenewExpired(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new W(e,this.transaction)}get helperOldUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${nd}::user::unstake`));return new W(e,this.transaction)}get helperUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`));return new W(e,this.transaction)}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new W(e,this.transaction)}getMergeSplitVeScaHelper(e){let t=this.commands.find(n=>this.filterMoveCallCommands(n,`${this.coreId.veScaPkgId}::ve_sca::${e}`));return new W(t,this.transaction)}getVeScaObligationBindingHelpers(){let e=`${this.coreId.borrowIncentivePkg}::user::unstake_v2`,t=`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,n=`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`,o=[],i=0,s=0,l=0;return this.commands.forEach(d=>{this.filterMoveCallCommands(d,e)?(o.push({action:"unstake",helper:new W(d,this.transaction,i)}),i++):this.filterMoveCallCommands(d,t)?(o.push({action:"stake",helper:new W(d,this.transaction,s)}),s++):this.filterMoveCallCommands(d,n)&&(o.push({action:"deactivate",helper:new W(d,this.transaction,l)}),l++)}),o}decodeRedeemSca(){let e=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:te.Other,type:"RedeemSca",intentionData:{veScaKey:e}}}decodeRenewExpiredVeSca(){let e=this.helperRenewExpired.getNestedInputParam(4),t=this.helperRenewExpired.decodeInputU64(5),n=new Rt(e,this.transaction).getAmountInput().reduce((k,P)=>k+P,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),i=!!this.helperRedeemSca.moveCall,s=[],l=[],d=[];this.helperOldUnstakeObligation.moveCall&&(s=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(l=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(d=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let b=!1,I=!1,C,x,D=[{condition:s,isOld:!0},{condition:l,isOld:!1},{condition:d,isOld:!1}];for(let k=0;k<D.length;k++)D[k].condition.length>1&&([x,C]=D[k].condition,b=!0,I=D[k].isOld);return{txType:te.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:C,obligationKey:x,veScaKey:o,isHaveRedeem:i,isObligationLocked:b,isOldBorrowIncentive:I}}}decodeExtendStakePeriod(){let e=this.helperExtendStakePeriod.decodeInputU64(4),t=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],i=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(o=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(i=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let s=!1,l=!1,d,b,I=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:i,isOld:!1}];for(let C=0;C<I.length;C++)I[C].condition.length>1&&([b,d]=I[C].condition,s=!0,l=I[C].isOld);return{txType:te.Other,type:"ExtendStakePeriod",intentionData:{unlockTime:e,obligationId:d,obligationKey:b,veScaKey:t,isObligationLocked:s,isOldBorrowIncentive:l}}}decodePeriodAndStakeMoreSca(){let e=this.helperStakeMoreSca.getNestedInputParam(4),t=this.helperExtendStakePeriod.decodeInputU64(4),n=new Rt(e,this.transaction).getAmountInput().reduce((D,k)=>D+k,0),o=[],i=[],s,l=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(i=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(l=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,b=!1,I,C,x=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:l,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([C,I]=x[D].condition,d=!0,b=x[D].isOld);return{txType:te.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:s,unlockTime:t,obligationId:I,obligationKey:C,isOldBorrowIncentive:b,isObligationLocked:d}}}decodeStakeSca(){let e,t;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(e=this.helperStakeSca.getNestedInputParam(3),t=this.helperStakeSca.decodeInputU64(4)):e=this.helperStakeMoreSca.getNestedInputParam(4);let n=new Rt(e,this.transaction).getAmountInput().reduce((D,k)=>D+k,0),o=[],i=[],s,l=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(i=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(l=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,b=!1,I,C,x=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:l,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([C,I]=x[D].condition,d=!0,b=x[D].isOld);return{txType:te.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:I,obligationKey:C,veScaKey:s,isObligationLocked:d,isOldBorrowIncentive:b}}}decodeMergeVesca(){let e=this.getMergeSplitVeScaHelper("merge"),t={targetVeScaKey:e.decodeOwnedObjectId(1),sourceVeScaKey:e.decodeOwnedObjectId(2)};return{txType:te.Other,type:"MergeVeSca",intentionData:t}}decodeSplitVesca(){let e=this.getMergeSplitVeScaHelper("split"),t={targetVeScaKey:e.decodeOwnedObjectId(1),splitAmount:e.decodeInputU64(4)};return{txType:te.Other,type:"SplitVeSca",intentionData:t}}decodeVeScaObligationBindings(){let e=this.getVeScaObligationBindingHelpers(),t=(o,i)=>{switch(o){case"stake":return{veScaKey:i.decodeOwnedObjectId(9),obligationId:i.decodeSharedObjectId(4),obligationKey:i.decodeOwnedObjectId(3)};case"unstake":return{obligationId:i.decodeSharedObjectId(4),obligationKey:i.decodeOwnedObjectId(3)};case"deactivate":return{veScaKey:i.decodeOwnedObjectId(4),obligationId:i.decodeSharedObjectId(3)};default:throw new Error(`Invalid action ${o}`)}},n=e.map(({action:o,helper:i})=>({action:o,args:t(o,i)}));return{txType:te.Other,type:"VeScaObligationBindings",intentionData:{bindingDatas:n}}}decodeTransferVeScaKey(){let e=this.commands.filter(s=>s.$kind==="TransferObjects"),{objects:t}=e[0].TransferObjects,n=t.filter(s=>s.$kind==="Input").map(({Input:s})=>s);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((s,l)=>s.$kind==="Object"&&o.has(l)).map(s=>s.Object.ImmOrOwnedObject);return{xType:te.Other,type:"TransferVeScaKeys",intentionData:{veScaKeys:i}}}};import od from"sort-keys-recursive";var A=class{constructor(e){this.data=e}get application(){return"msafe-core"}serialize(){return JSON.stringify(od(this.data))}isObligationLocked=async(e,t)=>{let n=await e.getObject({id:typeof t=="string"?t:t.objectId,options:{showContent:!0}}),o=!1;return n&&n?.data.content?.dataType==="moveObject"&&"lock_key"in n.data.content.fields&&(o=!!n.data.content.fields.lock_key),o};async buildTxWithRefreshObligation(e,t,n){let o=e.builder.createTxBlock();o.setSender(t.walletAddress);let{obligationId:i,obligationKey:s}=t;return await this.isObligationLocked(e.scallopSuiKit.client,i)?(await o.unstakeObligationQuick(i,s),await n(e,o,t),await o.stakeObligationWithVeScaQuick(i,s,t.veScaKey)):await n(e,o,t),o}};var sa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrow({account:t,scallopClient:n}){let{coinName:o,amount:i,obligationId:s,obligationKey:l}=this.data,d=t.address;return(await this.buildTxWithRefreshObligation(n,{walletAddress:d,obligationId:s,obligationKey:l},async(I,C)=>{let x=await C.borrowQuick(+i,o,s,l);C.transferObjects([x],d)})).txBlock}async build(t){return this.borrow(t)}static fromData(t){return new a(t)}};var ca=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithBoost(t,n){let{obligationId:o,obligationKey:i,veScaKey:s,amount:l,coinName:d}=this.data;return(await this.buildTxWithRefreshObligation(t,{walletAddress:n,obligationId:o,obligationKey:i,veScaKey:s},async(I,C)=>{let x=await C.borrowQuick(+l,d,o,i);C.transferObjects([x],n)})).txBlock}async build(t){return this.borrowWithBoost(t.scallopClient,t.account.address)}static fromData(t){return new a(t)}};var la=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithReferral({account:t,scallopClient:n}){let o=t.address,{obligationId:i,obligationKey:s,veScaKey:l,coinName:d,amount:b}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:i,obligationKey:s,veScaKey:l},async(C,x)=>{let D=x.claimReferralTicket(d),k=await x.borrowWithReferralQuick(+b,d,D,i,s);x.burnReferralTicket(D,d),x.transferObjects([k],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new a(t)}};import{SUI_TYPE_ARG as ad}from"@mysten/sui/utils";var ua=class a extends A{txType;txSubType;constructor(e={}){super(e)}async claimIncentiveRewards(e,t){let n=e.builder.createTxBlock();n.setSender(t);let o=await e.query.getAllStakeAccounts(t),i=await e.query.getLendings(void 0,t),s=await e.query.getObligations(t),l=Object.values(await e.query.getObligationAccounts(t)??[]),d=(()=>{let x=[...e.constants.whitelist.spool].map(D=>e.utils.parseCoinName(D));return Object.values(i??[]).filter(D=>!!D&&x.includes(D.coinName)).reduce((D,k)=>{let P=e.utils.parseMarketCoinName(k.coinName);return D[P]||(D[P]=0),D[P]+=k.availableClaimCoin,D},{})})(),b={};Object.entries(o).forEach(([x,D])=>{for(let k=0;k<D.length;k++){let P=D[k];if(!d[x])continue;let U=n.claim(P.id,x);b.sui?b.sui.push(U):b.sui=[U]}});let I=(()=>{let x={};return x.sui=Object.values(d).reduce((D,k)=>D+k,0),l.forEach(D=>{Object.values(D.borrowIncentives).forEach(k=>{k&&k.rewards.forEach(P=>{x[P.coinName]||(x[P.coinName]=0),x[P.coinName]?x[P.coinName]+=P.availableClaimCoin:x[P.coinName]=P.availableClaimCoin})})}),x})();if(s.length>0&&l.length>0)for(let x=0;x<l.length;x++){let D=l[x],k=!1,P=s.find(K=>K.id===D.obligationId)?.keyId,U={};if(P){if(Object.values(D.borrowIncentives).forEach(K=>{if(K){let Bt=K.rewards.filter(Et=>{let Mt=Et.coinName;return Et.availableClaimCoin>0&&!U[Mt]});k=Bt.length>0,Bt.forEach(Et=>{let Mt=n.claimBorrowIncentive(D.obligationId,P,Et.coinName);U[Et.coinName]=!0,b[Et.coinName]?b[Et.coinName].push(Mt):b[Et.coinName]=[Mt]})}}),I.sui>0){let K=Kt.redeem_rewards(n,P,D.obligationId,ad);b.sui?b.sui.push(K):b.sui=[K]}if(k&&await sl(e.query,D.obligationId)){n.unstakeObligation(D.obligationId,P);let Bt=await e.query.getBindedVeScaKey(D.obligationId);Bt?n.stakeObligationWithVesca(D.obligationId,P,Bt):n.stakeObligation(D.obligationId,P)}}}let C=(await Promise.all(Object.entries(b).map(async([x,D])=>{let k=D[0];if(D.length>1&&n.mergeCoins(k,D.slice(1)),x==="sui"){n.mergeCoins(n.gas,[k]);return}return await e.builder.utils.mergeSimilarCoins(n,k,e.utils.parseCoinType(x),t),k}))).filter(x=>!!x);return C.length>0&&n.transferObjects(C,t),n.txBlock}async build(e){return this.claimIncentiveRewards(e.scallopClient,e.account.address)}static fromData(e={}){return new a(e)}};var ma=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.depositCollateral(this.data.collateralCoinName,+this.data.amount,!1,this.data.obligationId)}static fromData(t){return new a(t)}};var pa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async migrateAndClaim({account:t,scallopClient:n}){let o=t.address,{obligationKey:i,obligationId:s,rewardCoinName:l,veScaKey:d}=this.data,b=n.builder.createTxBlock();b.setSender(o);let I=Kt.redeem_rewards(b,i,s,n.utils.parseCoinType(l));return b.transferObjects([I],o),await b.unstakeObligationQuick(s,i),d?await b.stakeObligationWithVeScaQuick(s,i,d):await b.stakeObligationQuick(s,i),b.txBlock}async build(t){return this.migrateAndClaim(t)}static fromData(t){return new a(t)}};var da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.migrateAllMarketCoin(!1,!1)}static fromData(t){return new a(t)}};var fa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.openObligation(!1)}static fromData(t){return new a(t)}};var ha=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repay({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:l,obligationKey:d}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:l,obligationKey:d},async(I,C)=>{await C.repayQuick(+s,i,l)})).txBlock}async build(t){return this.repay(t)}static fromData(t){return new a(t)}};var ga=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repayWithBoost({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:l,veScaKey:d}=this.data,b=n.builder.createTxBlock();b.setSender(o);let I=n.constants.whitelist.borrowing.has(i);return I&&await b.unstakeObligationQuick(l,void 0),await b.repayQuick(+s,i,l),I&&await b.stakeObligationWithVeScaQuick(l,void 0,d),b.txBlock}async build(t){return this.repayWithBoost(t)}static fromData(t){return new a(t)}};var ya=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.deposit(this.data.coinName,+this.data.amount,!1,t.account.address)}static fromData(t){return new a(t)}};var ba=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.unstake(this.data.marketCoinName,+this.data.amount,!1)}static fromData(t){return new a(t)}};var Ta=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async unstakeAndWithdraw(t,n,o){let i=t.builder.createTxBlock();i.setSender(o);let{stakeAccountId:s,amount:l,coinName:d}=this.data,b=[];for(let I=0;I<s.length;I++){let{id:C,coin:x}=s[I],D=t.utils.parseMarketCoinName(d),[k]=await i.unstakeQuick(x,D,C);if(k){let P=i.withdraw(k,d);b.push(P)}}if(l>0){let I=await i.withdrawQuick(l,d);b.push(I)}return b.length>1&&i.mergeCoins(b[0],b.slice(1)),i.transferObjects(b,o),i.txBlock}async build(t){return this.unstakeAndWithdraw(t.scallopClient,this.data,t.account.address)}static fromData(t){return new a(t)}};var Sa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),!1,this.data.obligationId,this.data.obligationKey,t.account.address)}static fromData(t){return new a(t)}};var Ia=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.withdraw(this.data.coinName,Number(this.data.amount),!1,t.account.address)}static fromData(t){return new a(t)}};var wa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async bindReferral({account:t,scallopClient:n}){let o=t.address,i=n.builder.createTxBlock();return i.setSender(o),i.bindToReferral(this.data.veScaKey),i.txBlock}async build(t){return this.bindReferral(t)}static fromData(t){return new a(t)}};var Ca=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async claimRevenueReferral({account:t,scallopClient:n}){let{veScaKey:o,coins:i}=this.data,s=t.address,l=n.builder.createTxBlock();l.setSender(s);let d=i.map(b=>n.utils.parseCoinNameFromType(b));return await l.claimReferralRevenueQuick(o,d),l.txBlock}async build(t){return this.claimRevenueReferral(t)}static fromData(t){return new a(t)}};var xa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async createReferralLink({account:t,scallopClient:n}){let o=t.address,i=n.builder.createTxBlock();i.setSender(o);let s=i.mintEmptyVeSca();return i.transferObjects([s],o),i.txBlock}async build(t){return this.createReferralLink(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as id}from"@scallop-io/sui-scallop-sdk";var Da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendPeriodAndStakeMoreSca({account:t,scallopClient:n}){let{amount:o,veScaKey:i,unlockTime:s,obligationId:l,obligationKey:d,isOldBorrowIncentive:b,isObligationLocked:I}=this.data,C=t.address,x=n.builder.createTxBlock();x.setSender(C);let D=await n.utils.selectCoins(o,id,C),[k,P]=x.takeAmountFromCoins(D,o);return x.extendLockPeriod(i,s),x.extendLockAmount(i,k),x.transferObjects([P],C),!l||!d||(I&&(b?Kt.unstakeObligation(x,l,d):x.unstakeObligation(l,d)),x.stakeObligationWithVesca(l,d,i)),x.txBlock}async build(t){return this.extendPeriodAndStakeMoreSca(t)}static fromData(t){return new a(t)}};var ka=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendStakeScaLockPeriod({account:t,scallopClient:n}){let o=t.address,{veScaKey:i,unlockTime:s,obligationId:l,obligationKey:d,isObligationLocked:b,isOldBorrowIncentive:I}=this.data,C=n.builder.createTxBlock();return C.setSender(o),C.extendLockPeriod(i,s),l&&d&&(b&&(I?Kt.unstakeObligation(C,d,l):C.unstakeObligation(l,d)),C.stakeObligationWithVesca(l,d,i)),C.txBlock}async build(t){return this.extendStakeScaLockPeriod(t)}static fromData(t){return new a(t)}};var va=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,sourceVeScaKey:s}=this.data,[l,d]=await Promise.all([n.getBindedObligationId(i),n.getBindedObligationId(s)]);l&&await t.unstakeObligationQuick(l),d&&await t.unstakeObligationQuick(d),o(t,i,s),l&&await t.stakeObligationWithVeScaQuick(l,void 0,i),d&&await t.stakeObligationWithVeScaQuick(d,void 0,s)}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();return i.setSender(o),await this.handleUnsubForKeys(i,n.query,async(s,l,d)=>{s.mergeVeSca(i.object(l),i.object(d))}),i.txBlock}static fromData(t){return new a(t)}};var Aa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async redeemSca({account:t,scallopClient:n}){let{veScaKey:o}=this.data,i=t.address,s=n.builder.createTxBlock();return s.setSender(i),await s.redeemScaQuick({veScaKey:o}),s.txBlock}async build(t){return this.redeemSca(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as rd}from"@scallop-io/sui-scallop-sdk";var Ma=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async renewExpiredStakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,unlockTime:s,veScaKey:l,isHaveRedeem:d,obligation:b,obligationKey:I,isObligationLocked:C,isOldBorrowIncentive:x}=this.data,D=n.builder.createTxBlock();if(D.setSender(o),d){let K=D.redeemSca(l);D.transferObjects([K],o)}let k=await n.builder.utils.selectCoins(i,rd,o),[P,U]=D.takeAmountFromCoins(k,i);return D.transferObjects([U],o),D.renewExpiredVeSca(l,P,s),!b||!I||(C&&(x?Kt.unstakeObligation(D,I,b):D.unstakeObligation(b,I)),D.stakeObligationWithVesca(b,I,l)),D.txBlock}async build(t){return this.renewExpiredStakeSca(t)}static fromData(t){return new a(t)}};var Oa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,splitAmount:s}=this.data,l=await n.getBindedObligationId(i);l&&await t.unstakeObligationQuick(l),o(t,i,s.toString()),l&&await t.stakeObligationWithVeScaQuick(l,void 0,i)}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();return i.setSender(o),await this.handleUnsubForKeys(i,n.query,(s,l,d)=>{let b=s.splitVeSca(l,d.toString());s.transferObjects([b],o)}),i.txBlock}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as sd}from"@scallop-io/sui-scallop-sdk";var Pa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async stakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,isObligationLocked:s,isOldBorrowIncentive:l,obligationId:d,obligationKey:b,unlockTime:I,veScaKey:C}=this.data,x=n.builder.createTxBlock();x.setSender(o);let D=await n.utils.selectCoins(i,sd,o),[k,P]=x.takeAmountFromCoins(D,i),U;return C?x.extendLockAmount(C,k):U=x.lockSca(k,I),d&&b&&(s&&(l?Kt.unstakeObligation(x,b,d):x.unstakeObligation(d,b)),x.stakeObligationWithVesca(d,b,C||U)),C||x.transferObjects([U,P],o),x.txBlock}async build(t){return this.stakeSca(t)}static fromData(t){return new a(t)}};var Ra=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async supplyAndStake({account:t,scallopClient:n}){let o=t.address,{amount:i,coinName:s,stakeAccountId:l}=this.data,d=n.builder.createTxBlock();d.setSender(o);let b=await d.depositQuick(+i,s),I=n.utils.parseMarketCoinName(s);if(n.constants.whitelist.spool.has(I))return d.txBlock;let C=await n.query.getStakeAccounts(I,o),x=l||(C.length>0?C[0].id:void 0);if(x)await d.stakeQuick(b,I,x);else{let D=d.createStakeAccount(I);await d.stakeQuick(b,I,D),d.transferObjects([D],o)}return d.txBlock}async build(t){return this.supplyAndStake(t)}static fromData(t){return new a(t)}};var Ba=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;handleAction(t,{action:n,args:o}){switch(n){case"deactivate":return t.deactivateBoost(o.obligationId,o.veScaKey);case"stake":return t.stakeObligationWithVesca(o.obligationId,o.obligationKey,o.veScaKey);case"unstake":return t.unstakeObligation(o.obligationId,o.obligationKey);default:throw new Error("Invalid action")}}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();i.setSender(o);let{bindingDatas:s}=this.data;return s.forEach(l=>this.handleAction(i,l)),i.txBlock}static fromData(t){return new a(t)}};var Ea=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();i.setSender(o);let{veScaKeys:s}=this.data;return i.transferObjects(s.map(l=>i.objectRef(l)),i.pure.address(o)),i.txBlock}static fromData(t){return new a(t)}};var Wa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async withdrawUnlockedSca({account:t,scallopClient:n}){let{vescaKey:o}=this.data,i=t.address,s=n.builder.createTxBlock();return s.setSender(i),await s.redeemScaQuick({veScaKey:o}),s.txBlock}async build(t){return this.withdrawUnlockedSca(t)}static fromData(t){return new a(t)}};var Na=class{application="scallop";supportSDK="@mysten/sui";scallopClient;async initScallopClient(e,t){if(!this.scallopClient){let n=new ud({addressId:"67c44a103fe1b8c454eb9699",walletAddress:e,suiClients:[t],fullnodeUrls:[t.transport.rpcClient.requestManager.transports[0]?.uri??ld("mainnet")]});this.scallopClient=await n.createScallopClient()}}async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;await this.initScallopClient(o.address,n),console.log("transaction",t);let i=new aa(t,this.scallopClient),s=new ia(t,this.scallopClient),l=new ra(t,this.scallopClient),d=i.decode()||s.decode()||await l.decode();if(!d)throw new Error("Unknown transaction type");return{txType:cd.Other,txSubType:d.type,intentionData:d.intentionData}}async build(e){let{suiClient:t,account:n,network:o,txSubType:i,intentionData:s}=e;await this.initScallopClient(n.address,t);let l;switch(i){case"SupplyLending":l=ya.fromData(s);break;case"WithdrawLending":l=Ia.fromData(s);break;case"Borrow":l=sa.fromData(s);break;case"Repay":l=ha.fromData(s);break;case"DepositCollateral":l=ma.fromData(s);break;case"WithdrawCollateral":l=Sa.fromData(s);break;case"OpenObligation":l=fa.fromData(s);break;case"UnstakeSpool":l=ba.fromData(s);break;case"ClaimIncentiveReward":l=ua.fromData(s);break;case"BorrowWithBoost":l=ca.fromData(s);break;case"StakeSca":l=Pa.fromData(s);break;case"ExtendStakePeriod":l=ka.fromData(s);break;case"ExtendPeriodAndStakeMore":l=Da.fromData(s);break;case"RenewExpStakePeriod":l=Ma.fromData(s);break;case"WithdrawStakedSca":l=Wa.fromData(s);break;case"SupplyAndStakeLending":l=Ra.fromData(s);break;case"WithdrawAndUnstakeLending":l=Ta.fromData(s);break;case"RedeemSca":l=Aa.fromData(s);break;case"MigrateAndClaim":l=pa.fromData(s);break;case"BorrowWithReferral":l=la.fromData(s);break;case"CreateReferralLink":l=xa.fromData(s);break;case"ClaimRevenueReferral":l=Ca.fromData(s);break;case"BindReferral":l=wa.fromData(s);break;case"MigrateScoin":l=da.fromData(s);break;case"RepayWithBoost":l=ga.fromData(s);break;case"MergeVeSca":l=va.fromData(s);break;case"SplitVeSca":l=Oa.fromData(s);break;case"VeScaObligationBindings":{l=Ba.fromData(s);break}case"TransferVeScaKeys":{l=Ea.fromData(s);break}default:throw new Error("not implemented")}return l.build({suiClient:t,account:n,network:o,scallopClient:this.scallopClient})}};import{TransactionType as Kd}from"@msafe/sui3-utils";import{TransactionType as sn}from"@msafe/sui3-utils";import{normalizeStructTag as be}from"@mysten/sui/utils";import{API_URL as kd}from"@suilend/sui-fe";import{TransactionType as Cd}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as xd,LENDING_MARKET_TYPE as Dd,SuilendClient as ts}from"@suilend/sdk";import{TransactionType as Ee}from"@msafe/sui3-utils";import{fromBase64 as ul,toHex as ml}from"@mysten/bcs";import{normalizeStructTag as an}from"@mysten/sui/utils";import{MAX_U64 as We}from"@suilend/sui-fe";import pl from"bignumber.js";var _a=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimTransaction())return this.decodeClaim();if(this.isClaimAndDepositTransaction())return this.decodeClaimAndDeposit();throw new Error("Unknown transaction type")}get inputs(){return console.log("this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("this.transaction.getData().commands",this.transaction.getData().commands),this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasClaimTransactionMoveCallCommands(){return!!this.getMoveCallCommand("claim_rewards")}isDepositTransaction(){return!this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity_request")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow_request")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimTransaction(){return this.hasClaimTransactionMoveCallCommands()&&!this.hasDepositTransactionMoveCallCommands()}isClaimAndDepositTransaction(){return this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}decodeDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("lending_market::MintEvent"))},t=an(e.MintEvent.parsedJson.coin_type.name),n=e.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",t,n),{txType:Ee.Other,type:"deposit",intentionData:{coinType:t,value:n}}}decodeWithdraw(){let e={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},t={RedeemEvent:this.simResult.events.find(d=>d.type.includes("lending_market::RedeemEvent"))},n=an(t.RedeemEvent.parsedJson.coin_type.name),o=t.RedeemEvent.parsedJson.liquidity_amount;console.log("Decoder.decodeWithdraw",n,o);let i=e.withdraw_ctokens.MoveCall.arguments[4].Input,s=new pl(ml(ul(this.inputs[i].Pure.bytes)),16).toString(),l=s===We.toString();return console.log("decodeWithdraw - isMax:",l,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",We.toString()),l&&(o=We.toString()),{txType:Ee.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let e={borrow_request:this.getMoveCallCommand("borrow_request")},t={BorrowEvent:this.simResult.events.find(d=>d.type.includes("lending_market::BorrowEvent"))},n=an(t.BorrowEvent.parsedJson.coin_type.name),o=`${+t.BorrowEvent.parsedJson.liquidity_amount-+t.BorrowEvent.parsedJson.origination_fee_amount}`;console.log("Decoder.decodeBorrow",n,o);let i=e.borrow_request.MoveCall.arguments[4].Input,s=new pl(ml(ul(this.inputs[i].Pure.bytes)),16).toString(),l=s===We.toString();return console.log("decodeBorrow - isMax:",l,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",We.toString()),l&&(o=We.toString()),{txType:Ee.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let e={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},t=an(e.RepayEvent.parsedJson.coin_type.name),n=e.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",t,n),{txType:Ee.Other,type:"repay",intentionData:{coinType:t,value:n}}}decodeClaim(){let e={ClaimReward:this.simResult.events.filter(n=>n.type.includes("lending_market::ClaimReward"))},t={};for(let n=0;n<e.ClaimReward.length;n++){let o=e.ClaimReward[n],i=an(o.parsedJson.coin_type.name),s=o.parsedJson.liquidity_amount;t[i]=`${+(t[i]??"0")+ +s}`}return console.log("Decoder.decodeClaimRewards",t),{txType:Ee.Other,type:"claim",intentionData:{value:t}}}decodeClaimAndDeposit(){return{txType:Ee.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as dd}from"@mysten/sui/transactions";import pd from"sort-keys-recursive";var _t=class{constructor(e){this.data=e}serialize(){return JSON.stringify(pd(this.data))}};var La=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("BorrowIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new dd;return await i.borrowAndSendToUser(o.address,s.id,l.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("BorrowIntention.fromData",t),new a(t)}};import{Transaction as bd}from"@mysten/sui/transactions";import{normalizeStructTag as fd}from"@mysten/sui/utils";import{Side as rn}from"@suilend/sdk";import{isSendPoints as hd}from"@suilend/sui-fe";import gd from"bignumber.js";var yd=(a,e)=>{let t={[rn.DEPOSIT]:[],[rn.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[rn.DEPOSIT,rn.BORROW].forEach(o=>{let i=o===rn.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,s=e.userRewardManagers.find(l=>l.poolRewardManagerId===i.id);s&&(t[o]=i.poolRewards.map((l,d)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(d),rewardCoinType:fd(l.coinType.name),side:o})).filter(l=>!hd(l.rewardCoinType)&&!!s.rewards[Number(l.rewardIndex)]&&new gd(s.rewards[Number(l.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},ja=yd;var Ua=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("ClaimIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new bd;return i.claimRewardsAndSendToUser(o.address,s.id,ja(i,l),d),d}static fromData(t){return console.log("ClaimIntention.fromData",t),new a(t)}};import{Transaction as Td}from"@mysten/sui/transactions";var qa=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("ClaimAndDepositIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new Td;return i.claimRewardsAndDeposit(o.address,s.id,ja(i,l),d),d}static fromData(t){return console.log("ClaimAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Sd}from"@mysten/sui/transactions";var Fa=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;console.log("DepositIntention.build",n,o,i,s,l);let d=new Sd;return await i.depositIntoObligation(o.address,this.data.coinType,this.data.value,d,s?.id),d}static fromData(t){return console.log("DepositIntention.fromData",t),new a(t)}};import{Transaction as Id}from"@mysten/sui/transactions";var Ka=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("RepayIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new Id;return await i.repayIntoObligation(o.address,l.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("RepayIntention.fromData",t),new a(t)}};import{Transaction as wd}from"@mysten/sui/transactions";var Va=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("WithdrawIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new wd;return await i.withdrawAndSendToUser(o.address,s.id,l.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};var $a=async(a,e)=>{let t=await ts.initialize(xd,Dd,a),n=await ts.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(i=>ts.getObligation(i.obligationId,t.lendingMarket.$typeArgs,a)));return console.log("XXX getUtils - suilendClient:",t,"obligations:",o,"obligationOwnerCaps:",n),{suilendClient:t,obligationOwnerCaps:n,obligations:o}},Ha=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await $a(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SuilendAppHelper.deserialize - simResult:",i,"utils:",this.utils,"suiClient:",n);let l=new _a(t,i).decode();return{txType:Cd.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await $a(i,s));let l;switch(n){case"deposit":l=Fa.fromData(o);break;case"withdraw":l=Va.fromData(o);break;case"borrow":l=La.fromData(o);break;case"repay":l=Ka.fromData(o);break;case"claim":l=Ua.fromData(o);break;case"claimAndDeposit":l=qa.fromData(o);break;default:throw new Error("not implemented")}let d=window.localStorage.getItem("obligationId"),b=this.utils.obligations?.find(C=>C.id===d)??this.utils.obligations?.[0],I=this.utils.obligationOwnerCaps?.find(C=>C.obligationId===b?.id);return l.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,obligationOwnerCap:I,obligation:b})}};var es=async(a,e)=>{let t=await $a(a,e),n=await fetch(`${kd}/springsui/lst-info`),o=await n.json();if(n?.statusCode===500)throw new Error("Failed to fetch SpringSui LST data");let s=Object.fromEntries(Object.values(o).map(l=>[l.LIQUID_STAKING_INFO.type,l.LIQUID_STAKING_INFO]));return{...t,LIQUID_STAKING_INFO_MAP:s}};var Xa=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isStakeTransaction())return this.decodeStake();if(this.isStakeAndDepositTransaction())return this.decodeStakeAndDeposit();if(this.isConvertTransaction())return this.decodeConvert();if(this.isConvertAndDepositTransaction())return this.decodeConvertAndDeposit();if(this.isUnstakeTransaction())return this.decodeUnstake();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasSuilendDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasMintMoveCallCommands(){return!!this.getMoveCallCommand("mint")}hasRedeemMoveCallCommands(){return!!this.getMoveCallCommand("redeem")}isStakeTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isStakeAndDepositTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isConvertTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isConvertAndDepositTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isUnstakeTransaction(){return!this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}decodeStake(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=be(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStake",n),{txType:sn.Other,type:"stake",intentionData:{amount:n,outCoinType:t}}}decodeStakeAndDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=be(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStakeAndDeposit",n),{txType:sn.Other,type:"stakeAndDeposit",intentionData:{amount:n,outCoinType:t}}}decodeConvert(){let e={RedeemEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::MintEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=be(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvert",o),{txType:sn.Other,type:"convert",intentionData:{amount:o,inCoinType:t,outCoinType:n}}}decodeConvertAndDeposit(){let e={RedeemEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::MintEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=be(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvertAndDeposit",o),{txType:sn.Other,type:"convertAndDeposit",intentionData:{amount:o,inCoinType:t,outCoinType:n}}}decodeUnstake(){let e={RedeemEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::RedeemEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeUnstake",n),{txType:sn.Other,type:"unstake",intentionData:{amount:n,inCoinType:t}}}};import{Transaction as Md}from"@mysten/sui/transactions";import{LstClient as dl,convertLstsAndRebalanceAndSendToUser as Od}from"@suilend/springsui-sdk";import Ad from"sort-keys-recursive";var Vt=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Ad(this.data))}};var za=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("ConvertIntention.build",n,o,i,s,l,d);let b=await dl.initialize(n,Object.values(s).find(x=>x.type===this.data.inCoinType)),I=await dl.initialize(n,Object.values(s).find(x=>x.type===this.data.outCoinType)),C=new Md;return Od(b,I,C,o.address,this.data.amount),C}static fromData(t){return console.log("ConvertIntention.fromData",t),new a(t)}};import{Transaction as Pd}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Rd,sendObligationToUser as Bd}from"@suilend/sdk";import{LstClient as fl,convertLstsAndRebalance as Ed}from"@suilend/springsui-sdk";var Ga=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("ConvertAndDepositIntention.build",n,o,i,s,l,d);let b=await fl.initialize(n,Object.values(s).find(P=>P.type===this.data.inCoinType)),I=await fl.initialize(n,Object.values(s).find(P=>P.type===this.data.outCoinType)),C=new Pd,{obligationOwnerCapId:x,didCreate:D}=Rd(i,C,l),k=Ed(b,I,C,o.address,this.data.amount);return i.deposit(k,this.data.outCoinType,x,C),D&&Bd(x,o.address,C),C}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Wd}from"@mysten/sui/transactions";import{LstClient as Nd}from"@suilend/springsui-sdk";var Qa=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("StakeIntention.build",n,o,i,s,l,d);let b=await Nd.initialize(n,Object.values(s).find(C=>C.type===this.data.outCoinType)),I=new Wd;return b.mintAmountAndRebalanceAndSendToUser(I,o.address,this.data.amount),I}static fromData(t){return console.log("StakeIntention.fromData",t),new a(t)}};import{Transaction as _d}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Ld,sendObligationToUser as jd}from"@suilend/sdk";import{LstClient as Ud}from"@suilend/springsui-sdk";var Ja=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("StakeAndDepositIntention.build",n,o,i,s,l,d);let b=await Ud.initialize(n,Object.values(s).find(k=>k.type===this.data.outCoinType)),I=new _d,{obligationOwnerCapId:C,didCreate:x}=Ld(i,I,l),D=b.mintAmountAndRebalance(I,o.address,this.data.amount);return i.deposit(D,this.data.outCoinType,C,I),x&&jd(C,o.address,I),I}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new a(t)}};import{Transaction as qd}from"@mysten/sui/transactions";import{LstClient as Fd}from"@suilend/springsui-sdk";var Ya=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("UnstakeIntention.build",n,o,i,s,l,d);let b=await Fd.initialize(n,Object.values(s).find(C=>C.type===this.data.inCoinType)),I=new qd;return b.redeemAmountAndRebalanceAndSendToUser(I,o.address,this.data.amount),I}static fromData(t){return console.log("UnstakeIntention.fromData",t),new a(t)}};var Za=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await es(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SpringSuiAppHelper.deserialize",i);let l=new Xa(t,i).decode();return{txType:Kd.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await es(i,s));let l;switch(n){case"stake":l=Qa.fromData(o);break;case"stakeAndDeposit":l=Ja.fromData(o);break;case"convert":l=za.fromData(o);break;case"convertAndDeposit":l=Ga.fromData(o);break;case"unstake":l=Ya.fromData(o);break;default:throw new Error("not implemented")}return l.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,LIQUID_STAKING_INFO_MAP:this.utils.LIQUID_STAKING_INFO_MAP,obligationOwnerCap:this.utils.obligationOwnerCaps?.[0],obligation:this.utils.obligations?.[0]})}};import{TransactionType as Xd}from"@msafe/sui3-utils";import{TransactionType as hl}from"@msafe/sui3-utils";var ti=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isMintTransaction()){let e=this.getLiquidityChangeEvent("MintEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeMint(t)}if(this.isRedeemTransaction()){let e=this.getLiquidityChangeEvent("RedeemEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeRedeem(t)}throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getLiquidityChangeEvent(e){return this.simResult.events.find(t=>this.isLiquidityChangeEventType(t.type,e))}isLiquidityChangeEventType(e,t){return e.includes(t)}isMintTransaction(){return!!this.getMoveCallCommand("mint")}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(e){let{event:{sui_amount_in:t}}=e;return console.log("Decoder.decodeMint",t),{txType:hl.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:hl.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as $d}from"@alphafi/stsui-sdk";var ei=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},l=await new $d(i).mint(o,n.address);return l.setGasBudget(1e8),l}static fromData(t){return console.log("MintIntention.fromData",t),new a(t)}};import{LST as Hd}from"@alphafi/stsui-sdk";var ni=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},l=await new Hd(i).redeem(o,n.address);return l.setGasBudget(1e8),l}static fromData(t){return console.log("RedeemIntention.fromData",t),new a(t)}};var oi=class{application="stsui";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n}=e,o=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("StSuiHelper Sim result - ",o);let s=new ti(t,o).decode();return{txType:Xd.Other,txSubType:s.type,intentionData:s.intentionData}}async build(e){let{account:t}=e;console.log("StSui build transaction type",e.txSubType);let n;switch(e.txSubType){case"mint":n=ei.fromData(e.intentionData);break;case"redeem":n=ni.fromData(e.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:t})}};import{TransactionType as gf}from"@msafe/sui3-utils";import{TurbosSdk as yf}from"turbos-clmm-sdk";import{TransactionType as Lt}from"@msafe/sui3-utils";import{fromBase64 as Ne}from"@mysten/bcs";import{bcs as _e}from"@mysten/sui/bcs";import{BN as Gd}from"turbos-clmm-sdk";var Ht={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},Xt={PackageId:"0xdee9"};var Qd=(a,e,t,n)=>{if(a===1)switch(n.findIndex(s=>s===e)){case 0:return[!0,!0];case 1:return[!0,!1];case 2:return[!1,!0];case 3:return[!1,!1];default:throw new Error(`not target: ${e}`)}switch(t.findIndex(i=>i===e)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${e}`)}},ai=class{constructor(e,t,n){this.txb=e;this.turbosSdk=t;this.config=n}get transactions(){return this.txb.getData().commands}get swap1Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b`,`${this.config.PackageId}::swap_router::swap_b_a`]}get swap2Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b_b_c`,`${this.config.PackageId}::swap_router::swap_a_b_c_b`,`${this.config.PackageId}::swap_router::swap_b_a_b_c`,`${this.config.PackageId}::swap_router::swap_b_a_c_b`]}async decode(e){if(this.isSwapTransaction())return this.decodeSwap();if(this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isIncreaseLiquidityTransaction())return this.decodeIncreaseLiquidity(e);if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity(e);if(this.isDecreaseLiquidityTransaction())return this.decodeDecreaseLiquidity(e);if(this.isRemoveLiquidityWithReturnTransaction())return this.decodeRemoveLiquidityWithReturn(e);if(this.isDecreaseLiquidityWithReturnTransaction())return this.decodeDecreaseLiquidityWithReturn(e);if(this.isCollectFeeTransaction())return this.decodeCollectFee();if(this.isCollectRewardTransaction())return this.decodeCollectReward();if(this.isBurnTransaction())return this.decodeBurn();if(this.isPrixClaimTransaction())return this.decodePrixClaim();if(this.isPrixJoinTransaction())return this.decodePrixJoin();if(this.isSwapExactBaseForQuoteTransaction())return this.decodeSwapExactBaseForQuote();if(this.isSwapExactQuoteForBaseTransaction())return this.decodeSwapExactQuoteForBase();throw new Error("Unknown transaction type")}getMoveCallTransaction(e){return this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===e:!1)}getMoveCallsTransaction(e){return e.every(t=>this.transactions.find(n=>n.$kind==="MoveCall"?`${n.MoveCall.package}::${n.MoveCall.module}::${n.MoveCall.function}`===t:!1))}getSwapMoveCallTransaction(e){return this.transactions.find(t=>{if(t.$kind==="MoveCall"){let n=`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`;return!!e.includes(n)}return!1})}isSwapTransaction(){return!!this.getSwapMoveCallTransaction([...this.swap1Layer,...this.swap2Layer])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity`)}isDecreaseLiquidityWithReturnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity_with_return_`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::burn`)}isPrixJoinTransaction(){return!!this.getMoveCallTransaction(`${Ht.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${Ht.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isRemoveLiquidityWithReturnTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity_with_return_`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${Xt.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${Xt.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let e=this.transactions.find(D=>D.$kind==="MoveCall"),t=0,n=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;console.log(n,"moveCallTarget"),this.swap2Layer.includes(n)&&(t=1);let o=Qd(t,n,this.swap1Layer,this.swap2Layer),i=o.map((D,k)=>{let P=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(k)),U=this.helper.decodeInputU128(this.helper.getInputsIndex(4+k+t)),K=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new Gd(U.toString()));return{pool:P,a2b:D,nextTickIndex:K}}),s=o[0]||t===1?e.MoveCall.typeArguments[0]:e.MoveCall.typeArguments[1],l=t===1?e.MoveCall.typeArguments[4]:o[0]?e.MoveCall.typeArguments[1]:e.MoveCall.typeArguments[0],d=this.helper.decodeInputAddress(this.helper.getInputsIndex(6+2*t)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(7+2*t)),I=this.helper.decodeInputBool(this.helper.getInputsIndex(5+2*t)),C=this.helper.decodeInputU64(this.helper.getInputsIndex(2+t)),x=this.helper.decodeInputU64(this.helper.getInputsIndex(3+t));return{txType:Lt.Other,type:"Swap",intentionData:{routes:i,coinTypeA:s,coinTypeB:l,address:d,amountA:I?C:x,amountB:I?x:C,amountSpecifiedIsInput:I,slippage:"0.1",deadline:b}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeInputAddress(this.helper.getInputsIndex(12)),n=this.helper.decodeInputU64(this.helper.getInputsIndex(8)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(9)),i=this.helper.decodeInputU32(this.helper.getInputsIndex(4)),s=this.helper.decodeInputBool(this.helper.getInputsIndex(5)),l=this.helper.decodeInputU32(this.helper.getInputsIndex(6)),d=this.helper.decodeInputBool(this.helper.getInputsIndex(7)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(13));return{txType:Lt.Other,type:"AddLiquidity",intentionData:{pool:e,slippage:30,address:t,amountA:n,amountB:o,tickLower:s?-i:i,tickUpper:d?-l:l,deadline:b}}}decodeIncreaseLiquidity(e){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),n=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(4)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(6)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(9));return{txType:Lt.Other,type:"IncreaseLiquidity",intentionData:{pool:t,slippage:30,address:e,amountA:o,amountB:i,nft:n,deadline:s}}}decodeDecreaseLiquidity(e){console.log(this.helper,"decodeDecreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),n=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(3)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),l=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:Lt.Other,type:"DecreaseLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,deadline:l}}}decodeDecreaseLiquidityWithReturn(e){console.log(this.helper,"decodeDecreaseLiquidityWithReturn this.helper");let t=this.helper.decodeSharedObjectId(0),n=this.helper.decodeOwnedObjectId(2),o=this.helper.decodeInputU64(3),i=this.helper.decodeInputU64(4),s=this.helper.decodeInputU64(5),l=this.helper.decodeInputU64(6);return{txType:Lt.Other,type:"DecreaseLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,deadline:l}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(5)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(3)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:Lt.Other,type:"CollectFee",intentionData:{pool:e,address:n,collectAmountA:o,collectAmountB:i,nft:t,deadline:s}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(6)),o=[0,0,0];this.collectRewardHelper.forEach(s=>{let l=s.decodeInputU64(s.getInputsIndex(4)),d=s.decodeInputU64(s.getInputsIndex(5));o[l]=d});let i=this.helper.decodeInputU64(7);return{txType:Lt.Other,type:"CollectReward",intentionData:{pool:e,address:n,rewardAmounts:o,nft:t,deadline:i}}}decodeBurn(){console.log(this.helper,"decodeBurn this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2));return{txType:Lt.Other,type:"Burn",intentionData:{pool:e,nft:t}}}decodeRemoveLiquidity(e){console.log(this.helper,"decodeRemoveLiquidity this.helper");let t=30,n=this.decreaseLiquidityHelper.decodeSharedObjectId(this.decreaseLiquidityHelper.getInputsIndex(0)),o=this.decreaseLiquidityHelper.decodeOwnedObjectId(this.decreaseLiquidityHelper.getInputsIndex(2)),i=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(3)),s=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(4)),l=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(5)),d=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(6)),b=[0,0,0];this.collectRewardHelper.forEach(x=>{let D=x.decodeInputU64(x.getInputsIndex(4)),k=x.decodeInputU64(x.getInputsIndex(5));b[D]=k});let I=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(3))||0,C=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(4))||0;return{txType:Lt.Other,type:"RemoveLiquidity",intentionData:{pool:n,decreaseLiquidity:i,nft:o,amountA:(s/(100-t)*100).toFixed(0),amountB:(l/(100-t)*100).toFixed(0),slippage:t,address:e,collectAmountA:I,collectAmountB:C,rewardAmounts:b,deadline:d}}}decodeRemoveLiquidityWithReturn(e){console.log(this.helper,"decodeRemoveLiquidityWithReturn this.helper");let t=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeOwnedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),i=this.decreaseLiquidityHelper.decodeInputU64(4),s=this.decreaseLiquidityHelper.decodeInputU64(5),l=this.decreaseLiquidityHelper.decodeInputU64(6),d=this.collectRewardHelper.map(C=>C.decodeInputU64(5)),b=this.collectFeeHelper.decodeInputU64(3)||0,I=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:Lt.Other,type:"removeLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,collectAmountA:b,collectAmountB:I,rewardAmounts:d,deadline:l}}}decodePrixClaim(){return{txType:Lt.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:Lt.Other,type:"PrixJoin",intentionData:{}}}decodeSwapExactBaseForQuote(){let e=this.swapExactBaseForQuoteHelper.decodeSharedObjectId(0),t=this.swapExactBaseForQuoteHelper.decodeInputU64(3),n=this.swapExactBaseForQuoteHelper.shortTypeArg(0),o=this.swapExactBaseForQuoteHelper.shortTypeArg(1);return{txType:Lt.Other,type:"SwapExactBaseForQuote",intentionData:{poolId:e,amountIn:t,token1:n,token2:o}}}decodeSwapExactQuoteForBase(){let e=this.swapExactQuoteForBaseHelper.decodeSharedObjectId(0),t=this.swapExactQuoteForBaseHelper.decodeInputU64(3),n=this.swapExactQuoteForBaseHelper.shortTypeArg(0),o=this.swapExactQuoteForBaseHelper.shortTypeArg(1);return{txType:Lt.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:e,amountIn:t,token1:n,token2:o}}}get helper(){let e=this.transactions.find(t=>{if(t.$kind==="MoveCall"){let n=`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`;return n!=="0x2::coin::zero"&&n!=="0x0000000000000000000000000000000000000000000000000000000000000002::coin::zero"}return!1});return new me(e,this.txb)}get collectRewardHelper(){return this.transactions.filter(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::collect_reward`:!1).map(t=>new me(t,this.txb))}get collectFeeHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::collect`:!1);return new me(e,this.txb)}get decreaseLiquidityHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::decrease_liquidity`:!1);return new me(e,this.txb)}get swapExactBaseForQuoteHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Xt.PackageId}::clob_v2::swap_exact_base_for_quote`:!1);return new me(e,this.txb)}get swapExactQuoteForBaseHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Xt.PackageId}::clob_v2::swap_exact_quote_for_base`:!1);return new me(e,this.txb)}},me=class{constructor(e,t){this.moveCall=e;this.txb=t}get inputs(){return this.txb.getData().inputs}getInputsIndex(e){return this.moveCall.MoveCall.arguments[e].Input}decodeSharedObjectId(e){return this.inputs[e].Object?.SharedObject?.objectId||this.inputs[e].UnresolvedObject.objectId}decodeOwnedObjectId(e){return this.inputs[e].Object?.ImmOrOwnedObject?.objectId||this.inputs[e].UnresolvedObject.objectId}decodeInputU128(e){return Number(_e.u128().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputU64(e){return Number(_e.u64().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputU32(e){return Number(_e.u32().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputU8(e){return Number(_e.u8().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputAddress(e){return _e.Address.parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes)))}decodeInputBool(e){return _e.bool().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes)))}shortTypeArg(e){return this.moveCall.MoveCall.typeArguments[e]}txArg(e){return this.moveCall.MoveCall.arguments[e]}};import{TurbosSdk as Jd}from"turbos-clmm-sdk";var ii=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Jd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,tickLower:b,tickUpper:I,deadline:C,txb:x}=this.data;return n.pool.addLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,tickLower:b,tickUpper:I,deadline:C,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as Yd}from"turbos-clmm-sdk";var ri=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Yd(t.network.replace("sui:",""),t.suiClient),{pool:o,nft:i,txb:s}=this.data;return n.position.burn({pool:o,nft:i,txb:s})}static fromData(t){return new a(t)}};import{TurbosSdk as Zd}from"turbos-clmm-sdk";var si=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Zd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,collectAmountA:l,collectAmountB:d,deadline:b,txb:I}=this.data;return n.pool.collectFee({pool:o,address:i,collectAmountA:l,collectAmountB:d,nft:s,deadline:b,txb:I})}static fromData(t){return new a(t)}};import{TurbosSdk as tf}from"turbos-clmm-sdk";var ci=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new tf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,rewardAmounts:l,deadline:d,txb:b}=this.data;return n.pool.collectReward({pool:o,address:i,rewardAmounts:l,nft:s,deadline:d,txb:b})}static fromData(t){return new a(t)}};import{TurbosSdk as ef}from"turbos-clmm-sdk";var li=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new ef(t.network.replace("sui:",""),t.suiClient),{fee:o,address:i,tickLower:s,tickUpper:l,sqrtPrice:d,slippage:b,coinTypeA:I,coinTypeB:C,amountA:x,amountB:D,deadline:k,txb:P}=this.data;return n.pool.createPool({fee:o,amountA:x,amountB:D,address:i,tickLower:s,tickUpper:l,sqrtPrice:d,slippage:b,coinTypeA:I,coinTypeB:C,deadline:k,txb:P})}static fromData(t){return new a(t)}};import{TurbosSdk as nf}from"turbos-clmm-sdk";var ui=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new nf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,decreaseLiquidity:I,deadline:C,txb:x}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,decreaseLiquidity:I,deadline:C,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as of}from"turbos-clmm-sdk";var mi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new of(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,decreaseLiquidity:I,deadline:C}=this.data,{txb:x,coinA:D,coinB:k}=await n.pool.decreaseLiquidityWithReturn({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,decreaseLiquidity:I,deadline:C});return x.transferObjects([D,k],this.data.address),x}static fromData(t){return new a(t)}};import{TurbosSdk as af}from"turbos-clmm-sdk";var pi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new af(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,deadline:I,txb:C}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,deadline:I,txb:C})}static fromData(t){return new a(t)}};import{Transaction as rf}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as sf}from"@mysten/sui/utils";var di=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new rf;return n.moveCall({target:`${Ht.PackageId}::claim::claim`,typeArguments:[Ht.turbosCoinType],arguments:[n.object(Ht.Claim),n.object(sf)]}),n}static fromData(t){return new a(t)}};import{Transaction as cf}from"@mysten/sui/transactions";var fi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new cf;return n.moveCall({target:`${Ht.PackageId}::claim::join`,typeArguments:[Ht.turbosCoinType],arguments:[n.object(Ht.Claim)]}),n}static fromData(t){return new a(t)}};import{Transaction as lf}from"@mysten/sui/transactions";import{TurbosSdk as uf}from"turbos-clmm-sdk";var hi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new uf(t.network.replace("sui:",""),t.suiClient),o=new lf;return o=await n.pool.collectFee({txb:o,...this.data}),o=await n.pool.collectReward({txb:o,...this.data}),o=await n.pool.decreaseLiquidity({txb:o,...this.data}),o=await n.position.burn({txb:o,nft:this.data.nft,pool:this.data.pool}),o}static fromData(t){return new a(t)}};import{TurbosSdk as mf}from"turbos-clmm-sdk";var gi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new mf(t.network.replace("sui:",""),t.suiClient),{txb:o,coinA:i,coinB:s}=await n.pool.removeLiquidityWithReturn({...this.data});return o.transferObjects([i,s],this.data.address),o}static fromData(t){return new a(t)}};import{TurbosSdk as pf}from"turbos-clmm-sdk";var yi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new pf(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:i,coinTypeB:s,address:l,amountA:d,amountB:b,slippage:I,amountSpecifiedIsInput:C,deadline:x,txb:D}=this.data;return n.trade.swap({routes:o,coinTypeA:i,coinTypeB:s,address:l,amountA:d,amountB:b,amountSpecifiedIsInput:C,slippage:I,deadline:x,txb:D})}static fromData(t){return new a(t)}};import{TurbosSdk as ff}from"turbos-clmm-sdk";import{Transaction as gl}from"@mysten/sui/transactions";import{normalizeSuiObjectId as yl}from"@mysten/sui/utils";import{unstable_getObjectId as df}from"turbos-clmm-sdk";var cn=class{constructor(e){this.turbosSdk=e}async getCoinsData(e,t,n){let o=[],i;do i=await this.turbosSdk.provider.getCoins({owner:e,coinType:t,cursor:i?.nextCursor}),o.push(...i.data);while(i.hasNextPage);let s=[],l=0;return o.sort((d,b)=>Number(b.balance)-Number(d.balance)).some(d=>l>=n?!0:(l+=Number(d.balance),s.push(d),!1)),s}splitAndMergeCoin(e,t,n){if(!e||e.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(e[0].coinType)){let[s]=n.splitCoins(n.gas,[n.pure.u64(t)]);return[s,void 0]}let o=n.object(e[0].coinObjectId);e.length>1&&n.mergeCoins(o,e.slice(1).map(s=>n.object(s.coinObjectId)));let[i]=n.splitCoins(o,[n.pure.u64(t)]);return[i,o]}isSuiCoinAddress(e){return e.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(e){let t=await this.turbosSdk.provider.getOwnedObjects({owner:e,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${Xt.PackageId}::custodian_v2::AccountCap`}});return t.data[0]?.data?df(t.data[0].data):void 0}createAccount(e){let[t]=e.moveCall({typeArguments:[],target:`${Xt.PackageId}::clob_v2::create_account`,arguments:[]});return t}zero(e,t){return t.moveCall({typeArguments:[e],target:"0x2::coin::zero",arguments:[]})}};var bl=89,Tl=1e6,Sl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,l=new gl,d=new cn(s),b=await d.getCoinsData(i,t,o),[I,C]=d.splitAndMergeCoin(b,o,l);if(!I)throw new Error(`Not enough balance: ${t}`);let x=await d.IsAccountCap(i),D=x?l.object(x):d.createAccount(l),[k,P,U]=l.moveCall({typeArguments:[e,t],target:`${Xt.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[l.object(String(n)),l.pure.u64(bl),D,l.pure.u64(o),l.object(yl("0x6")),I]});return C&&l.transferObjects([C],l.pure.address(i)),l.transferObjects([k],l.pure.address(i)),l.transferObjects([P],l.pure.address(i)),x||l.transferObjects([D],l.pure.address(i)),l.setSenderIfNotSet(i),l.setGasBudget(Tl),l},Il=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,l=new gl,d=new cn(s),b=await d.getCoinsData(i,e,o),[I,C]=d.splitAndMergeCoin(b,o,l);if(!I)throw new Error(`Not enough balance: ${e}`);let x=await d.IsAccountCap(i),D=x?l.object(x):d.createAccount(l),k=d.zero(t,l),[P,U,K]=l.moveCall({typeArguments:[e,t],target:`${Xt.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[l.object(String(n)),l.pure.u64(bl),D,l.pure.u64(o),I,k,l.object(yl("0x6"))]});return C&&l.transferObjects([C],l.pure.address(i)),l.transferObjects([P],l.pure.address(i)),l.transferObjects([U],l.pure.address(i)),x||l.transferObjects([D],l.pure.address(i)),l.setSenderIfNotSet(i),l.setGasBudget(Tl),l};var bi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new ff(t.network.replace("sui:",""),t.suiClient);return await Il({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};import{TurbosSdk as hf}from"turbos-clmm-sdk";var Ti=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new hf(t.network.replace("sui:",""),t.suiClient);return await Sl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};var Si=class{application="turbos";supportSDK="@mysten/sui";async deserialize(e){console.log(e,"input");let t=new yf(e.network.replace("sui:","")),n=await t.contract.getConfig(),{transaction:o,account:i}=e,l=await new ai(o,t,n).decode(i.address);return{txType:gf.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.intentionData,"intentionData");let i;switch(e.txSubType){case"CreatePool":i=li.fromData(e.intentionData);break;case"AddLiquidity":i=ii.fromData(e.intentionData);break;case"IncreaseLiquidity":i=pi.fromData(e.intentionData);break;case"DecreaseLiquidity":i=ui.fromData(e.intentionData);break;case"DecreaseLiquidityWithReturn":i=mi.fromData(e.intentionData);break;case"RemoveLiquidity":i=hi.fromData(e.intentionData);break;case"removeLiquidityWithReturn":i=gi.fromData(e.intentionData);break;case"CollectFee":i=si.fromData(e.intentionData);break;case"CollectReward":i=ci.fromData(e.intentionData);break;case"Burn":i=ri.fromData(e.intentionData);break;case"Swap":i=yi.fromData(e.intentionData);break;case"PrixJoin":i=fi.fromData(e.intentionData);break;case"PrixClaim":i=di.fromData(e.intentionData);break;case"SwapExactBaseForQuote":i=bi.fromData(e.intentionData);break;case"SwapExactQuoteForBase":i=Ti.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as xf}from"@msafe/sui3-utils";import{TransactionType as ns}from"@msafe/sui3-utils";import{bcs as wl}from"@mysten/sui.js/bcs";import{normalizeStructTag as Sf,normalizeSuiAddress as ln}from"@mysten/sui.js/utils";var bf={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},kt=bf;var Ii=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${kt.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${kt.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${kt.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:ns.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:ns.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:ns.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(kt.packageId));return new os(e,this.txb)}},os=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return ln(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return wl.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return ln(e.value.Object.ImmOrOwned.objectId)}return ln(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return ln(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return ln(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return wl.de(t,new Uint8Array(n))}typeArg(e){return Sf(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as If}from"@mysten/sui.js/transactions";var wi=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new If,{ticketId:o}=this.data;return n.moveCall({target:`${kt.packageId}::native_pool::burn_ticket`,arguments:[n.object(kt.poolObjectId),n.object(kt.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as wf}from"@mysten/sui.js/transactions";var Ci=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new wf,{amount:o}=this.data,[i]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${kt.packageId}::native_pool::stake`,arguments:[n.object(kt.poolObjectId),n.object(kt.metadataObjectId),n.object(kt.systemStateObjectId),i]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Cf}from"@mysten/sui.js/transactions";var xi=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new Cf,{amount:o}=this.data,i=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[s,...l]=i.filter(I=>I.coinType.split("::")[0]===kt.certType.split("::")[0]),d=n.object(s.coinObjectId);l.length&&n.mergeCoins(d,l.map(I=>n.object(I.coinObjectId)));let b=n.splitCoins(n.object(s.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${kt.packageId}::native_pool::unstake`,arguments:[n.object(kt.poolObjectId),n.object(kt.metadataObjectId),n.object(kt.systemStateObjectId),b]}),n}static fromData(t){return new a(t)}};var Di=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(e){let{transactionBlock:t}=e,o=new Ii(t).decode();return{txType:xf.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case"Stake":o=Ci.fromData(e.intentionData);break;case"UnStake":o=xi.fromData(e.intentionData);break;case"ClaimTicket":o=wi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as jf}from"@msafe/sui3-utils";import{asIntN as Cl}from"@cetusprotocol/common-sdk";import{TransactionType as pe}from"@msafe/sui3-utils";import{fromBase64 as un}from"@mysten/bcs";import{bcs as mn}from"@mysten/sui/bcs";var ki=class{constructor(e,t){this.transaction=e;this.appContext=t}async decode(){if(this.isOpenPositionTx())return this.decodeOpenPositionTx();if(this.isClosePositionTx())return this.decodeClosePositionTx();if(this.isProvideLiquidityTx())return this.decodeProvideLiquidityTx();if(this.isRemoveLiquidityTx())return this.decodeRemoveLiquidityTx();if(this.isCollectRewardsAndFeeTx())return this.decodeCollectRewardsAndFeeTx();if(this.isCollectRewardsTx())return this.decodeCollectRewardsTx();if(this.isCollectFeeTx())return this.decodeCollectFeeTx();if(this.isAggregator7KSwapTx())return this.decodeAggregator7KSwapTx();throw new Error("Unknown transaction type")}decodeOpenPositionTx(){let e=this.getMoveCallCommand("open_position"),t=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:pe.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,1)),lowerTick:Number(Cl(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(Cl(BigInt(this.getU32(this.getInputIndex(e,3)))).toString()),tokenAmount:this.getU64(this.getInputIndex(t,6)),maxAmountTokenA:this.getU64(this.getInputIndex(t,7)),maxAmountTokenB:this.getU64(this.getInputIndex(t,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(t,9))}}}decodeClosePositionTx(){let e=this.getMoveCallCommand("close_position"),t=this.getCollectRewardCallData();return{txType:pe.Other,type:"ClosePosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),transferTokensTo:this.getAddress(this.getInputIndex(e,4)),collectRewardTokens:t.map(n=>n.rewardCoinType),collectFeeTokens:this.getTypeArguments(e)}}}decodeProvideLiquidityTx(){let e=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:pe.Other,type:"ProvideLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),tokenAmount:this.getU64(this.getInputIndex(e,6)),maxAmountTokenA:this.getU64(this.getInputIndex(e,7)),maxAmountTokenB:this.getU64(this.getInputIndex(e,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(e,9))}}}decodeRemoveLiquidityTx(){let e=this.getMoveCallCommand("remove_liquidity");return{txType:pe.Other,type:"RemoveLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),liquidity:this.getU128(this.getInputIndex(e,4)),maxAmountTokenA:this.getU64(this.getInputIndex(e,5)),maxAmountTokenB:this.getU64(this.getInputIndex(e,6)),transferTokensTo:this.getAddress(this.getInputIndex(e,7)),...this.collectTokens()}}}decodeCollectRewardsTx(){let e=this.getCollectRewardCallData();return{txType:pe.Other,type:"CollectRewards",intentionData:{pool:e[0].pool,position:e[0].position,collectRewardTokens:e.map(t=>t.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:pe.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let e=this.getFeeCallData();return{txType:pe.Other,type:"CollectRewardsAndFee",intentionData:{pool:e.pool,position:e.position,...this.collectTokens()}}}getFeeCallData(){let e=this.getMoveCallCommand("collect_fee");return{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),collectFeeTokens:this.getTypeArguments(e)}}getCollectRewardCallData(){let e=[];return this.commands.forEach(t=>{t.$kind==="MoveCall"&&t.MoveCall.function==="collect_reward"&&e.push({pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),rewardCoinType:this.getTypeArguments(t)[2]})}),e}async decodeAggregator7KSwapTx(){let{appContext:e}=this;return console.log("appContext",e),{txType:pe.Other,type:"Aggregator7KSwap",intentionData:{tokenIn:e.txParams.tokenIn,tokenOut:e.txParams.tokenOut,amountIn:String(e.txParams.amountIn),maxSlippage:String(e.txParams.maxSlippage)}}}collectTokens(){let e=this.getFeeCallData(),t=this.getCollectRewardCallData();return{collectFeeTokens:e.collectFeeTokens,collectRewardTokens:t.map(n=>n.rewardCoinType)}}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}isOpenPositionTx(){return!!this.getMoveCallCommand("open_position")}isProvideLiquidityTx(){return!!this.getMoveCallCommand("provide_liquidity_with_fixed_amount")}isRemoveLiquidityTx(){return!!this.getMoveCallCommand("remove_liquidity")}isCollectRewardsTx(){return!!this.getMoveCallCommand("collect_reward")}isCollectFeeTx(){return!!this.getMoveCallCommand("collect_fee")}isCollectRewardsAndFeeTx(){return this.isCollectRewardsTx()&&this.isCollectFeeTx()}isClosePositionTx(){return!!this.getMoveCallCommand("close_position")}isAggregator7KSwapTx(){return!!this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function.toLowerCase().includes("settle"))}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getSharedObjectID(e){return this.inputs[e].Object.SharedObject.objectId}getOwnedObjectID(e){return this.inputs[e].Object.ImmOrOwnedObject.objectId}getU32(e){return String(mn.u32().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes))))}getU64(e){return mn.u64().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getU128(e){return mn.u128().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getBoolean(e){return mn.bool().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getAddress(e){return mn.Address.parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getTypeArguments(e){return e.MoveCall.typeArguments||[]}getInputIndex(e,t){return e.MoveCall.arguments[t].Input}};import{TransactionType as Pf}from"@msafe/sui3-utils";import{buildTx as vf,getQuote as Af}from"@bluefin-exchange/bluefin7k-aggregator-sdk";import{BN as Te,ClmmPoolUtil as Mf}from"@firefly-exchange/library-sui";import{Decimal as Of}from"turbos-clmm-sdk";import{SuiClient as Df}from"@firefly-exchange/library-sui";import{OnChainCalls as kf}from"@firefly-exchange/library-sui/spot";var xl={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x67b34b728c4e28e704dcfecf7c5cf55c7fc593b6c65c20d1836d97c209c1928a"}},ne=(a,e)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let t=new Df({url:xl.rpc});return new kf(t,xl.objects,{address:e.address,isUIWallet:!1})};var At=class{static async OpenPosition(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool),s=this.prototype.buildLiqInput(i,{...e,slippage:0});return await o.openPositionWithFixedAmount(i,e.lowerTick,e.upperTick,s,{returnTx:!0,sender:t.address})}static async provideLiquidity(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool),s=this.prototype.buildLiqInput(i,e);return await o.provideLiquidityWithFixedAmount(i,e.position,s,{returnTx:!0,sender:t.address})}static async removeLiquidity(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.removeLiquidity(i,e.position,{liquidityAmount:new Te(e.liquidity),tokenMaxA:new Te(e.maxAmountTokenA),tokenMaxB:new Te(e.maxAmountTokenB)},{returnTx:!0,sender:t.address})}static async closePosition(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.closePosition(i,e.position,{returnTx:!0,sender:t.address})}static async collectRewards(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.collectRewards(i,e.position,{rewardCoinsType:e.collectRewardTokens,returnTx:!0,sender:t.address})}static async collectFee(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.collectFee(i,e.position,{returnTx:!0,sender:t.address})}static async collectRewardsAndFee(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return console.log(e.position),await o.collectFeeAndRewards(i,e.position,{returnTx:!0,sender:t.address})}static async aggregator7KSwap(e,t,n){let o=ne(n,t),i=await Af({tokenIn:e.tokenIn.address,tokenOut:e.tokenOut.address,amountIn:new Of(e.amountIn).mul(10**e.tokenIn.decimals).toString()}),s=await vf({quoteResponse:i,accountAddress:t.address,slippage:e.maxSlippage,commission:{partner:"0x956d6ea2da156a037952964badc51f997cc5581c86a0e05f74049e6effab9347",commissionBps:0}});return s.tx.setSender(t.address),s.tx}buildLiqInput(e,t){return{...Mf.estLiquidityAndCoinAmountFromOneAmounts(t.lowerTick,t.upperTick,new Te(t.tokenAmount),t.isTokenAFixed,!0,0,new Te(e.current_sqrt_price)),tokenMaxA:new Te(t.maxAmountTokenA),tokenMaxB:new Te(t.maxAmountTokenB)}}};var vi=class a extends S{constructor(t){super(t);this.data=t}txType=Pf.Other;txSubType="Aggregator7KSwap";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.aggregator7KSwap(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Rf}from"@msafe/sui3-utils";var Ai=class a extends S{constructor(t){super(t);this.data=t}txType=Rf.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.closePosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Bf}from"@msafe/sui3-utils";var Mi=class a extends S{constructor(t){super(t);this.data=t}txType=Bf.Other;txSubType="CollectFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.collectFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ef}from"@msafe/sui3-utils";var Oi=class a extends S{constructor(t){super(t);this.data=t}txType=Ef.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.collectRewards(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Wf}from"@msafe/sui3-utils";var Pi=class a extends S{constructor(t){super(t);this.data=t}txType=Wf.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Nf}from"@msafe/sui3-utils";var Ri=class a extends S{constructor(t){super(t);this.data=t}txType=Nf.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.OpenPosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as _f}from"@msafe/sui3-utils";var Bi=class a extends S{constructor(t){super(t);this.data=t}txType=_f.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.provideLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Lf}from"@msafe/sui3-utils";var Ei=class a extends S{constructor(t){super(t);this.data=t}txType=Lf.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.removeLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};var Wi=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(e){console.log("Bluefin helper deserialize input: ",e);let{transaction:t,appContext:n}=e,i=await new ki(t,n).decode();return{txType:jf.Other,txSubType:i.type,intentionData:{appContext:e.appContext,...i.intentionData}}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.txSubType);let i;switch(e.txSubType){case"OpenPosition":i=Ri.fromData(e.intentionData);break;case"ProvideLiquidity":i=Bi.fromData(e.intentionData);break;case"RemoveLiquidity":i=Ei.fromData(e.intentionData);break;case"ClosePosition":i=Ai.fromData(e.intentionData);break;case"CollectFee":i=Mi.fromData(e.intentionData);break;case"CollectRewards":i=Oi.fromData(e.intentionData);break;case"CollectRewardsAndFee":i=Pi.fromData(e.intentionData);break;case"Aggregator7KSwap":i=vi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as dh}from"@msafe/sui3-utils";import{MmtSDK as zf}from"@mmt-finance/clmm-sdk";import{Transaction as Gf}from"@mysten/sui/transactions";var R=tu(kl());import{convertI32ToSigned as is,TickMath as Ml}from"@mmt-finance/clmm-sdk/dist/utils/math/tickMath";import Vf from"bignumber.js";var Uf="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",zt=a=>a!=="0x2::sui::SUI"?a:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",qf=async({suiClient:a,address:e,type:t})=>{let n,o=[],i=0;do{try{let s=await a.getCoins({owner:e,coinType:t,cursor:n,limit:50});o=o.concat(s.data),n=s.nextCursor,(!s.hasNextPage||i===8)&&(n=null)}catch(s){console.log(s),n=null}i++}while(n!==null);return o},Ff=(a,e)=>{let t=[],n=BigInt(0);for(let o of e)n<a&&!t.includes(o.objectId)&&(t.push(o.objectId),n+=BigInt(o.balance)),o.balance===BigInt(0)&&!t.includes(o.objectId)&&t.push(o.objectId);if(n>=a)return t;throw new Error("Insufficient balance")},Kf=(a,e,t,n)=>{if(a===Uf){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=Ff(t,e);o.length>1&&n.mergeCoins(n.object(o[0]),o.slice(1).map(s=>n.object(s)));let[i]=n.splitCoins(n.object(o[0]),[n.pure.u64(t)]);return i}};async function vl(a,e,t,n,o){let i=await qf({suiClient:a.rpcClient,address:e,type:t});return Kf(zt(t),i.map(l=>({balance:BigInt(l.balance),objectId:l.coinObjectId})),n,o)}var Se=(a,e,t,n,o)=>{let i={objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType};n?.rewarders&&n?.rewarders.length>0&&a.Pool.collectAllRewards(o,i,n.rewarders.map(s=>({coin_type:s.coinType,flow_rate:s.flowRate,reward_amount:s.rewardAmount,rewards_allocated:s.rewardsAllocated,hasEnded:s.hasEnded})),t.objectId,e),a.Pool.collectFee(o,{objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType,isStable:n.isStable,tickSpacing:n.tickSpacing},t.objectId,e)};async function Al({sdk:a,address:e,positionId:t,pool:n,txb:o,targetCoinType:i,slippage:s}){let l={objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType},d=n.rewarders.map(I=>I.coinType);d.length>0&&(console.log("claimRewardsAsTargetCoin input",{pool:l,positionId:t,rewarderCoinTypes:d,targetCoinType:i,slippage:s,toAddress:e}),await a.Pool.claimRewardsAs({txb:o,pool:l,positionId:t,rewarderCoinTypes:d,targetCoinType:i,slippage:s,toAddress:e}));let b=await a.Pool.getAllPools();return await a.Pool.claimFeeAs({txb:o,pool:l,positionId:t,targetCoinType:i,slippage:s,toAddress:e,pools:b}),o}function E(a,e,t){let n=a.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}function $f(a){let e;return(a&1)!==0?e=new R.default("79232123823359799118286999567"):e=new R.default("79228162514264337593543950336"),(a&2)!==0&&(e=E(e.mul(new R.default("79236085330515764027303304731")),96,256)),(a&4)!==0&&(e=E(e.mul(new R.default("79244008939048815603706035061")),96,256)),(a&8)!==0&&(e=E(e.mul(new R.default("79259858533276714757314932305")),96,256)),(a&16)!==0&&(e=E(e.mul(new R.default("79291567232598584799939703904")),96,256)),(a&32)!==0&&(e=E(e.mul(new R.default("79355022692464371645785046466")),96,256)),(a&64)!==0&&(e=E(e.mul(new R.default("79482085999252804386437311141")),96,256)),(a&128)!==0&&(e=E(e.mul(new R.default("79736823300114093921829183326")),96,256)),(a&256)!==0&&(e=E(e.mul(new R.default("80248749790819932309965073892")),96,256)),(a&512)!==0&&(e=E(e.mul(new R.default("81282483887344747381513967011")),96,256)),(a&1024)!==0&&(e=E(e.mul(new R.default("83390072131320151908154831281")),96,256)),(a&2048)!==0&&(e=E(e.mul(new R.default("87770609709833776024991924138")),96,256)),(a&4096)!==0&&(e=E(e.mul(new R.default("97234110755111693312479820773")),96,256)),(a&8192)!==0&&(e=E(e.mul(new R.default("119332217159966728226237229890")),96,256)),(a&16384)!==0&&(e=E(e.mul(new R.default("179736315981702064433883588727")),96,256)),(a&32768)!==0&&(e=E(e.mul(new R.default("407748233172238350107850275304")),96,256)),(a&65536)!==0&&(e=E(e.mul(new R.default("2098478828474011932436660412517")),96,256)),(a&131072)!==0&&(e=E(e.mul(new R.default("55581415166113811149459800483533")),96,256)),(a&262144)!==0&&(e=E(e.mul(new R.default("38992368544603139932233054999993551")),96,256)),E(e,32,256)}function Hf(a){let e=Math.abs(a),t;return(e&1)!==0?t=new R.default("18445821805675392311"):t=new R.default("18446744073709551616"),(e&2)!==0&&(t=E(t.mul(new R.default("18444899583751176498")),64,256)),(e&4)!==0&&(t=E(t.mul(new R.default("18443055278223354162")),64,256)),(e&8)!==0&&(t=E(t.mul(new R.default("18439367220385604838")),64,256)),(e&16)!==0&&(t=E(t.mul(new R.default("18431993317065449817")),64,256)),(e&32)!==0&&(t=E(t.mul(new R.default("18417254355718160513")),64,256)),(e&64)!==0&&(t=E(t.mul(new R.default("18387811781193591352")),64,256)),(e&128)!==0&&(t=E(t.mul(new R.default("18329067761203520168")),64,256)),(e&256)!==0&&(t=E(t.mul(new R.default("18212142134806087854")),64,256)),(e&512)!==0&&(t=E(t.mul(new R.default("17980523815641551639")),64,256)),(e&1024)!==0&&(t=E(t.mul(new R.default("17526086738831147013")),64,256)),(e&2048)!==0&&(t=E(t.mul(new R.default("16651378430235024244")),64,256)),(e&4096)!==0&&(t=E(t.mul(new R.default("15030750278693429944")),64,256)),(e&8192)!==0&&(t=E(t.mul(new R.default("12247334978882834399")),64,256)),(e&16384)!==0&&(t=E(t.mul(new R.default("8131365268884726200")),64,256)),(e&32768)!==0&&(t=E(t.mul(new R.default("3584323654723342297")),64,256)),(e&65536)!==0&&(t=E(t.mul(new R.default("696457651847595233")),64,256)),(e&131072)!==0&&(t=E(t.mul(new R.default("26294789957452057")),64,256)),(e&262144)!==0&&(t=E(t.mul(new R.default("37481735321082")),64,256)),t}var Ol=(a,e,t)=>{let n=is(t?a+a%(e??1):a-a%(e??1));return n>0?new R.default($f(n)):new R.default(Hf(n))};function Pl(a,e){if(!/^(\d+)(\.\d+)?$/.test(a))return BigInt(0);let[t,n=""]=a.split("."),o=(n+"0".repeat(e)).slice(0,e),s=(t+o).replace(/^0+/,"")||"0";return BigInt(s)}async function de({address:a,coinType:e,coinAmount:t,coinDecimals:n,tx:o,mmt:i}){let s=Pl(t,n),l;return Number(t)?l=await vl(i,a,zt(e),s,o):[l]=o.moveCall({target:"0x2::coin::zero",typeArguments:[e],arguments:[]}),l}function Rl({mmt:a,tx:e,poolModel:t,selectedLowTick:n,selectedHighTick:o}){let i=Ol(is(n),t.tickSpacing),s=Ol(is(o),t.tickSpacing);return a.Position.openPosition(e,t,i.toString(),s.toString())}var Xf=(a,e)=>{let n=1e4-Math.floor(e*100);return a*BigInt(n)/BigInt(1e4)};function Ni(a,e,t){let n=Pl(a,e);return Number(a)===0?BigInt(0):Xf(n,t)}async function pn({poolId:a,currentSqrtPrice:e,tokenX:t,tokenY:n,slippagePercentage:o,isTokenX:i,suiClient:s}){let d=(await s.getObject({id:a,options:{showContent:!0}}))?.data?.content?.fields?.sqrt_price??e,b=Ml.sqrtPriceX64ToPrice(new R.default(d?.toString()),t.decimals,n.decimals),I=i?(100-o)/100:(100+o)/100,C=Ml.priceToSqrtPriceX64(b.mul(I),t.decimals,n.decimals);return BigInt(C.toString())}var Bl=async(a,e,t,n,o,i,s,l,d,b)=>{let I=await de({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),C=await de({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),x={objectId:s,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},D=Rl({mmt:a,tx:e,poolModel:x,selectedLowTick:l,selectedHighTick:d}),k=Ni(n,i.tokenX.decimals,b),P=Ni(o,i.tokenY.decimals,b);a.Pool.addLiquidity(e,x,D,I,C,k,P,t),e.transferObjects([D],e.pure.address(t))},El=async(a,e,t,n,o,i,s,l,d,b,I)=>{try{let C=await de({mmt:a,address:n,coinType:i?s.tokenX.coinType:s.tokenY.coinType,coinAmount:o,coinDecimals:i?s.tokenX.decimals:s.tokenY.decimals,tx:e}),x={objectId:s.poolId,tokenXType:zt(s.tokenX.coinType),tokenYType:zt(s.tokenY.coinType),tickSpacing:s.tickSpacing},D=Rl({mmt:a,tx:e,poolModel:x,selectedLowTick:l,selectedHighTick:d}),k=await pn({suiClient:t,poolId:s.poolId,currentSqrtPrice:s.currentSqrtPrice,tokenX:s.tokenX,tokenY:s.tokenY,slippagePercentage:b,isTokenX:i});await a.Pool.addLiquiditySingleSidedV2({txb:e,pool:x,position:D,inputCoin:C,isXtoY:i,limitSqrtPrice:k,slippagePercentage:I,transferToAddress:n,useMvr:!0}),e.transferObjects([D],e.pure.address(n))}catch(C){console.error(C)}},Wl=async(a,e,t,n,o,i,s,l)=>{let d=await de({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),b=await de({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),I={objectId:i.poolId,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},C=Ni(n,i.tokenX.decimals,l),x=Ni(o,i.tokenY.decimals,l);a.Pool.addLiquidity(e,I,s,d,b,C,x,t)},Nl=async(a,e,t,n,o,i,s,l,d)=>{try{let b=await de({mmt:a,address:t,coinType:o?i.tokenX.coinType:i.tokenY.coinType,coinAmount:n,coinDecimals:o?i.tokenX.decimals:i.tokenY.decimals,tx:e}),I={objectId:i.poolId,tokenXType:i.tokenX.coinType,tokenYType:i.tokenY.coinType,tickSpacing:i.tickSpacing},C=await pn({suiClient:a.rpcClient,poolId:i.poolId,currentSqrtPrice:i.currentSqrtPrice,tokenX:i.tokenX,tokenY:i.tokenY,slippagePercentage:l,isTokenX:o});await a.Pool.addLiquiditySingleSidedV2({txb:e,pool:I,position:s,inputCoin:b,isXtoY:o,limitSqrtPrice:C,slippagePercentage:d,transferToAddress:t})}catch(b){throw console.error(b),b}},_l=(a,e)=>BigInt(e===100?a:new Vf(a).multipliedBy(e/100).toFixed(0)),Ll=async(a,e,t,n,o,i)=>{let s=_l(t.liquidity,o),l=n.tokenX.coinType,d=n.tokenY.coinType,b={objectId:n?.poolId,tokenXType:l,tokenYType:d};a.Pool.removeLiquidity(i,b,t.objectId,s,BigInt(0),BigInt(0),e),Se(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)},jl=async({sdk:a,address:e,position:t,pool:n,withdrawPercentage:o,txb:i,targetCoinType:s,slippage:l})=>{let d=_l(t.liquidity,o),b=zt(n.tokenX.coinType),I=zt(n.tokenY.coinType),C=zt(s)===I,x={objectId:n?.poolId,tokenXType:b,tokenYType:I},{removeLpCoinA:D,removeLpCoinB:k}=a.Pool.removeLiquidity(i,x,t.objectId,d,BigInt(0),BigInt(0)),P=await pn({suiClient:a.rpcClient,poolId:n.poolId,currentSqrtPrice:n.currentSqrtPrice,tokenX:n.tokenX,tokenY:n.tokenY,isTokenX:C,slippagePercentage:l}),U=C?D:k,K=i.moveCall({target:"0x2::coin::value",arguments:[U],typeArguments:[C?b:I]});i.transferObjects([C?k:D],e),a.Pool.swapV2({txb:i,transferToAddress:e,pool:x,limitSqrtPrice:P,amount:K,inputCoin:U,isXtoY:C}),Se(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)};var _i=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=zf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:l,selectedLowTick:d,selectedHighTick:b,slippage:I}=n,C=new Gf;return await Bl(t,C,o,i,s,l,l.poolId,d,b,I),C}static fromData(t){return new a(t)}};import{MmtSDK as Qf}from"@mmt-finance/clmm-sdk";import{Transaction as Jf}from"@mysten/sui/transactions";var Li=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Qf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:l,selectedLowTick:d,selectedHighTick:b,swapSlippage:I,addLiquiditySlippage:C}=n,x=new Jf;return await El(t,x,t.rpcClient,o,i,s,l,d,b,I,C),x}static fromData(t){return new a(t)}};import{MmtSDK as Yf}from"@mmt-finance/clmm-sdk";import{Transaction as Zf}from"@mysten/sui/transactions";var ji=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Yf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,positions:i,pools:s}=n,l=new Zf;for(let d of i){let b=s.find(I=>I.poolId===d.poolId);b&&Se(t,o,d,b,l)}return l}static fromData(t){return new a(t)}};import{MmtSDK as th}from"@mmt-finance/clmm-sdk";import{Transaction as eh}from"@mysten/sui/transactions";var Ui=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=th.NEW({network:"mainnet"}),{params:n}=this.data,o=new eh;return await Promise.all(n.claimParams.map(i=>Al({...i,sdk:t,txb:o}))),o}static fromData(t){return new a(t)}};import{MmtSDK as nh}from"@mmt-finance/clmm-sdk";import{Transaction as oh}from"@mysten/sui/transactions";var qi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=nh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,position:i,pool:s}=n,l=new oh;return Se(t,o,i,s,l),l}static fromData(t){return new a(t)}};import{MmtSDK as ah}from"@mmt-finance/clmm-sdk";import{Transaction as ih}from"@mysten/sui/transactions";var Fi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=ah.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:l,positionObjectId:d,slippage:b}=n,I=new ih;return await Wl(t,I,o,i,s,l,d,b),I}static fromData(t){return new a(t)}};import{MmtSDK as rh}from"@mmt-finance/clmm-sdk";import{Transaction as sh}from"@mysten/sui/transactions";var Ki=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=rh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:l,positionObjectId:d,swapSlippage:b,addLiquiditySlippage:I}=n,C=new sh;return await Nl(t,C,o,i,s,l,d,b,I),C}static fromData(t){return new a(t)}};import{MmtSDK as ch}from"@mmt-finance/clmm-sdk";import{Transaction as lh}from"@mysten/sui/transactions";var Vi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=ch.NEW({network:"mainnet"}),{params:n}=this.data,{pool:o,position:i,address:s,withdrawPercentage:l,zapOutOn:d,targetCoinType:b,slippage:I}=n,C=new lh;return d?await jl({sdk:t,address:s,position:i,pool:o,withdrawPercentage:l,txb:C,targetCoinType:b,slippage:I}):await Ll(t,s,i,o,l,C),C}static fromData(t){return new a(t)}};import{Transaction as Ul}from"@mysten/sui/transactions";import{LstClient as ql}from"@suilend/springsui-sdk";var rs={id:"0x0431232199873db77a92aa645cd43521437e9cc5c6fff07fd03edb88afe0b25a",type:"0x2b6602099970374cf58a2a1b9d96f005fccceb81e92eb059873baf420eb6c717::x_sui::X_SUI",weightHookId:"0x9e35c13dbb0bc437e8ad5a95ec463622f58763e060552ae8d100db77f4904601"},Fl=async(a,e,t)=>{let n=await ql.initialize(a,rs),o=new Ul,[i]=o.splitCoins(o.gas,[BigInt(t)]),s=n.mint(o,i);return o.transferObjects([s],e),o},Kl=async(a,e,t)=>{let n=await ql.initialize(a,rs),o=await a.getCoins({owner:e,coinType:rs.type,limit:1e3});if(o.data.length===0)throw new Error("No lst coins found");let i=new Ul,s=o.data[0];o.data.length>1&&i.mergeCoins(s.coinObjectId,o.data.slice(1).map(b=>b.coinObjectId));let[l]=i.splitCoins(s.coinObjectId,[BigInt(t)]),d=n.redeem(i,l);return i.transferObjects([d],e),i};var $i=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await Fl(t.suiClient,o,i)}static fromData(t){return new a(t)}};import{MmtSDK as mh}from"@mmt-finance/clmm-sdk";import{Transaction as ph}from"@mysten/sui/transactions";import{mappedMmtV3Pool as uh}from"@mmt-finance/clmm-sdk/dist/utils/poolUtils";var Vl=async(a,e,t,n,o,i,s)=>{let l=await de({mmt:a,tx:i,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals}),d=i.moveCall({target:"0x2::coin::value",typeArguments:[t.coinType],arguments:[l]}),b=t.coinType;for(let I=0;I<e.length;I+=1){let{poolId:C,tokenX:x,tokenY:D,isStable:k,currentSqrtPrice:P}=e[I],{id:U,isReverse:K}=uh[C]||{id:C,isReverse:!1},Bt=zt(x.coinType)===zt(b);Bt=K?!Bt:Bt;let Et=K?D.coinType:x.coinType,Mt=K?x.coinType:D.coinType,Le=await pn({poolId:U,tokenX:x,tokenY:D,slippagePercentage:s,isTokenX:Bt,suiClient:a.rpcClient,currentSqrtPrice:P}),Wt=a.Pool.swap(i,{objectId:U,tokenXType:Et,tokenYType:Mt,isStable:k},d,l,Bt,void 0,Le,!1);i.transferObjects([l],i.pure.address(o)),l=Wt,b=Bt?Mt:Et,d=i.moveCall({target:"0x2::coin::value",typeArguments:[b],arguments:[l]})}i.transferObjects([l],i.pure.address(o))};var Hi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=mh.NEW({network:"mainnet"}),{params:n}=this.data,{route:o,tokenIn:i,amountIn:s,address:l,slippage:d}=n,b=new ph;return await Vl(t,o,i,s,l,b,d),b}static fromData(t){return new a(t)}};var Xi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await Kl(t.suiClient,o,i)}static fromData(t){return new a(t)}};var zi=class{application="mmt-dex";supportSDK="@mysten/sui";async deserialize(e){let{appContext:t}=e;return{txType:dh.Other,txSubType:t.action,intentionData:t}}async build(e){let t;switch(e.txSubType){case"Swap":t=Hi.fromData(e.intentionData);break;case"AddLiquidity":t=_i.fromData(e.intentionData);break;case"AddLiquiditySingleSide":t=Li.fromData(e.intentionData);break;case"ClaimRewards":t=qi.fromData(e.intentionData);break;case"ClaimAllRewards":t=ji.fromData(e.intentionData);break;case"ClaimRewardsAs":t=Ui.fromData(e.intentionData);break;case"RemoveLiquidity":t=Vi.fromData(e.intentionData);break;case"StakeXSui":t=$i.fromData(e.intentionData);break;case"UnstakeXSui":t=Xi.fromData(e.intentionData);break;case"ManageLiquidity":t=Fi.fromData(e.intentionData);break;case"ManageLiquiditySingleSide":t=Ki.fromData(e.intentionData);break;default:throw new Error(`not implemented ${e.txSubType}`)}return t.build({suiClient:e.suiClient})}};import{TransactionType as $l}from"@msafe/sui3-utils";import{Transaction as fh}from"@mysten/sui/transactions";import{Vaults as hh}from"@nemoprotocol/vaults-sdk";var Gi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,i=hh.createSDK({client:n}),s=new fh;return await i.deposit(this.data,o.address,s),s}static fromData(t){return new a(t)}};import{Transaction as gh}from"@mysten/sui/transactions";import{Vaults as yh}from"@nemoprotocol/vaults-sdk";var Qi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,i=yh.createSDK({client:n}),s=new gh;return await i.withdraw(this.data,o.address,s),s}static fromData(t){return new a(t)}};var Ji=class{application="nemo";supportSDK="@mysten/sui";async deserialize(e){let t=e.transaction.blockData.transactions.find(o=>o.kind==="MoveCall"&&o.target.toString().toLowerCase().includes("deposit::deposit_non_entry")),n=e.transaction.blockData.transactions.find(o=>o.kind==="MoveCall"&&o.target.toString().toLowerCase().includes("withdraw::withdraw"));if(t)return{txType:$l.Other,txSubType:"VaultDeposit",intentionData:e.appContext};if(n)return{txType:$l.Other,txSubType:"VaultWithdraw",intentionData:e.appContext}}async build(e){let{suiClient:t,account:n}=e;console.log(e.txSubType);let o;switch(e.txSubType){case"VaultDeposit":o=Gi.fromData(e.intentionData);break;case"VaultWithdraw":o=Qi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};var L4=oa.fromHelpers([new Ko,new Zo,new Uo,new ta,new fo,new Si,new zi,new Na,new Di,new Un,new Ha,new Za,new wn,new Wi,new oi,new Ji]);export{L4 as appHelpers};
|
|
1
|
+
var Hl=Object.create;var br=Object.defineProperty;var Xl=Object.getOwnPropertyDescriptor;var zl=Object.getOwnPropertyNames;var Gl=Object.getPrototypeOf,Ql=Object.prototype.hasOwnProperty;var Jl=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var Yl=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),ks=(a,e)=>{for(var t in e)br(a,t,{get:e[t],enumerable:!0})},Zl=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of zl(e))!Ql.call(a,o)&&o!==t&&br(a,o,{get:()=>e[o],enumerable:!(n=Xl(e,o))||n.enumerable});return a};var tu=(a,e,t)=>(t=a!=null?Hl(Gl(a)):{},Zl(e||!a||!a.__esModule?br(t,"default",{value:a,enumerable:!0}):t,a));var kl=Yl((Dl,as)=>{"use strict";(function(a,e){"use strict";function t(y,r){if(!y)throw new Error(r||"Assertion failed")}function n(y,r){y.super_=r;var u=function(){};u.prototype=r.prototype,y.prototype=new u,y.prototype.constructor=y}function o(y,r,u){if(o.isBN(y))return y;this.negative=0,this.words=null,this.length=0,this.red=null,y!==null&&((r==="le"||r==="be")&&(u=r,r=10),this._init(y||0,r||10,u||"be"))}typeof a=="object"?a.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var i;try{typeof window<"u"&&typeof window.Buffer<"u"?i=window.Buffer:i=Jl("buffer").Buffer}catch{}o.isBN=function(r){return r instanceof o?!0:r!==null&&typeof r=="object"&&r.constructor.wordSize===o.wordSize&&Array.isArray(r.words)},o.max=function(r,u){return r.cmp(u)>0?r:u},o.min=function(r,u){return r.cmp(u)<0?r:u},o.prototype._init=function(r,u,m){if(typeof r=="number")return this._initNumber(r,u,m);if(typeof r=="object")return this._initArray(r,u,m);u==="hex"&&(u=16),t(u===(u|0)&&u>=2&&u<=36),r=r.toString().replace(/\s+/g,"");var p=0;r[0]==="-"&&(p++,this.negative=1),p<r.length&&(u===16?this._parseHex(r,p,m):(this._parseBase(r,u,p),m==="le"&&this._initArray(this.toArray(),u,m)))},o.prototype._initNumber=function(r,u,m){r<0&&(this.negative=1,r=-r),r<67108864?(this.words=[r&67108863],this.length=1):r<4503599627370496?(this.words=[r&67108863,r/67108864&67108863],this.length=2):(t(r<9007199254740992),this.words=[r&67108863,r/67108864&67108863,1],this.length=3),m==="le"&&this._initArray(this.toArray(),u,m)},o.prototype._initArray=function(r,u,m){if(t(typeof r.length=="number"),r.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(r.length/3),this.words=new Array(this.length);for(var p=0;p<this.length;p++)this.words[p]=0;var h,T,w=0;if(m==="be")for(p=r.length-1,h=0;p>=0;p-=3)T=r[p]|r[p-1]<<8|r[p-2]<<16,this.words[h]|=T<<w&67108863,this.words[h+1]=T>>>26-w&67108863,w+=24,w>=26&&(w-=26,h++);else if(m==="le")for(p=0,h=0;p<r.length;p+=3)T=r[p]|r[p+1]<<8|r[p+2]<<16,this.words[h]|=T<<w&67108863,this.words[h+1]=T>>>26-w&67108863,w+=24,w>=26&&(w-=26,h++);return this._strip()};function s(y,r){var u=y.charCodeAt(r);if(u>=48&&u<=57)return u-48;if(u>=65&&u<=70)return u-55;if(u>=97&&u<=102)return u-87;t(!1,"Invalid character in "+y)}function l(y,r,u){var m=s(y,u);return u-1>=r&&(m|=s(y,u-1)<<4),m}o.prototype._parseHex=function(r,u,m){this.length=Math.ceil((r.length-u)/6),this.words=new Array(this.length);for(var p=0;p<this.length;p++)this.words[p]=0;var h=0,T=0,w;if(m==="be")for(p=r.length-1;p>=u;p-=2)w=l(r,u,p)<<h,this.words[T]|=w&67108863,h>=18?(h-=18,T+=1,this.words[T]|=w>>>26):h+=8;else{var f=r.length-u;for(p=f%2===0?u+1:u;p<r.length;p+=2)w=l(r,u,p)<<h,this.words[T]|=w&67108863,h>=18?(h-=18,T+=1,this.words[T]|=w>>>26):h+=8}this._strip()};function d(y,r,u,m){for(var p=0,h=0,T=Math.min(y.length,u),w=r;w<T;w++){var f=y.charCodeAt(w)-48;p*=m,f>=49?h=f-49+10:f>=17?h=f-17+10:h=f,t(f>=0&&h<m,"Invalid character"),p+=h}return p}o.prototype._parseBase=function(r,u,m){this.words=[0],this.length=1;for(var p=0,h=1;h<=67108863;h*=u)p++;p--,h=h/u|0;for(var T=r.length-m,w=T%p,f=Math.min(T,T-w)+m,c=0,g=m;g<f;g+=p)c=d(r,g,g+p,u),this.imuln(h),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(w!==0){var v=1;for(c=d(r,g,r.length,u),g=0;g<w;g++)v*=u;this.imuln(v),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}this._strip()},o.prototype.copy=function(r){r.words=new Array(this.length);for(var u=0;u<this.length;u++)r.words[u]=this.words[u];r.length=this.length,r.negative=this.negative,r.red=this.red};function b(y,r){y.words=r.words,y.length=r.length,y.negative=r.negative,y.red=r.red}if(o.prototype._move=function(r){b(r,this)},o.prototype.clone=function(){var r=new o(null);return this.copy(r),r},o.prototype._expand=function(r){for(;this.length<r;)this.words[this.length++]=0;return this},o.prototype._strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},o.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{o.prototype[Symbol.for("nodejs.util.inspect.custom")]=I}catch{o.prototype.inspect=I}else o.prototype.inspect=I;function I(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var C=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],x=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],D=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(r,u){r=r||10,u=u|0||1;var m;if(r===16||r==="hex"){m="";for(var p=0,h=0,T=0;T<this.length;T++){var w=this.words[T],f=((w<<p|h)&16777215).toString(16);h=w>>>24-p&16777215,p+=2,p>=26&&(p-=26,T--),h!==0||T!==this.length-1?m=C[6-f.length]+f+m:m=f+m}for(h!==0&&(m=h.toString(16)+m);m.length%u!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}if(r===(r|0)&&r>=2&&r<=36){var c=x[r],g=D[r];m="";var v=this.clone();for(v.negative=0;!v.isZero();){var M=v.modrn(g).toString(r);v=v.idivn(g),v.isZero()?m=M+m:m=C[c-M.length]+M+m}for(this.isZero()&&(m="0"+m);m.length%u!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}t(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var r=this.words[0];return this.length===2?r+=this.words[1]*67108864:this.length===3&&this.words[2]===1?r+=4503599627370496+this.words[1]*67108864:this.length>2&&t(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-r:r},o.prototype.toJSON=function(){return this.toString(16,2)},i&&(o.prototype.toBuffer=function(r,u){return this.toArrayLike(i,r,u)}),o.prototype.toArray=function(r,u){return this.toArrayLike(Array,r,u)};var k=function(r,u){return r.allocUnsafe?r.allocUnsafe(u):new r(u)};o.prototype.toArrayLike=function(r,u,m){this._strip();var p=this.byteLength(),h=m||Math.max(1,p);t(p<=h,"byte array longer than desired length"),t(h>0,"Requested array length <= 0");var T=k(r,h),w=u==="le"?"LE":"BE";return this["_toArrayLike"+w](T,p),T},o.prototype._toArrayLikeLE=function(r,u){for(var m=0,p=0,h=0,T=0;h<this.length;h++){var w=this.words[h]<<T|p;r[m++]=w&255,m<r.length&&(r[m++]=w>>8&255),m<r.length&&(r[m++]=w>>16&255),T===6?(m<r.length&&(r[m++]=w>>24&255),p=0,T=0):(p=w>>>24,T+=2)}if(m<r.length)for(r[m++]=p;m<r.length;)r[m++]=0},o.prototype._toArrayLikeBE=function(r,u){for(var m=r.length-1,p=0,h=0,T=0;h<this.length;h++){var w=this.words[h]<<T|p;r[m--]=w&255,m>=0&&(r[m--]=w>>8&255),m>=0&&(r[m--]=w>>16&255),T===6?(m>=0&&(r[m--]=w>>24&255),p=0,T=0):(p=w>>>24,T+=2)}if(m>=0)for(r[m--]=p;m>=0;)r[m--]=0},Math.clz32?o.prototype._countBits=function(r){return 32-Math.clz32(r)}:o.prototype._countBits=function(r){var u=r,m=0;return u>=4096&&(m+=13,u>>>=13),u>=64&&(m+=7,u>>>=7),u>=8&&(m+=4,u>>>=4),u>=2&&(m+=2,u>>>=2),m+u},o.prototype._zeroBits=function(r){if(r===0)return 26;var u=r,m=0;return(u&8191)===0&&(m+=13,u>>>=13),(u&127)===0&&(m+=7,u>>>=7),(u&15)===0&&(m+=4,u>>>=4),(u&3)===0&&(m+=2,u>>>=2),(u&1)===0&&m++,m},o.prototype.bitLength=function(){var r=this.words[this.length-1],u=this._countBits(r);return(this.length-1)*26+u};function P(y){for(var r=new Array(y.bitLength()),u=0;u<r.length;u++){var m=u/26|0,p=u%26;r[u]=y.words[m]>>>p&1}return r}o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var r=0,u=0;u<this.length;u++){var m=this._zeroBits(this.words[u]);if(r+=m,m!==26)break}return r},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(r){return this.negative!==0?this.abs().inotn(r).iaddn(1):this.clone()},o.prototype.fromTwos=function(r){return this.testn(r-1)?this.notn(r).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return this.negative!==0},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(r){for(;this.length<r.length;)this.words[this.length++]=0;for(var u=0;u<r.length;u++)this.words[u]=this.words[u]|r.words[u];return this._strip()},o.prototype.ior=function(r){return t((this.negative|r.negative)===0),this.iuor(r)},o.prototype.or=function(r){return this.length>r.length?this.clone().ior(r):r.clone().ior(this)},o.prototype.uor=function(r){return this.length>r.length?this.clone().iuor(r):r.clone().iuor(this)},o.prototype.iuand=function(r){var u;this.length>r.length?u=r:u=this;for(var m=0;m<u.length;m++)this.words[m]=this.words[m]&r.words[m];return this.length=u.length,this._strip()},o.prototype.iand=function(r){return t((this.negative|r.negative)===0),this.iuand(r)},o.prototype.and=function(r){return this.length>r.length?this.clone().iand(r):r.clone().iand(this)},o.prototype.uand=function(r){return this.length>r.length?this.clone().iuand(r):r.clone().iuand(this)},o.prototype.iuxor=function(r){var u,m;this.length>r.length?(u=this,m=r):(u=r,m=this);for(var p=0;p<m.length;p++)this.words[p]=u.words[p]^m.words[p];if(this!==u)for(;p<u.length;p++)this.words[p]=u.words[p];return this.length=u.length,this._strip()},o.prototype.ixor=function(r){return t((this.negative|r.negative)===0),this.iuxor(r)},o.prototype.xor=function(r){return this.length>r.length?this.clone().ixor(r):r.clone().ixor(this)},o.prototype.uxor=function(r){return this.length>r.length?this.clone().iuxor(r):r.clone().iuxor(this)},o.prototype.inotn=function(r){t(typeof r=="number"&&r>=0);var u=Math.ceil(r/26)|0,m=r%26;this._expand(u),m>0&&u--;for(var p=0;p<u;p++)this.words[p]=~this.words[p]&67108863;return m>0&&(this.words[p]=~this.words[p]&67108863>>26-m),this._strip()},o.prototype.notn=function(r){return this.clone().inotn(r)},o.prototype.setn=function(r,u){t(typeof r=="number"&&r>=0);var m=r/26|0,p=r%26;return this._expand(m+1),u?this.words[m]=this.words[m]|1<<p:this.words[m]=this.words[m]&~(1<<p),this._strip()},o.prototype.iadd=function(r){var u;if(this.negative!==0&&r.negative===0)return this.negative=0,u=this.isub(r),this.negative^=1,this._normSign();if(this.negative===0&&r.negative!==0)return r.negative=0,u=this.isub(r),r.negative=1,u._normSign();var m,p;this.length>r.length?(m=this,p=r):(m=r,p=this);for(var h=0,T=0;T<p.length;T++)u=(m.words[T]|0)+(p.words[T]|0)+h,this.words[T]=u&67108863,h=u>>>26;for(;h!==0&&T<m.length;T++)u=(m.words[T]|0)+h,this.words[T]=u&67108863,h=u>>>26;if(this.length=m.length,h!==0)this.words[this.length]=h,this.length++;else if(m!==this)for(;T<m.length;T++)this.words[T]=m.words[T];return this},o.prototype.add=function(r){var u;return r.negative!==0&&this.negative===0?(r.negative=0,u=this.sub(r),r.negative^=1,u):r.negative===0&&this.negative!==0?(this.negative=0,u=r.sub(this),this.negative=1,u):this.length>r.length?this.clone().iadd(r):r.clone().iadd(this)},o.prototype.isub=function(r){if(r.negative!==0){r.negative=0;var u=this.iadd(r);return r.negative=1,u._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(r),this.negative=1,this._normSign();var m=this.cmp(r);if(m===0)return this.negative=0,this.length=1,this.words[0]=0,this;var p,h;m>0?(p=this,h=r):(p=r,h=this);for(var T=0,w=0;w<h.length;w++)u=(p.words[w]|0)-(h.words[w]|0)+T,T=u>>26,this.words[w]=u&67108863;for(;T!==0&&w<p.length;w++)u=(p.words[w]|0)+T,T=u>>26,this.words[w]=u&67108863;if(T===0&&w<p.length&&p!==this)for(;w<p.length;w++)this.words[w]=p.words[w];return this.length=Math.max(this.length,w),p!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(r){return this.clone().isub(r)};function U(y,r,u){u.negative=r.negative^y.negative;var m=y.length+r.length|0;u.length=m,m=m-1|0;var p=y.words[0]|0,h=r.words[0]|0,T=p*h,w=T&67108863,f=T/67108864|0;u.words[0]=w;for(var c=1;c<m;c++){for(var g=f>>>26,v=f&67108863,M=Math.min(c,r.length-1),O=Math.max(0,c-y.length+1);O<=M;O++){var B=c-O|0;p=y.words[B]|0,h=r.words[O]|0,T=p*h+v,g+=T/67108864|0,v=T&67108863}u.words[c]=v|0,f=g|0}return f!==0?u.words[c]=f|0:u.length--,u._strip()}var K=function(r,u,m){var p=r.words,h=u.words,T=m.words,w=0,f,c,g,v=p[0]|0,M=v&8191,O=v>>>13,B=p[1]|0,N=B&8191,L=B>>>13,oe=p[2]|0,j=oe&8191,F=oe>>>13,ls=p[3]|0,H=ls&8191,X=ls>>>13,us=p[4]|0,z=us&8191,G=us>>>13,ms=p[5]|0,Q=ms&8191,J=ms>>>13,ps=p[6]|0,Y=ps&8191,Z=ps>>>13,ds=p[7]|0,tt=ds&8191,et=ds>>>13,fs=p[8]|0,nt=fs&8191,ot=fs>>>13,hs=p[9]|0,at=hs&8191,it=hs>>>13,gs=h[0]|0,rt=gs&8191,st=gs>>>13,ys=h[1]|0,ct=ys&8191,lt=ys>>>13,bs=h[2]|0,ut=bs&8191,mt=bs>>>13,Ts=h[3]|0,pt=Ts&8191,dt=Ts>>>13,Ss=h[4]|0,ft=Ss&8191,ht=Ss>>>13,Is=h[5]|0,gt=Is&8191,yt=Is>>>13,ws=h[6]|0,bt=ws&8191,Tt=ws>>>13,Cs=h[7]|0,St=Cs&8191,It=Cs>>>13,xs=h[8]|0,wt=xs&8191,Ct=xs>>>13,Ds=h[9]|0,xt=Ds&8191,Dt=Ds>>>13;m.negative=r.negative^u.negative,m.length=19,f=Math.imul(M,rt),c=Math.imul(M,st),c=c+Math.imul(O,rt)|0,g=Math.imul(O,st);var Zi=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(Zi>>>26)|0,Zi&=67108863,f=Math.imul(N,rt),c=Math.imul(N,st),c=c+Math.imul(L,rt)|0,g=Math.imul(L,st),f=f+Math.imul(M,ct)|0,c=c+Math.imul(M,lt)|0,c=c+Math.imul(O,ct)|0,g=g+Math.imul(O,lt)|0;var tr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(tr>>>26)|0,tr&=67108863,f=Math.imul(j,rt),c=Math.imul(j,st),c=c+Math.imul(F,rt)|0,g=Math.imul(F,st),f=f+Math.imul(N,ct)|0,c=c+Math.imul(N,lt)|0,c=c+Math.imul(L,ct)|0,g=g+Math.imul(L,lt)|0,f=f+Math.imul(M,ut)|0,c=c+Math.imul(M,mt)|0,c=c+Math.imul(O,ut)|0,g=g+Math.imul(O,mt)|0;var er=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(er>>>26)|0,er&=67108863,f=Math.imul(H,rt),c=Math.imul(H,st),c=c+Math.imul(X,rt)|0,g=Math.imul(X,st),f=f+Math.imul(j,ct)|0,c=c+Math.imul(j,lt)|0,c=c+Math.imul(F,ct)|0,g=g+Math.imul(F,lt)|0,f=f+Math.imul(N,ut)|0,c=c+Math.imul(N,mt)|0,c=c+Math.imul(L,ut)|0,g=g+Math.imul(L,mt)|0,f=f+Math.imul(M,pt)|0,c=c+Math.imul(M,dt)|0,c=c+Math.imul(O,pt)|0,g=g+Math.imul(O,dt)|0;var nr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(nr>>>26)|0,nr&=67108863,f=Math.imul(z,rt),c=Math.imul(z,st),c=c+Math.imul(G,rt)|0,g=Math.imul(G,st),f=f+Math.imul(H,ct)|0,c=c+Math.imul(H,lt)|0,c=c+Math.imul(X,ct)|0,g=g+Math.imul(X,lt)|0,f=f+Math.imul(j,ut)|0,c=c+Math.imul(j,mt)|0,c=c+Math.imul(F,ut)|0,g=g+Math.imul(F,mt)|0,f=f+Math.imul(N,pt)|0,c=c+Math.imul(N,dt)|0,c=c+Math.imul(L,pt)|0,g=g+Math.imul(L,dt)|0,f=f+Math.imul(M,ft)|0,c=c+Math.imul(M,ht)|0,c=c+Math.imul(O,ft)|0,g=g+Math.imul(O,ht)|0;var or=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(or>>>26)|0,or&=67108863,f=Math.imul(Q,rt),c=Math.imul(Q,st),c=c+Math.imul(J,rt)|0,g=Math.imul(J,st),f=f+Math.imul(z,ct)|0,c=c+Math.imul(z,lt)|0,c=c+Math.imul(G,ct)|0,g=g+Math.imul(G,lt)|0,f=f+Math.imul(H,ut)|0,c=c+Math.imul(H,mt)|0,c=c+Math.imul(X,ut)|0,g=g+Math.imul(X,mt)|0,f=f+Math.imul(j,pt)|0,c=c+Math.imul(j,dt)|0,c=c+Math.imul(F,pt)|0,g=g+Math.imul(F,dt)|0,f=f+Math.imul(N,ft)|0,c=c+Math.imul(N,ht)|0,c=c+Math.imul(L,ft)|0,g=g+Math.imul(L,ht)|0,f=f+Math.imul(M,gt)|0,c=c+Math.imul(M,yt)|0,c=c+Math.imul(O,gt)|0,g=g+Math.imul(O,yt)|0;var ar=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(ar>>>26)|0,ar&=67108863,f=Math.imul(Y,rt),c=Math.imul(Y,st),c=c+Math.imul(Z,rt)|0,g=Math.imul(Z,st),f=f+Math.imul(Q,ct)|0,c=c+Math.imul(Q,lt)|0,c=c+Math.imul(J,ct)|0,g=g+Math.imul(J,lt)|0,f=f+Math.imul(z,ut)|0,c=c+Math.imul(z,mt)|0,c=c+Math.imul(G,ut)|0,g=g+Math.imul(G,mt)|0,f=f+Math.imul(H,pt)|0,c=c+Math.imul(H,dt)|0,c=c+Math.imul(X,pt)|0,g=g+Math.imul(X,dt)|0,f=f+Math.imul(j,ft)|0,c=c+Math.imul(j,ht)|0,c=c+Math.imul(F,ft)|0,g=g+Math.imul(F,ht)|0,f=f+Math.imul(N,gt)|0,c=c+Math.imul(N,yt)|0,c=c+Math.imul(L,gt)|0,g=g+Math.imul(L,yt)|0,f=f+Math.imul(M,bt)|0,c=c+Math.imul(M,Tt)|0,c=c+Math.imul(O,bt)|0,g=g+Math.imul(O,Tt)|0;var ir=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(ir>>>26)|0,ir&=67108863,f=Math.imul(tt,rt),c=Math.imul(tt,st),c=c+Math.imul(et,rt)|0,g=Math.imul(et,st),f=f+Math.imul(Y,ct)|0,c=c+Math.imul(Y,lt)|0,c=c+Math.imul(Z,ct)|0,g=g+Math.imul(Z,lt)|0,f=f+Math.imul(Q,ut)|0,c=c+Math.imul(Q,mt)|0,c=c+Math.imul(J,ut)|0,g=g+Math.imul(J,mt)|0,f=f+Math.imul(z,pt)|0,c=c+Math.imul(z,dt)|0,c=c+Math.imul(G,pt)|0,g=g+Math.imul(G,dt)|0,f=f+Math.imul(H,ft)|0,c=c+Math.imul(H,ht)|0,c=c+Math.imul(X,ft)|0,g=g+Math.imul(X,ht)|0,f=f+Math.imul(j,gt)|0,c=c+Math.imul(j,yt)|0,c=c+Math.imul(F,gt)|0,g=g+Math.imul(F,yt)|0,f=f+Math.imul(N,bt)|0,c=c+Math.imul(N,Tt)|0,c=c+Math.imul(L,bt)|0,g=g+Math.imul(L,Tt)|0,f=f+Math.imul(M,St)|0,c=c+Math.imul(M,It)|0,c=c+Math.imul(O,St)|0,g=g+Math.imul(O,It)|0;var rr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(rr>>>26)|0,rr&=67108863,f=Math.imul(nt,rt),c=Math.imul(nt,st),c=c+Math.imul(ot,rt)|0,g=Math.imul(ot,st),f=f+Math.imul(tt,ct)|0,c=c+Math.imul(tt,lt)|0,c=c+Math.imul(et,ct)|0,g=g+Math.imul(et,lt)|0,f=f+Math.imul(Y,ut)|0,c=c+Math.imul(Y,mt)|0,c=c+Math.imul(Z,ut)|0,g=g+Math.imul(Z,mt)|0,f=f+Math.imul(Q,pt)|0,c=c+Math.imul(Q,dt)|0,c=c+Math.imul(J,pt)|0,g=g+Math.imul(J,dt)|0,f=f+Math.imul(z,ft)|0,c=c+Math.imul(z,ht)|0,c=c+Math.imul(G,ft)|0,g=g+Math.imul(G,ht)|0,f=f+Math.imul(H,gt)|0,c=c+Math.imul(H,yt)|0,c=c+Math.imul(X,gt)|0,g=g+Math.imul(X,yt)|0,f=f+Math.imul(j,bt)|0,c=c+Math.imul(j,Tt)|0,c=c+Math.imul(F,bt)|0,g=g+Math.imul(F,Tt)|0,f=f+Math.imul(N,St)|0,c=c+Math.imul(N,It)|0,c=c+Math.imul(L,St)|0,g=g+Math.imul(L,It)|0,f=f+Math.imul(M,wt)|0,c=c+Math.imul(M,Ct)|0,c=c+Math.imul(O,wt)|0,g=g+Math.imul(O,Ct)|0;var sr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(sr>>>26)|0,sr&=67108863,f=Math.imul(at,rt),c=Math.imul(at,st),c=c+Math.imul(it,rt)|0,g=Math.imul(it,st),f=f+Math.imul(nt,ct)|0,c=c+Math.imul(nt,lt)|0,c=c+Math.imul(ot,ct)|0,g=g+Math.imul(ot,lt)|0,f=f+Math.imul(tt,ut)|0,c=c+Math.imul(tt,mt)|0,c=c+Math.imul(et,ut)|0,g=g+Math.imul(et,mt)|0,f=f+Math.imul(Y,pt)|0,c=c+Math.imul(Y,dt)|0,c=c+Math.imul(Z,pt)|0,g=g+Math.imul(Z,dt)|0,f=f+Math.imul(Q,ft)|0,c=c+Math.imul(Q,ht)|0,c=c+Math.imul(J,ft)|0,g=g+Math.imul(J,ht)|0,f=f+Math.imul(z,gt)|0,c=c+Math.imul(z,yt)|0,c=c+Math.imul(G,gt)|0,g=g+Math.imul(G,yt)|0,f=f+Math.imul(H,bt)|0,c=c+Math.imul(H,Tt)|0,c=c+Math.imul(X,bt)|0,g=g+Math.imul(X,Tt)|0,f=f+Math.imul(j,St)|0,c=c+Math.imul(j,It)|0,c=c+Math.imul(F,St)|0,g=g+Math.imul(F,It)|0,f=f+Math.imul(N,wt)|0,c=c+Math.imul(N,Ct)|0,c=c+Math.imul(L,wt)|0,g=g+Math.imul(L,Ct)|0,f=f+Math.imul(M,xt)|0,c=c+Math.imul(M,Dt)|0,c=c+Math.imul(O,xt)|0,g=g+Math.imul(O,Dt)|0;var cr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(cr>>>26)|0,cr&=67108863,f=Math.imul(at,ct),c=Math.imul(at,lt),c=c+Math.imul(it,ct)|0,g=Math.imul(it,lt),f=f+Math.imul(nt,ut)|0,c=c+Math.imul(nt,mt)|0,c=c+Math.imul(ot,ut)|0,g=g+Math.imul(ot,mt)|0,f=f+Math.imul(tt,pt)|0,c=c+Math.imul(tt,dt)|0,c=c+Math.imul(et,pt)|0,g=g+Math.imul(et,dt)|0,f=f+Math.imul(Y,ft)|0,c=c+Math.imul(Y,ht)|0,c=c+Math.imul(Z,ft)|0,g=g+Math.imul(Z,ht)|0,f=f+Math.imul(Q,gt)|0,c=c+Math.imul(Q,yt)|0,c=c+Math.imul(J,gt)|0,g=g+Math.imul(J,yt)|0,f=f+Math.imul(z,bt)|0,c=c+Math.imul(z,Tt)|0,c=c+Math.imul(G,bt)|0,g=g+Math.imul(G,Tt)|0,f=f+Math.imul(H,St)|0,c=c+Math.imul(H,It)|0,c=c+Math.imul(X,St)|0,g=g+Math.imul(X,It)|0,f=f+Math.imul(j,wt)|0,c=c+Math.imul(j,Ct)|0,c=c+Math.imul(F,wt)|0,g=g+Math.imul(F,Ct)|0,f=f+Math.imul(N,xt)|0,c=c+Math.imul(N,Dt)|0,c=c+Math.imul(L,xt)|0,g=g+Math.imul(L,Dt)|0;var lr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(lr>>>26)|0,lr&=67108863,f=Math.imul(at,ut),c=Math.imul(at,mt),c=c+Math.imul(it,ut)|0,g=Math.imul(it,mt),f=f+Math.imul(nt,pt)|0,c=c+Math.imul(nt,dt)|0,c=c+Math.imul(ot,pt)|0,g=g+Math.imul(ot,dt)|0,f=f+Math.imul(tt,ft)|0,c=c+Math.imul(tt,ht)|0,c=c+Math.imul(et,ft)|0,g=g+Math.imul(et,ht)|0,f=f+Math.imul(Y,gt)|0,c=c+Math.imul(Y,yt)|0,c=c+Math.imul(Z,gt)|0,g=g+Math.imul(Z,yt)|0,f=f+Math.imul(Q,bt)|0,c=c+Math.imul(Q,Tt)|0,c=c+Math.imul(J,bt)|0,g=g+Math.imul(J,Tt)|0,f=f+Math.imul(z,St)|0,c=c+Math.imul(z,It)|0,c=c+Math.imul(G,St)|0,g=g+Math.imul(G,It)|0,f=f+Math.imul(H,wt)|0,c=c+Math.imul(H,Ct)|0,c=c+Math.imul(X,wt)|0,g=g+Math.imul(X,Ct)|0,f=f+Math.imul(j,xt)|0,c=c+Math.imul(j,Dt)|0,c=c+Math.imul(F,xt)|0,g=g+Math.imul(F,Dt)|0;var ur=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(ur>>>26)|0,ur&=67108863,f=Math.imul(at,pt),c=Math.imul(at,dt),c=c+Math.imul(it,pt)|0,g=Math.imul(it,dt),f=f+Math.imul(nt,ft)|0,c=c+Math.imul(nt,ht)|0,c=c+Math.imul(ot,ft)|0,g=g+Math.imul(ot,ht)|0,f=f+Math.imul(tt,gt)|0,c=c+Math.imul(tt,yt)|0,c=c+Math.imul(et,gt)|0,g=g+Math.imul(et,yt)|0,f=f+Math.imul(Y,bt)|0,c=c+Math.imul(Y,Tt)|0,c=c+Math.imul(Z,bt)|0,g=g+Math.imul(Z,Tt)|0,f=f+Math.imul(Q,St)|0,c=c+Math.imul(Q,It)|0,c=c+Math.imul(J,St)|0,g=g+Math.imul(J,It)|0,f=f+Math.imul(z,wt)|0,c=c+Math.imul(z,Ct)|0,c=c+Math.imul(G,wt)|0,g=g+Math.imul(G,Ct)|0,f=f+Math.imul(H,xt)|0,c=c+Math.imul(H,Dt)|0,c=c+Math.imul(X,xt)|0,g=g+Math.imul(X,Dt)|0;var mr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(mr>>>26)|0,mr&=67108863,f=Math.imul(at,ft),c=Math.imul(at,ht),c=c+Math.imul(it,ft)|0,g=Math.imul(it,ht),f=f+Math.imul(nt,gt)|0,c=c+Math.imul(nt,yt)|0,c=c+Math.imul(ot,gt)|0,g=g+Math.imul(ot,yt)|0,f=f+Math.imul(tt,bt)|0,c=c+Math.imul(tt,Tt)|0,c=c+Math.imul(et,bt)|0,g=g+Math.imul(et,Tt)|0,f=f+Math.imul(Y,St)|0,c=c+Math.imul(Y,It)|0,c=c+Math.imul(Z,St)|0,g=g+Math.imul(Z,It)|0,f=f+Math.imul(Q,wt)|0,c=c+Math.imul(Q,Ct)|0,c=c+Math.imul(J,wt)|0,g=g+Math.imul(J,Ct)|0,f=f+Math.imul(z,xt)|0,c=c+Math.imul(z,Dt)|0,c=c+Math.imul(G,xt)|0,g=g+Math.imul(G,Dt)|0;var pr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(pr>>>26)|0,pr&=67108863,f=Math.imul(at,gt),c=Math.imul(at,yt),c=c+Math.imul(it,gt)|0,g=Math.imul(it,yt),f=f+Math.imul(nt,bt)|0,c=c+Math.imul(nt,Tt)|0,c=c+Math.imul(ot,bt)|0,g=g+Math.imul(ot,Tt)|0,f=f+Math.imul(tt,St)|0,c=c+Math.imul(tt,It)|0,c=c+Math.imul(et,St)|0,g=g+Math.imul(et,It)|0,f=f+Math.imul(Y,wt)|0,c=c+Math.imul(Y,Ct)|0,c=c+Math.imul(Z,wt)|0,g=g+Math.imul(Z,Ct)|0,f=f+Math.imul(Q,xt)|0,c=c+Math.imul(Q,Dt)|0,c=c+Math.imul(J,xt)|0,g=g+Math.imul(J,Dt)|0;var dr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(dr>>>26)|0,dr&=67108863,f=Math.imul(at,bt),c=Math.imul(at,Tt),c=c+Math.imul(it,bt)|0,g=Math.imul(it,Tt),f=f+Math.imul(nt,St)|0,c=c+Math.imul(nt,It)|0,c=c+Math.imul(ot,St)|0,g=g+Math.imul(ot,It)|0,f=f+Math.imul(tt,wt)|0,c=c+Math.imul(tt,Ct)|0,c=c+Math.imul(et,wt)|0,g=g+Math.imul(et,Ct)|0,f=f+Math.imul(Y,xt)|0,c=c+Math.imul(Y,Dt)|0,c=c+Math.imul(Z,xt)|0,g=g+Math.imul(Z,Dt)|0;var fr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(fr>>>26)|0,fr&=67108863,f=Math.imul(at,St),c=Math.imul(at,It),c=c+Math.imul(it,St)|0,g=Math.imul(it,It),f=f+Math.imul(nt,wt)|0,c=c+Math.imul(nt,Ct)|0,c=c+Math.imul(ot,wt)|0,g=g+Math.imul(ot,Ct)|0,f=f+Math.imul(tt,xt)|0,c=c+Math.imul(tt,Dt)|0,c=c+Math.imul(et,xt)|0,g=g+Math.imul(et,Dt)|0;var hr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(hr>>>26)|0,hr&=67108863,f=Math.imul(at,wt),c=Math.imul(at,Ct),c=c+Math.imul(it,wt)|0,g=Math.imul(it,Ct),f=f+Math.imul(nt,xt)|0,c=c+Math.imul(nt,Dt)|0,c=c+Math.imul(ot,xt)|0,g=g+Math.imul(ot,Dt)|0;var gr=(w+f|0)+((c&8191)<<13)|0;w=(g+(c>>>13)|0)+(gr>>>26)|0,gr&=67108863,f=Math.imul(at,xt),c=Math.imul(at,Dt),c=c+Math.imul(it,xt)|0,g=Math.imul(it,Dt);var yr=(w+f|0)+((c&8191)<<13)|0;return w=(g+(c>>>13)|0)+(yr>>>26)|0,yr&=67108863,T[0]=Zi,T[1]=tr,T[2]=er,T[3]=nr,T[4]=or,T[5]=ar,T[6]=ir,T[7]=rr,T[8]=sr,T[9]=cr,T[10]=lr,T[11]=ur,T[12]=mr,T[13]=pr,T[14]=dr,T[15]=fr,T[16]=hr,T[17]=gr,T[18]=yr,w!==0&&(T[19]=w,m.length++),m};Math.imul||(K=U);function Bt(y,r,u){u.negative=r.negative^y.negative,u.length=y.length+r.length;for(var m=0,p=0,h=0;h<u.length-1;h++){var T=p;p=0;for(var w=m&67108863,f=Math.min(h,r.length-1),c=Math.max(0,h-y.length+1);c<=f;c++){var g=h-c,v=y.words[g]|0,M=r.words[c]|0,O=v*M,B=O&67108863;T=T+(O/67108864|0)|0,B=B+w|0,w=B&67108863,T=T+(B>>>26)|0,p+=T>>>26,T&=67108863}u.words[h]=w,m=T,T=p}return m!==0?u.words[h]=m:u.length--,u._strip()}function Et(y,r,u){return Bt(y,r,u)}o.prototype.mulTo=function(r,u){var m,p=this.length+r.length;return this.length===10&&r.length===10?m=K(this,r,u):p<63?m=U(this,r,u):p<1024?m=Bt(this,r,u):m=Et(this,r,u),m};function Mt(y,r){this.x=y,this.y=r}Mt.prototype.makeRBT=function(r){for(var u=new Array(r),m=o.prototype._countBits(r)-1,p=0;p<r;p++)u[p]=this.revBin(p,m,r);return u},Mt.prototype.revBin=function(r,u,m){if(r===0||r===m-1)return r;for(var p=0,h=0;h<u;h++)p|=(r&1)<<u-h-1,r>>=1;return p},Mt.prototype.permute=function(r,u,m,p,h,T){for(var w=0;w<T;w++)p[w]=u[r[w]],h[w]=m[r[w]]},Mt.prototype.transform=function(r,u,m,p,h,T){this.permute(T,r,u,m,p,h);for(var w=1;w<h;w<<=1)for(var f=w<<1,c=Math.cos(2*Math.PI/f),g=Math.sin(2*Math.PI/f),v=0;v<h;v+=f)for(var M=c,O=g,B=0;B<w;B++){var N=m[v+B],L=p[v+B],oe=m[v+B+w],j=p[v+B+w],F=M*oe-O*j;j=M*j+O*oe,oe=F,m[v+B]=N+oe,p[v+B]=L+j,m[v+B+w]=N-oe,p[v+B+w]=L-j,B!==f&&(F=c*M-g*O,O=c*O+g*M,M=F)}},Mt.prototype.guessLen13b=function(r,u){var m=Math.max(u,r)|1,p=m&1,h=0;for(m=m/2|0;m;m=m>>>1)h++;return 1<<h+1+p},Mt.prototype.conjugate=function(r,u,m){if(!(m<=1))for(var p=0;p<m/2;p++){var h=r[p];r[p]=r[m-p-1],r[m-p-1]=h,h=u[p],u[p]=-u[m-p-1],u[m-p-1]=-h}},Mt.prototype.normalize13b=function(r,u){for(var m=0,p=0;p<u/2;p++){var h=Math.round(r[2*p+1]/u)*8192+Math.round(r[2*p]/u)+m;r[p]=h&67108863,h<67108864?m=0:m=h/67108864|0}return r},Mt.prototype.convert13b=function(r,u,m,p){for(var h=0,T=0;T<u;T++)h=h+(r[T]|0),m[2*T]=h&8191,h=h>>>13,m[2*T+1]=h&8191,h=h>>>13;for(T=2*u;T<p;++T)m[T]=0;t(h===0),t((h&-8192)===0)},Mt.prototype.stub=function(r){for(var u=new Array(r),m=0;m<r;m++)u[m]=0;return u},Mt.prototype.mulp=function(r,u,m){var p=2*this.guessLen13b(r.length,u.length),h=this.makeRBT(p),T=this.stub(p),w=new Array(p),f=new Array(p),c=new Array(p),g=new Array(p),v=new Array(p),M=new Array(p),O=m.words;O.length=p,this.convert13b(r.words,r.length,w,p),this.convert13b(u.words,u.length,g,p),this.transform(w,T,f,c,p,h),this.transform(g,T,v,M,p,h);for(var B=0;B<p;B++){var N=f[B]*v[B]-c[B]*M[B];c[B]=f[B]*M[B]+c[B]*v[B],f[B]=N}return this.conjugate(f,c,p),this.transform(f,c,O,T,p,h),this.conjugate(O,T,p),this.normalize13b(O,p),m.negative=r.negative^u.negative,m.length=r.length+u.length,m._strip()},o.prototype.mul=function(r){var u=new o(null);return u.words=new Array(this.length+r.length),this.mulTo(r,u)},o.prototype.mulf=function(r){var u=new o(null);return u.words=new Array(this.length+r.length),Et(this,r,u)},o.prototype.imul=function(r){return this.clone().mulTo(r,this)},o.prototype.imuln=function(r){var u=r<0;u&&(r=-r),t(typeof r=="number"),t(r<67108864);for(var m=0,p=0;p<this.length;p++){var h=(this.words[p]|0)*r,T=(h&67108863)+(m&67108863);m>>=26,m+=h/67108864|0,m+=T>>>26,this.words[p]=T&67108863}return m!==0&&(this.words[p]=m,this.length++),this.length=r===0?1:this.length,u?this.ineg():this},o.prototype.muln=function(r){return this.clone().imuln(r)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(r){var u=P(r);if(u.length===0)return new o(1);for(var m=this,p=0;p<u.length&&u[p]===0;p++,m=m.sqr());if(++p<u.length)for(var h=m.sqr();p<u.length;p++,h=h.sqr())u[p]!==0&&(m=m.mul(h));return m},o.prototype.iushln=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26,p=67108863>>>26-u<<26-u,h;if(u!==0){var T=0;for(h=0;h<this.length;h++){var w=this.words[h]&p,f=(this.words[h]|0)-w<<u;this.words[h]=f|T,T=w>>>26-u}T&&(this.words[h]=T,this.length++)}if(m!==0){for(h=this.length-1;h>=0;h--)this.words[h+m]=this.words[h];for(h=0;h<m;h++)this.words[h]=0;this.length+=m}return this._strip()},o.prototype.ishln=function(r){return t(this.negative===0),this.iushln(r)},o.prototype.iushrn=function(r,u,m){t(typeof r=="number"&&r>=0);var p;u?p=(u-u%26)/26:p=0;var h=r%26,T=Math.min((r-h)/26,this.length),w=67108863^67108863>>>h<<h,f=m;if(p-=T,p=Math.max(0,p),f){for(var c=0;c<T;c++)f.words[c]=this.words[c];f.length=T}if(T!==0)if(this.length>T)for(this.length-=T,c=0;c<this.length;c++)this.words[c]=this.words[c+T];else this.words[0]=0,this.length=1;var g=0;for(c=this.length-1;c>=0&&(g!==0||c>=p);c--){var v=this.words[c]|0;this.words[c]=g<<26-h|v>>>h,g=v&w}return f&&g!==0&&(f.words[f.length++]=g),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},o.prototype.ishrn=function(r,u,m){return t(this.negative===0),this.iushrn(r,u,m)},o.prototype.shln=function(r){return this.clone().ishln(r)},o.prototype.ushln=function(r){return this.clone().iushln(r)},o.prototype.shrn=function(r){return this.clone().ishrn(r)},o.prototype.ushrn=function(r){return this.clone().iushrn(r)},o.prototype.testn=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26,p=1<<u;if(this.length<=m)return!1;var h=this.words[m];return!!(h&p)},o.prototype.imaskn=function(r){t(typeof r=="number"&&r>=0);var u=r%26,m=(r-u)/26;if(t(this.negative===0,"imaskn works only with positive numbers"),this.length<=m)return this;if(u!==0&&m++,this.length=Math.min(m,this.length),u!==0){var p=67108863^67108863>>>u<<u;this.words[this.length-1]&=p}return this._strip()},o.prototype.maskn=function(r){return this.clone().imaskn(r)},o.prototype.iaddn=function(r){return t(typeof r=="number"),t(r<67108864),r<0?this.isubn(-r):this.negative!==0?this.length===1&&(this.words[0]|0)<=r?(this.words[0]=r-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(r),this.negative=1,this):this._iaddn(r)},o.prototype._iaddn=function(r){this.words[0]+=r;for(var u=0;u<this.length&&this.words[u]>=67108864;u++)this.words[u]-=67108864,u===this.length-1?this.words[u+1]=1:this.words[u+1]++;return this.length=Math.max(this.length,u+1),this},o.prototype.isubn=function(r){if(t(typeof r=="number"),t(r<67108864),r<0)return this.iaddn(-r);if(this.negative!==0)return this.negative=0,this.iaddn(r),this.negative=1,this;if(this.words[0]-=r,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var u=0;u<this.length&&this.words[u]<0;u++)this.words[u]+=67108864,this.words[u+1]-=1;return this._strip()},o.prototype.addn=function(r){return this.clone().iaddn(r)},o.prototype.subn=function(r){return this.clone().isubn(r)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(r,u,m){var p=r.length+m,h;this._expand(p);var T,w=0;for(h=0;h<r.length;h++){T=(this.words[h+m]|0)+w;var f=(r.words[h]|0)*u;T-=f&67108863,w=(T>>26)-(f/67108864|0),this.words[h+m]=T&67108863}for(;h<this.length-m;h++)T=(this.words[h+m]|0)+w,w=T>>26,this.words[h+m]=T&67108863;if(w===0)return this._strip();for(t(w===-1),w=0,h=0;h<this.length;h++)T=-(this.words[h]|0)+w,w=T>>26,this.words[h]=T&67108863;return this.negative=1,this._strip()},o.prototype._wordDiv=function(r,u){var m=this.length-r.length,p=this.clone(),h=r,T=h.words[h.length-1]|0,w=this._countBits(T);m=26-w,m!==0&&(h=h.ushln(m),p.iushln(m),T=h.words[h.length-1]|0);var f=p.length-h.length,c;if(u!=="mod"){c=new o(null),c.length=f+1,c.words=new Array(c.length);for(var g=0;g<c.length;g++)c.words[g]=0}var v=p.clone()._ishlnsubmul(h,1,f);v.negative===0&&(p=v,c&&(c.words[f]=1));for(var M=f-1;M>=0;M--){var O=(p.words[h.length+M]|0)*67108864+(p.words[h.length+M-1]|0);for(O=Math.min(O/T|0,67108863),p._ishlnsubmul(h,O,M);p.negative!==0;)O--,p.negative=0,p._ishlnsubmul(h,1,M),p.isZero()||(p.negative^=1);c&&(c.words[M]=O)}return c&&c._strip(),p._strip(),u!=="div"&&m!==0&&p.iushrn(m),{div:c||null,mod:p}},o.prototype.divmod=function(r,u,m){if(t(!r.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var p,h,T;return this.negative!==0&&r.negative===0?(T=this.neg().divmod(r,u),u!=="mod"&&(p=T.div.neg()),u!=="div"&&(h=T.mod.neg(),m&&h.negative!==0&&h.iadd(r)),{div:p,mod:h}):this.negative===0&&r.negative!==0?(T=this.divmod(r.neg(),u),u!=="mod"&&(p=T.div.neg()),{div:p,mod:T.mod}):(this.negative&r.negative)!==0?(T=this.neg().divmod(r.neg(),u),u!=="div"&&(h=T.mod.neg(),m&&h.negative!==0&&h.isub(r)),{div:T.div,mod:h}):r.length>this.length||this.cmp(r)<0?{div:new o(0),mod:this}:r.length===1?u==="div"?{div:this.divn(r.words[0]),mod:null}:u==="mod"?{div:null,mod:new o(this.modrn(r.words[0]))}:{div:this.divn(r.words[0]),mod:new o(this.modrn(r.words[0]))}:this._wordDiv(r,u)},o.prototype.div=function(r){return this.divmod(r,"div",!1).div},o.prototype.mod=function(r){return this.divmod(r,"mod",!1).mod},o.prototype.umod=function(r){return this.divmod(r,"mod",!0).mod},o.prototype.divRound=function(r){var u=this.divmod(r);if(u.mod.isZero())return u.div;var m=u.div.negative!==0?u.mod.isub(r):u.mod,p=r.ushrn(1),h=r.andln(1),T=m.cmp(p);return T<0||h===1&&T===0?u.div:u.div.negative!==0?u.div.isubn(1):u.div.iaddn(1)},o.prototype.modrn=function(r){var u=r<0;u&&(r=-r),t(r<=67108863);for(var m=(1<<26)%r,p=0,h=this.length-1;h>=0;h--)p=(m*p+(this.words[h]|0))%r;return u?-p:p},o.prototype.modn=function(r){return this.modrn(r)},o.prototype.idivn=function(r){var u=r<0;u&&(r=-r),t(r<=67108863);for(var m=0,p=this.length-1;p>=0;p--){var h=(this.words[p]|0)+m*67108864;this.words[p]=h/r|0,m=h%r}return this._strip(),u?this.ineg():this},o.prototype.divn=function(r){return this.clone().idivn(r)},o.prototype.egcd=function(r){t(r.negative===0),t(!r.isZero());var u=this,m=r.clone();u.negative!==0?u=u.umod(r):u=u.clone();for(var p=new o(1),h=new o(0),T=new o(0),w=new o(1),f=0;u.isEven()&&m.isEven();)u.iushrn(1),m.iushrn(1),++f;for(var c=m.clone(),g=u.clone();!u.isZero();){for(var v=0,M=1;(u.words[0]&M)===0&&v<26;++v,M<<=1);if(v>0)for(u.iushrn(v);v-- >0;)(p.isOdd()||h.isOdd())&&(p.iadd(c),h.isub(g)),p.iushrn(1),h.iushrn(1);for(var O=0,B=1;(m.words[0]&B)===0&&O<26;++O,B<<=1);if(O>0)for(m.iushrn(O);O-- >0;)(T.isOdd()||w.isOdd())&&(T.iadd(c),w.isub(g)),T.iushrn(1),w.iushrn(1);u.cmp(m)>=0?(u.isub(m),p.isub(T),h.isub(w)):(m.isub(u),T.isub(p),w.isub(h))}return{a:T,b:w,gcd:m.iushln(f)}},o.prototype._invmp=function(r){t(r.negative===0),t(!r.isZero());var u=this,m=r.clone();u.negative!==0?u=u.umod(r):u=u.clone();for(var p=new o(1),h=new o(0),T=m.clone();u.cmpn(1)>0&&m.cmpn(1)>0;){for(var w=0,f=1;(u.words[0]&f)===0&&w<26;++w,f<<=1);if(w>0)for(u.iushrn(w);w-- >0;)p.isOdd()&&p.iadd(T),p.iushrn(1);for(var c=0,g=1;(m.words[0]&g)===0&&c<26;++c,g<<=1);if(c>0)for(m.iushrn(c);c-- >0;)h.isOdd()&&h.iadd(T),h.iushrn(1);u.cmp(m)>=0?(u.isub(m),p.isub(h)):(m.isub(u),h.isub(p))}var v;return u.cmpn(1)===0?v=p:v=h,v.cmpn(0)<0&&v.iadd(r),v},o.prototype.gcd=function(r){if(this.isZero())return r.abs();if(r.isZero())return this.abs();var u=this.clone(),m=r.clone();u.negative=0,m.negative=0;for(var p=0;u.isEven()&&m.isEven();p++)u.iushrn(1),m.iushrn(1);do{for(;u.isEven();)u.iushrn(1);for(;m.isEven();)m.iushrn(1);var h=u.cmp(m);if(h<0){var T=u;u=m,m=T}else if(h===0||m.cmpn(1)===0)break;u.isub(m)}while(!0);return m.iushln(p)},o.prototype.invm=function(r){return this.egcd(r).a.umod(r)},o.prototype.isEven=function(){return(this.words[0]&1)===0},o.prototype.isOdd=function(){return(this.words[0]&1)===1},o.prototype.andln=function(r){return this.words[0]&r},o.prototype.bincn=function(r){t(typeof r=="number");var u=r%26,m=(r-u)/26,p=1<<u;if(this.length<=m)return this._expand(m+1),this.words[m]|=p,this;for(var h=p,T=m;h!==0&&T<this.length;T++){var w=this.words[T]|0;w+=h,h=w>>>26,w&=67108863,this.words[T]=w}return h!==0&&(this.words[T]=h,this.length++),this},o.prototype.isZero=function(){return this.length===1&&this.words[0]===0},o.prototype.cmpn=function(r){var u=r<0;if(this.negative!==0&&!u)return-1;if(this.negative===0&&u)return 1;this._strip();var m;if(this.length>1)m=1;else{u&&(r=-r),t(r<=67108863,"Number is too big");var p=this.words[0]|0;m=p===r?0:p<r?-1:1}return this.negative!==0?-m|0:m},o.prototype.cmp=function(r){if(this.negative!==0&&r.negative===0)return-1;if(this.negative===0&&r.negative!==0)return 1;var u=this.ucmp(r);return this.negative!==0?-u|0:u},o.prototype.ucmp=function(r){if(this.length>r.length)return 1;if(this.length<r.length)return-1;for(var u=0,m=this.length-1;m>=0;m--){var p=this.words[m]|0,h=r.words[m]|0;if(p!==h){p<h?u=-1:p>h&&(u=1);break}}return u},o.prototype.gtn=function(r){return this.cmpn(r)===1},o.prototype.gt=function(r){return this.cmp(r)===1},o.prototype.gten=function(r){return this.cmpn(r)>=0},o.prototype.gte=function(r){return this.cmp(r)>=0},o.prototype.ltn=function(r){return this.cmpn(r)===-1},o.prototype.lt=function(r){return this.cmp(r)===-1},o.prototype.lten=function(r){return this.cmpn(r)<=0},o.prototype.lte=function(r){return this.cmp(r)<=0},o.prototype.eqn=function(r){return this.cmpn(r)===0},o.prototype.eq=function(r){return this.cmp(r)===0},o.red=function(r){return new V(r)},o.prototype.toRed=function(r){return t(!this.red,"Already a number in reduction context"),t(this.negative===0,"red works only with positives"),r.convertTo(this)._forceRed(r)},o.prototype.fromRed=function(){return t(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(r){return this.red=r,this},o.prototype.forceRed=function(r){return t(!this.red,"Already a number in reduction context"),this._forceRed(r)},o.prototype.redAdd=function(r){return t(this.red,"redAdd works only with red numbers"),this.red.add(this,r)},o.prototype.redIAdd=function(r){return t(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,r)},o.prototype.redSub=function(r){return t(this.red,"redSub works only with red numbers"),this.red.sub(this,r)},o.prototype.redISub=function(r){return t(this.red,"redISub works only with red numbers"),this.red.isub(this,r)},o.prototype.redShl=function(r){return t(this.red,"redShl works only with red numbers"),this.red.shl(this,r)},o.prototype.redMul=function(r){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,r),this.red.mul(this,r)},o.prototype.redIMul=function(r){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,r),this.red.imul(this,r)},o.prototype.redSqr=function(){return t(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return t(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return t(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return t(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return t(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(r){return t(this.red&&!r.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,r)};var Le={k256:null,p224:null,p192:null,p25519:null};function Wt(y,r){this.name=y,this.p=new o(r,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}Wt.prototype._tmp=function(){var r=new o(null);return r.words=new Array(Math.ceil(this.n/13)),r},Wt.prototype.ireduce=function(r){var u=r,m;do this.split(u,this.tmp),u=this.imulK(u),u=u.iadd(this.tmp),m=u.bitLength();while(m>this.n);var p=m<this.n?-1:u.ucmp(this.p);return p===0?(u.words[0]=0,u.length=1):p>0?u.isub(this.p):u.strip!==void 0?u.strip():u._strip(),u},Wt.prototype.split=function(r,u){r.iushrn(this.n,0,u)},Wt.prototype.imulK=function(r){return r.imul(this.k)};function dn(){Wt.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}n(dn,Wt),dn.prototype.split=function(r,u){for(var m=4194303,p=Math.min(r.length,9),h=0;h<p;h++)u.words[h]=r.words[h];if(u.length=p,r.length<=9){r.words[0]=0,r.length=1;return}var T=r.words[9];for(u.words[u.length++]=T&m,h=10;h<r.length;h++){var w=r.words[h]|0;r.words[h-10]=(w&m)<<4|T>>>22,T=w}T>>>=22,r.words[h-10]=T,T===0&&r.length>10?r.length-=10:r.length-=9},dn.prototype.imulK=function(r){r.words[r.length]=0,r.words[r.length+1]=0,r.length+=2;for(var u=0,m=0;m<r.length;m++){var p=r.words[m]|0;u+=p*977,r.words[m]=u&67108863,u=p*64+(u/67108864|0)}return r.words[r.length-1]===0&&(r.length--,r.words[r.length-1]===0&&r.length--),r};function ss(){Wt.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(ss,Wt);function cs(){Wt.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n(cs,Wt);function Yi(){Wt.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n(Yi,Wt),Yi.prototype.imulK=function(r){for(var u=0,m=0;m<r.length;m++){var p=(r.words[m]|0)*19+u,h=p&67108863;p>>>=26,r.words[m]=h,u=p}return u!==0&&(r.words[r.length++]=u),r},o._prime=function(r){if(Le[r])return Le[r];var u;if(r==="k256")u=new dn;else if(r==="p224")u=new ss;else if(r==="p192")u=new cs;else if(r==="p25519")u=new Yi;else throw new Error("Unknown prime "+r);return Le[r]=u,u};function V(y){if(typeof y=="string"){var r=o._prime(y);this.m=r.p,this.prime=r}else t(y.gtn(1),"modulus must be greater than 1"),this.m=y,this.prime=null}V.prototype._verify1=function(r){t(r.negative===0,"red works only with positives"),t(r.red,"red works only with red numbers")},V.prototype._verify2=function(r,u){t((r.negative|u.negative)===0,"red works only with positives"),t(r.red&&r.red===u.red,"red works only with red numbers")},V.prototype.imod=function(r){return this.prime?this.prime.ireduce(r)._forceRed(this):(b(r,r.umod(this.m)._forceRed(this)),r)},V.prototype.neg=function(r){return r.isZero()?r.clone():this.m.sub(r)._forceRed(this)},V.prototype.add=function(r,u){this._verify2(r,u);var m=r.add(u);return m.cmp(this.m)>=0&&m.isub(this.m),m._forceRed(this)},V.prototype.iadd=function(r,u){this._verify2(r,u);var m=r.iadd(u);return m.cmp(this.m)>=0&&m.isub(this.m),m},V.prototype.sub=function(r,u){this._verify2(r,u);var m=r.sub(u);return m.cmpn(0)<0&&m.iadd(this.m),m._forceRed(this)},V.prototype.isub=function(r,u){this._verify2(r,u);var m=r.isub(u);return m.cmpn(0)<0&&m.iadd(this.m),m},V.prototype.shl=function(r,u){return this._verify1(r),this.imod(r.ushln(u))},V.prototype.imul=function(r,u){return this._verify2(r,u),this.imod(r.imul(u))},V.prototype.mul=function(r,u){return this._verify2(r,u),this.imod(r.mul(u))},V.prototype.isqr=function(r){return this.imul(r,r.clone())},V.prototype.sqr=function(r){return this.mul(r,r)},V.prototype.sqrt=function(r){if(r.isZero())return r.clone();var u=this.m.andln(3);if(t(u%2===1),u===3){var m=this.m.add(new o(1)).iushrn(2);return this.pow(r,m)}for(var p=this.m.subn(1),h=0;!p.isZero()&&p.andln(1)===0;)h++,p.iushrn(1);t(!p.isZero());var T=new o(1).toRed(this),w=T.redNeg(),f=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new o(2*c*c).toRed(this);this.pow(c,f).cmp(w)!==0;)c.redIAdd(w);for(var g=this.pow(c,p),v=this.pow(r,p.addn(1).iushrn(1)),M=this.pow(r,p),O=h;M.cmp(T)!==0;){for(var B=M,N=0;B.cmp(T)!==0;N++)B=B.redSqr();t(N<O);var L=this.pow(g,new o(1).iushln(O-N-1));v=v.redMul(L),g=L.redSqr(),M=M.redMul(g),O=N}return v},V.prototype.invm=function(r){var u=r._invmp(this.m);return u.negative!==0?(u.negative=0,this.imod(u).redNeg()):this.imod(u)},V.prototype.pow=function(r,u){if(u.isZero())return new o(1).toRed(this);if(u.cmpn(1)===0)return r.clone();var m=4,p=new Array(1<<m);p[0]=new o(1).toRed(this),p[1]=r;for(var h=2;h<p.length;h++)p[h]=this.mul(p[h-1],r);var T=p[0],w=0,f=0,c=u.bitLength()%26;for(c===0&&(c=26),h=u.length-1;h>=0;h--){for(var g=u.words[h],v=c-1;v>=0;v--){var M=g>>v&1;if(T!==p[0]&&(T=this.sqr(T)),M===0&&w===0){f=0;continue}w<<=1,w|=M,f++,!(f!==m&&(h!==0||v!==0))&&(T=this.mul(T,p[w]),f=0,w=0)}c=26}return T},V.prototype.convertTo=function(r){var u=r.umod(this.m);return u===r?u.clone():u},V.prototype.convertFrom=function(r){var u=r.clone();return u.red=null,u},o.mont=function(r){return new fe(r)};function fe(y){V.call(this,y),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}n(fe,V),fe.prototype.convertTo=function(r){return this.imod(r.ushln(this.shift))},fe.prototype.convertFrom=function(r){var u=this.imod(r.mul(this.rinv));return u.red=null,u},fe.prototype.imul=function(r,u){if(r.isZero()||u.isZero())return r.words[0]=0,r.length=1,r;var m=r.imul(u),p=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(p).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},fe.prototype.mul=function(r,u){if(r.isZero()||u.isZero())return new o(0)._forceRed(this);var m=r.mul(u),p=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(p).iushrn(this.shift),T=h;return h.cmp(this.m)>=0?T=h.isub(this.m):h.cmpn(0)<0&&(T=h.iadd(this.m)),T._forceRed(this)},fe.prototype.invm=function(r){var u=this.imod(r._invmp(this.m).mul(this.r2));return u._forceRed(this)}})(typeof as>"u"||as,Dl)});import{TransactionType as mu}from"@msafe/sui3-utils";import{coinsList as nu,poolIdPoolNameMap as ou,poolInfo as vs,singleAssetPoolCoinMap as au}from"@alphafi/alphafi-sdk";import{TransactionType as je}from"@msafe/sui3-utils";import{bcs as fn,fromBase64 as hn}from"@mysten/bcs";var gn=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isClaimRewardTransaction())return this.decodeClaimReward();let e=this.getLiquidityChangeEvent();if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson,n=t.pool_id,o=ou[n];if(console.log("Decoder event data - ",t),console.log("Decoder poolName - ",o),this.isWithdrawAlphaEvent(e))return this.decodeWithdrawAlpha(t);if(this.isWithdrawEvent(t))return this.decodeWithdraw(o);if(this.isDoubleAssetDepositEvent(t,o))return this.decodeDoubleAssetDeposit(o,t);if(this.isSingleAssetDepositEvent(t,o))return this.decodeSingleAssetDeposit(o,t);throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getLiquidityChangeEvent(){return this.simResult.events.find(e=>this.isLiquidityChangeEventType(e.type))}isClaimRewardTransaction(){return!!this.getMoveCallCommand("get_user_rewards_all")}isLiquidityChangeEventType(e){return e.includes("LiquidityChangeEvent")||e.includes("LiquidityChangeNewNewEvent")||e.includes("WithdrawEventV2")}isWithdrawAlphaEvent(e){return e.type.includes("WithdrawEventV2")}isWithdrawEvent(e){return e.event_type===1}isDoubleAssetDepositEvent(e,t){return e.event_type===0&&vs[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&vs[t].assetTypes.length===1}extractXTokensAmount(){let e=this.inputs.find(o=>o.Pure!==void 0);if(!e||!e.Pure?.bytes)throw new Error("Unable to extract xTokensAmount from inputs");let{bytes:t}=e.Pure,n;return t.length===12?n=fn.u64().parse(hn(t)):t.length===24?n=fn.u128().parse(hn(t)):t.length===44?n=fn.u256().parse(hn(t)):n=fn.u64().parse(hn(t)),n}decodeDoubleAssetDeposit(e,t){let{amount_a:n,amount_b:o}=t,i=Number(n)>0;return console.log("Decoder.decodeDoubleAssetDeposit",n,o,i),{txType:je.Other,type:"depositDoubleAsset",intentionData:{poolName:e,amount:i?n:o,isAmountA:i}}}decodeSingleAssetDeposit(e,t){let{amount:n}=t;if(console.log("Decoder.decodeSingleAssetDeposit",n),this.getLiquidityChangeEvent().type.includes(":alphafi_navi_pool:")){let{coin:i}=au[e],{expo:s}=nu[i];n=Math.floor(Number(n)/10**(9-s)).toString()}return{txType:je.Other,type:"depositSingleAsset",intentionData:{poolName:e,amount:n}}}decodeWithdraw(e){let t=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",t),{txType:je.Other,type:"withdraw",intentionData:{poolName:e,xTokensAmount:t}}}decodeWithdrawAlpha(e){let t=this.extractXTokensAmount(),{amount_withdrawn_from_locked:n}=e;return console.log("Decoder.decodeWithdrawAlpha",t,n),{txType:je.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:t}}}decodeClaimReward(){return{txType:je.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as ru}from"@alphafi/alphafi-sdk";import iu from"sort-keys-recursive";var S=class{constructor(e){this.data=e}serialize(){return JSON.stringify(iu(this.data))}};var yn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t;return await ru(n.address)}static fromData(t){return new a(t)}};import{depositDoubleAssetTxb as su}from"@alphafi/alphafi-sdk";var bn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i,isAmountA:s}=this.data;return await su(o,n.address,i,s)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new a(t)}};import{depositSingleAssetTxb as cu}from"@alphafi/alphafi-sdk";var Tn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i}=this.data;return await cu(o,n.address,i)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new a(t)}};import{withdrawTxb as lu}from"@alphafi/alphafi-sdk";var Sn=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:i}=this.data;return await lu(i,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};import{withdrawAlphaTxb as uu}from"@alphafi/alphafi-sdk";var In=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:i}=this.data;return await uu(i,o,n.address)}static fromData(t){return console.log("WithdrawAlphaIntention.fromData",t),new a(t)}};var wn=class{application="alphafi";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n,account:o}=e,i=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("AlphaFiHelper Sim result - ",i);let l=new gn(t,i).decode();return{txType:mu.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{account:t}=e;console.log("AlphaFi build transaction type",e.txSubType);let n;switch(e.txSubType){case"depositSingleAsset":n=Tn.fromData(e.intentionData);break;case"depositDoubleAsset":n=bn.fromData(e.intentionData);break;case"withdraw":n=Sn.fromData(e.intentionData);break;case"withdrawAlpha":n=In.fromData(e.intentionData);break;case"claimReward":n=yn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return n.build({account:t})}};import{TransactionType as Eu}from"@msafe/sui3-utils";import{TransactionType as jt}from"@msafe/sui3-utils";import{bcs as Tr}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as Sr}from"bucket-protocol-sdk";var Cn=class{constructor(e){this.transaction=e}decode(){if(this.isSBUCKDepositTransaction())return this.decodeSBUCKDeposit();if(this.isSBUCKUnstakeTransaction())return this.decodeSBUCKUnstake();if(this.isSBUCKWithdrawTransaction())return this.decodeSBUCKWithdraw();if(this.isSBUCKClaimTransaction())return this.decodeSBUCKClaim();if(this.isLockedClaimTransaction())return this.decodeLockedClaim();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isCloseTransaction())return this.decodeClose();if(this.isTankDepositTransaction())return this.decodeTankDeposit();if(this.isTankWithdrawTransaction())return this.decodeTankWithdraw();if(this.isTankClaimTransaction())return this.decodeTankClaim();if(this.isPsmTransaction())return this.decodePsm();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getMoveCallModuleCommand(e,t){return this.commands.find(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getMoveCallPackageModuleCommand(e,t,n){return this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.package===e&&o.MoveCall.module===t&&o.MoveCall.function===n)}getMoveCallModuleCommands(e,t){return this.commands.filter(n=>n.$kind==="MoveCall"&&n.MoveCall.module===e&&n.MoveCall.function===t)}getSplitCoinsCommands(){return this.commands.filter(e=>e.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(e=>e.$kind==="TransferObjects")}isPsmTransaction(){return!!this.getMoveCallCommand("charge_reservoir")||!!this.getMoveCallCommand("discharge_reservoir")}isStrapNewTransaction(){return!!this.getMoveCallModuleCommand("strap","new")}isBorrowTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","high_top_up")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow_with_strap")}isRepayTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","fully_repay")||!!this.getMoveCallModuleCommand("bucket_operations","fully_repay_with_strap")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw_with_strap")}isWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","withdraw")||!!this.getMoveCallModuleCommand("buck","withdraw_with_strap")}isCloseTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","destroy_empty_strap")}isTankDepositTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","deposit")}isTankWithdrawTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","withdraw")}isTankClaimTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","claim")}isSBUCKDepositTransaction(){return!!this.getMoveCallModuleCommand("buck","buck_to_sbuck")}isSBUCKWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","sbuck_to_buck")}isSBUCKStakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Sr,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Sr,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(Sr,"fountain_core","claim")}isLockedClaimTransaction(){return!!this.getMoveCallModuleCommand("proof_rule","claim")||!!this.getMoveCallModuleCommand("lst_proof_rule","claim")}isLstUnlockTransaction(){return!!this.getMoveCallModuleCommand("lst_proof_rule","unlock")}decodePsm(){let e,t,n="0",o=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return o.$kind==="Input"&&(n=this.getPureInputU64(o.Input)),this.getMoveCallCommand("charge_reservoir")?([e]=this.getMoveCallCommand("charge_reservoir").MoveCall.typeArguments,t=!1):([e]=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments,t=!0),console.log("Decoder.decodePsm",e,n,t),{txType:jt.Other,type:"psm",intentionData:{coinType:e,amount:n,buckToCoin:t}}}decodeBorrow(){let e="",t="0",n,o=this.getStrapId(),i="0",s=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];if(s.$kind==="Input"&&(i=this.getPureInputU64(s.Input)),this.getMoveCallCommand("high_top_up")){let l=this.getMoveCallCommand("high_top_up").MoveCall;[e]=l.typeArguments;let d=l.arguments[1];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let b=l.arguments[3];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([n]=I)}}else if(this.getMoveCallCommand("high_borrow")){let l=this.getMoveCallCommand("high_borrow").MoveCall;[e]=l.typeArguments;let d=l.arguments[4];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let b=l.arguments[5];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([n]=I)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let l=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[e]=l.typeArguments;let d=l.arguments[5];d.$kind==="Input"&&(t=this.getPureInputU64(d.Input));let b=l.arguments[6];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([n]=I)}}return{txType:jt.Other,type:"borrow",intentionData:{collateralType:e,collateralAmount:i,borrowAmount:t,insertionPlace:n,strapId:o}}}decodeRepay(){let e="",t="0",n="0",i,s=this.getStrapId();if(this.getMoveCallCommand("fully_repay"))[e]=this.getMoveCallCommand("fully_repay").MoveCall.typeArguments;else if(this.getMoveCallCommand("fully_repay_with_strap"))[e]=this.getMoveCallCommand("fully_repay_with_strap").MoveCall.typeArguments;else if(this.getMoveCallCommand("repay_and_withdraw")){let l=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[e]=l.typeArguments;let d=l.arguments[4];d.$kind==="Input"&&(n=this.getPureInputU64(d.Input));let b=l.arguments[5];if(b.$kind==="Input"){let C=this.getPureAddresses(b.Input);C.length===1&&([i]=C)}let I=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];I.$kind==="Input"&&(t=this.getPureInputU64(I.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let l=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[e]=l.typeArguments;let d=l.arguments[5];d.$kind==="Input"&&(n=this.getPureInputU64(d.Input));let b=l.arguments[6];if(b.$kind==="Input"){let C=this.getPureAddresses(b.Input);C.length===1&&([i]=C)}let I=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];I.$kind==="Input"&&(t=this.getPureInputU64(I.Input))}return{txType:jt.Other,type:"repay",intentionData:{collateralType:e,repayAmount:t,withdrawAmount:n,isSurplus:!1,insertionPlace:i,strapId:s}}}decodeWithdraw(){let e="",t="0",n,o=this.getStrapId();if(this.getMoveCallCommand("withdraw_with_strap")){let i=this.getMoveCallCommand("withdraw_with_strap").MoveCall;[e]=i.typeArguments;let s=i.arguments[4];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let l=i.arguments[5];if(l.$kind==="Input"){let d=this.getPureAddresses(l.Input);d.length===1&&([n]=d)}}else if(this.getMoveCallCommand("withdraw")){let i=this.getMoveCallCommand("withdraw").MoveCall;[e]=i.typeArguments;let s=i.arguments[3];s.$kind==="Input"&&(t=this.getPureInputU64(s.Input));let l=i.arguments[4];if(l.$kind==="Input"){let d=this.getPureAddresses(l.Input);d.length===1&&([n]=d)}}return{txType:jt.Other,type:"withdraw",intentionData:{collateralType:e,withdrawAmount:t,insertionPlace:n,strapId:o}}}decodeClose(){let e="",t=this.getStrapId();return this.getMoveCallCommand("destroy_empty_strap")&&([e]=this.getMoveCallCommand("destroy_empty_strap").MoveCall.typeArguments),{txType:jt.Other,type:"close",intentionData:{collateralType:e,strapId:t}}}decodeSBUCKDeposit(){let t=this.getMoveCallCommand("into_balance").MoveCall.typeArguments[0],n="0",i=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];i.$kind==="Input"&&(n=this.getPureInputU64(i.Input));let s=this.isSBUCKStakeTransaction();return console.log("Decoder.decodeSBUCKDeposit",t,n,s),{txType:jt.Other,type:"sbuck-deposit",intentionData:{coinType:t,amount:n,isStake:s}}}decodeSBUCKUnstake(){let e="0",t=this.isSBUCKStakeTransaction();if(t){let d=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];d.$kind==="Input"&&(e=this.getPureInputU64(d.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let l=0;l<o.length;l++){let d=o[l];n.push("")}else{let l=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let d=0;d<l.length;d++){let I=l[d].MoveCall.arguments[2];if(I.$kind==="Input"){let{objectId:C}=this.inputs[I.Input].UnresolvedObject;n.push(C)}}}let i=this.isSBUCKWithdrawTransaction(),s={stakeProofs:n,amount:e,isStake:t,toBuck:i};return console.log("Decoder.decodeSBUCKUnstake",s),{txType:jt.Other,type:"sbuck-unstake",intentionData:s}}decodeSBUCKWithdraw(){let e="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return n.$kind==="Input"&&(e=this.getPureInputU64(n.Input)),console.log("Decoder.SBUCKWithdraw",e),{txType:jt.Other,type:"sbuck-withdraw",intentionData:{amount:e}}}decodeSBUCKClaim(){let e=[],t=this.getMoveCallModuleCommands("fountain_core","claim");for(let n=0;n<t.length;n++){let i=t[n].MoveCall.arguments[2];if(i.$kind==="Input"){let{objectId:s}=this.inputs[i.Input].UnresolvedObject;e.push(s)}}return console.log("Decoder.decodeSBUCKClaim",e),{txType:jt.Other,type:"sbuck-claim",intentionData:{stakeProofs:e}}}decodeTankDeposit(){let e="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];n.$kind==="Input"&&(e=this.getPureInputU64(n.Input));let i=this.getMoveCallModuleCommand("tank_operations","deposit").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankDeposit",i,e),{txType:jt.Other,type:"tank-deposit",intentionData:{coinType:i,amount:e}}}decodeTankWithdraw(){let e=this.getMoveCallModuleCommand("tank_operations","withdraw").MoveCall,t=e.typeArguments[0],n="0",o=e.arguments[5];return o.$kind==="Input"&&(n=this.getPureInputU64(o.Input)),console.log("Decoder.decodeTankWithdraw",t,n),{txType:jt.Other,type:"tank-withdraw",intentionData:{coinType:t,amount:n}}}decodeTankClaim(){let t=this.getMoveCallModuleCommand("tank_operations","claim").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankClaim",t),{txType:jt.Other,type:"tank-claim",intentionData:{coinType:t}}}decodeLockedClaim(){let e="",t=0,n=this.getMoveCallModuleCommands("proof_rule","claim");for(let i=0;i<n.length;i++)[e]=n[i].MoveCall.typeArguments,t++;let o=this.getMoveCallModuleCommands("lst_proof_rule","claim");for(let i=0;i<o.length;i++)[e]=o[i].MoveCall.typeArguments,t++;return console.log("Decoder.decodeLockedClaim",e,t),{txType:jt.Other,type:"lock-claim",intentionData:{coinType:e,proofCount:t}}}getCoinInput(e){if(this.inputs[e].$kind!=="Object")throw new Error("not Object argument")}getStrapId(){let e;if(this.isStrapNewTransaction()?e="new":this.isLstUnlockTransaction()&&(e="locked"),!e){let t=this.getMoveCallModuleCommand("fountain","unstake");if(t){let n=t.MoveCall.arguments[2];n.$kind==="Input"&&(e=this.inputs[n.Input].UnresolvedObject.objectId)}}return e}getPureInputU64(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return Tr.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return Tr.vector(Tr.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as hu}from"@msafe/sui3-utils";import{Transaction as du}from"@mysten/sui/transactions";import{buildPsmTx as fu}from"bucket-protocol-sdk";import{BucketClient as pu}from"bucket-protocol-sdk";var Ot=(a,e)=>{let t=a==="sui:mainnet"?"mainnet":"testnet";return new pu(t,e.address)};var As=async(a,e,t)=>{let{coinType:n,amount:o,buckToCoin:i}=a,s=new du,l=Ot(t,e);return await fu(l,s,n,o,i,e.address),s};var xn=class a extends S{constructor(t){super(t);this.data=t}txType=hu.Other;txSubType="psm";async build(t){let{account:n,network:o}=t;return await As(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Su}from"@msafe/sui3-utils";import{Transaction as Dn}from"@mysten/sui/transactions";import{buildBorrowTx as gu,buildCloseTx as yu,buildRepayTx as bu,buildWithdrawTx as Tu}from"bucket-protocol-sdk";var Ms=async(a,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:i,insertionPlace:s,strapId:l}=a,d=new Dn,b=Ot(t,e);return await gu(b,d,n,o,i,e.address,s,l),d},Os=async(a,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:i,strapId:s}=a,l=new Dn,d=Ot(t,e);return await Tu(d,l,n,o,e.address,i,s),l},Ps=async(a,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:i,isSurplus:s,insertionPlace:l,strapId:d}=a,b=new Dn,I=Ot(t,e);return await bu(I,b,n,o,i,e.address,s,l,d),b},Rs=async(a,e,t)=>{let{collateralType:n,recipient:o,strapId:i}=a,s=new Dn,l=Ot(t,e);return await yu(l,s,n,o,i),s};var kn=class a extends S{constructor(t){super(t);this.data=t}txType=Su.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await Ms(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Iu}from"@msafe/sui3-utils";var vn=class a extends S{constructor(t){super(t);this.data=t}txType=Iu.Other;txSubType="repay";async build(t){let{account:n,network:o}=t;return await Ps(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as wu}from"@msafe/sui3-utils";var An=class a extends S{constructor(t){super(t);this.data=t}txType=wu.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await Os(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Cu}from"@msafe/sui3-utils";var Mn=class a extends S{constructor(t){super(t);this.data=t}txType=Cu.Other;txSubType="close";async build(t){let{account:n,network:o}=t;return await Rs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Wn}from"@msafe/sui3-utils";import{Transaction as On}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as xu,buildSBUCKDepositTx as Du,buildSBUCKUnstakeTx as ku,buildSBUCKWithdrawTx as vu}from"bucket-protocol-sdk";var Bs=async(a,e,t)=>{let{coinType:n,amount:o,isStake:i}=a,s=new On,l=Ot(t,e);return await Du(l,s,n,o,e.address,i),s},Es=async(a,e,t)=>{let{stakeProofs:n,amount:o,isStake:i,toBuck:s}=a,l=new On,d=Ot(t,e);return await ku(d,l,n,o,e.address,i,s),l},Ws=async(a,e,t)=>{let{amount:n}=a,o=new On,i=Ot(t,e);return await vu(i,o,n,e.address),o},Ns=async(a,e,t)=>{let{stakeProofs:n}=a,o=new On,i=Ot(t,e);return await xu(i,o,n,e.address),o};var Pn=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await Bs(this.data,n,o)}static fromData(t){return new a(t)}},Rn=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await Es(this.data,n,o)}static fromData(t){return new a(t)}},Bn=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await Ws(this.data,n,o)}static fromData(t){return new a(t)}},En=class a extends S{constructor(t){super(t);this.data=t}txType=Wn.Other;txSubType="sbuck-claim";async build(t){let{account:n,network:o}=t;return await Ns(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as wr}from"@msafe/sui3-utils";import{Transaction as Ir}from"@mysten/sui/transactions";import{buildTankClaimTx as Au,buildTankDepositTx as Mu,buildTankWithdrawTx as Ou}from"bucket-protocol-sdk";var _s=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Ir,s=Ot(t,e);return await Mu(s,i,n,o,e.address),i},Ls=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Ir,s=Ot(t,e);return await Ou(s,i,n,o,e.address),i},js=async(a,e,t)=>{let{coinType:n}=a,o=new Ir,i=Ot(t,e);return await Au(i,o,n,e.address),o};import{Transaction as Pu}from"@mysten/sui/transactions";import{buildLockedClaimTx as Ru}from"bucket-protocol-sdk";var Us=async(a,e,t)=>{let{coinType:n,proofCount:o}=a,i=new Pu,s=Ot(t,e);return await Ru(s,i,n,o,e.address),i};var Nn=class a extends S{constructor(t){super(t);this.data=t}txType=wr.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await _s(this.data,n,o)}static fromData(t){return new a(t)}},_n=class a extends S{constructor(t){super(t);this.data=t}txType=wr.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await Ls(this.data,n,o)}static fromData(t){return new a(t)}},Ln=class a extends S{constructor(t){super(t);this.data=t}txType=wr.Other;txSubType="tank-claim";async build(t){let{account:n,network:o}=t;return await js(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Bu}from"@msafe/sui3-utils";var jn=class a extends S{constructor(t){super(t);this.data=t}txType=Bu.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await Us(this.data,n,o)}static fromData(t){return new a(t)}};var Un=class{application="bucket";supportSDK="@mysten/sui";async deserialize(e){console.log("Bucket helper deserialize input: ",e);let{transaction:t}=e,o=new Cn(t).decode();return{txType:Eu.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e,i;switch(e.txSubType){case"psm":i=xn.fromData(e.intentionData);break;case"borrow":i=kn.fromData(e.intentionData);break;case"withdraw":i=An.fromData(e.intentionData);break;case"repay":i=vn.fromData(e.intentionData);break;case"close":i=Mn.fromData(e.intentionData);break;case"tank-deposit":i=Nn.fromData(e.intentionData);break;case"tank-withdraw":i=_n.fromData(e.intentionData);break;case"tank-claim":i=Ln.fromData(e.intentionData);break;case"sbuck-deposit":i=Pn.fromData(e.intentionData);break;case"sbuck-unstake":i=Rn.fromData(e.intentionData);break;case"sbuck-withdraw":i=Bn.fromData(e.intentionData);break;case"sbuck-claim":i=En.fromData(e.intentionData);break;case"lock-claim":i=jn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Im}from"@msafe/sui3-utils";import{TransactionType as Fu}from"@msafe/sui3-utils";import{AggregatorClient as Wu,Env as Nu}from"@cetusprotocol/aggregator-sdk";import{CetusFarmsSDK as _u}from"@cetusprotocol/farms-sdk";import{CetusClmmSDK as Lu}from"@cetusprotocol/sui-clmm-sdk";import{CetusVaultsSDK as ju}from"@cetusprotocol/vaults-sdk";import{CetusXcetusSDK as Uu}from"@cetusprotocol/xcetus-sdk";import{SuiClient as Cr,getFullnodeUrl as qs}from"@mysten/sui/client";var Gt=(a,e)=>{let t=Lu.createSDK({env:"mainnet",sui_client:new Cr({url:qs("mainnet")})});return t.setSenderAddress(e.address),t},Ut=(a,e)=>{let t=_u.createSDK({env:"mainnet",sui_client:new Cr({url:qs("mainnet")})});return t.setSenderAddress(e.address),t},qu="https://api-sui.cetus.zone/router_v2/find_routes",Fs=(a,e)=>{let t=new Cr({url:"https://fullnode.mainnet.sui.io/"});return new Wu({endpoint:qu,signer:e.address,client:t,env:Nu.Mainnet})},Ue=(a,e)=>{let t=ju.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t},Ie=(a,e)=>{let t=Uu.createSDK({env:"mainnet"});return t.setSenderAddress(e.address),t};var Ks=async(a,e,t)=>await Gt(t,e).Pool.createPoolPayload(a),Vs=async(a,e,t)=>await Gt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),$s=async(a,e,t)=>await Gt(t,e).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Hs=async(a,e,t)=>await Gt(t,e).Position.closePositionPayload(a),Xs=async(a,e,t)=>await Gt(t,e).Position.removeLiquidityPayload(a),zs=async(a,e,t)=>await Gt(t,e).Rewarder.collectRewarderPayload(a);var qn=class a extends S{constructor(t){super(t);this.data=t}txType=Fu.Other;txSubType="OpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Vs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ku}from"@msafe/sui3-utils";var Fn=class a extends S{constructor(t){super(t);this.data=t}txType=Ku.Other;txSubType="ClaimFeeAndMining";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await zs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Vu}from"@msafe/sui3-utils";var Kn=class a extends S{constructor(t){super(t);this.data=t}txType=Vu.Other;txSubType="CreatePool";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Ks(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as $u}from"@msafe/sui3-utils";var Vn=class a extends S{constructor(t){super(t);this.data=t}txType=$u.Other;txSubType="DecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Xs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Hu}from"@msafe/sui3-utils";var Gs=async(a,e,t)=>await Ut(t,e).Farms.openPositionAddLiquidityStakePayload(a),Qs=async(a,e,t)=>await Ut(t,e).Farms.addLiquidityFixCoinPayload(a),Js=async(a,e,t)=>await Ut(t,e).Farms.removeLiquidityPayload(a),Ys=async(a,e,t)=>await Ut(t,e).Farms.removeLiquidityPayload(a),Zs=async(a,e,t)=>await Ut(t,e).Farms.claimFeeAndClmmReward(a),tc=async(a,e,t)=>await Ut(t,e).Farms.harvestPayload(a),ec=async(a,e,t)=>{let n=Ut(t,e),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},nc=async(a,e,t)=>await Ut(t,e).Farms.depositPayload(a),oc=async(a,e,t)=>await Ut(t,e).Farms.withdrawPayload(a);var $n=class a extends S{constructor(t){super(t);this.data=t}txType=Hu.Other;txSubType="FarmingOpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Gs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Xu}from"@msafe/sui3-utils";var Hn=class a extends S{constructor(t){super(t);this.data=t}txType=Xu.Other;txSubType="FarmingBatchHarvest";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await ec(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as zu}from"@msafe/sui3-utils";var Xn=class a extends S{constructor(t){super(t);this.data=t}txType=zu.Other;txSubType="FarmingClaimFeeAndReward";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Zs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Gu}from"@msafe/sui3-utils";var zn=class a extends S{constructor(t){super(t);this.data=t}txType=Gu.Other;txSubType="FarmingDecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Js(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Qu}from"@msafe/sui3-utils";var Gn=class a extends S{constructor(t){super(t);this.data=t}txType=Qu.Other;txSubType="FarmingHarvest";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await tc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ju}from"@msafe/sui3-utils";var Qn=class a extends S{constructor(t){super(t);this.data=t}txType=Ju.Other;txSubType="FarmingIncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Qs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Yu}from"@msafe/sui3-utils";var Jn=class a extends S{constructor(t){super(t);this.data=t}txType=Yu.Other;txSubType="FarmingRemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Ys(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Zu}from"@msafe/sui3-utils";var Yn=class a extends S{constructor(t){super(t);this.data=t}txType=Zu.Other;txSubType="FarmingStake";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await nc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as tm}from"@msafe/sui3-utils";var Zn=class a extends S{constructor(t){super(t);this.data=t}txType=tm.Other;txSubType="FarmingUnstake";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await oc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as em}from"@msafe/sui3-utils";var to=class a extends S{constructor(t){super(t);this.data=t}txType=em.Other;txSubType="IncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await $s(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as sm}from"@msafe/sui3-utils";import{Transaction as eo}from"@mysten/sui/transactions";import nm,{vaults_mainnet as om}from"haedal-vault-sdk";var am=async(a,e,t)=>{let n=Ue(t,e),o=new eo;return o.setSender(e.address),n.Vest.buildRedeemPayload(a.params,o),o},im=async(a,e,t)=>{let n=new nm(om);n.senderAddress=e.address;let o=new eo;return o.setSender(e.address),await n?.Vest.buildRedeemPayload(a.params,o),o},ac=(a,e,t)=>{let n=Gt(t,e),o=new eo;return n?.Vest.buildRedeemPayload(a.params,o),o},rm=async(a,e,t)=>{let n=Gt(t,e),o=Ut(t,e),i=new eo,s=await o.Farms.withdrawReturnPayload(a.withdrawParams,i);return n.Vest.buildRedeemPayload(a.redeemParms.map(l=>({...l,clmm_position_id:s})),i),o.Farms.depositPayload({...a.depositParams,clmm_position_id:s},i),i},ic=async(a,e,t)=>a.type==="clmm"?ac(a,e,t):a.type==="farms"?rm(a,e,t):a.type==="vaults"?am(a,e,t):a.type==="haedalVaults"?im(a,e,t):ac(a,e,t);var no=class a extends S{constructor(t){super(t);this.data=t}txType=sm.Other;txSubType="PosVestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await ic(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as cm}from"@msafe/sui3-utils";var oo=class a extends S{constructor(t){super(t);this.data=t}txType=cm.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Hs(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as mm}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as lm}from"@cetusprotocol/aggregator-sdk";import{Transaction as um}from"@mysten/sui/transactions";var rc=async(a,e,t)=>{let n=Fs(t,e),o=new um;return await n.fastRouterSwap({...a,router:lm(a.router),txb:o}),o};var ao=class a extends S{constructor(t){super(t);this.data=t}txType=mm.Other;txSubType="AggregatorSwap";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await rc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as pm}from"@msafe/sui3-utils";import{Transaction as sc}from"@mysten/sui/transactions";var cc=async(a,e,t)=>{let n=Ue(t,e),o=new sc;return o.setSender(e.address),await n.Vaults.deposit(a,o),o},lc=async(a,e,t)=>{let n=Ue(t,e),o=new sc;return await n.Vaults.withdraw(a,o),o};var io=class a extends S{constructor(t){super(t);this.data=t}txType=pm.Other;txSubType="AddVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await cc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as dm}from"@msafe/sui3-utils";var ro=class a extends S{constructor(t){super(t);this.data=t}txType=dm.Other;txSubType="RemoveVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await lc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as hm}from"@msafe/sui3-utils";import{Transaction as fm}from"@mysten/sui/transactions";var uc={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},mc=async(a,e,t)=>{console.log("getVestingRedeemTxb txbParams: ",a),console.log("getVestingRedeemTxb account: ",e),console.log("getVestingRedeemTxb network: ",t);let{pool:n,nftId:o,periods:i,CLOCK_ADDRESS:s}=a,l=new fm;return i.forEach(d=>{l.moveCall({target:`${uc.published_at}::router::redeem`,typeArguments:[uc.cetus_coin_type],arguments:[l.object(n),l.object(o),l.pure(d),l.object(s)]})}),l};var so=class a extends S{constructor(t){super(t);this.data=t}txType=hm.Other;txSubType="VestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await mc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as gm}from"@msafe/sui3-utils";var pc=async(a,e,t)=>await Ie(t,e).XCetusModule.convertPayload(a),dc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemLockPayload(a),fc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemDividendV3Payload(a.veNftId,a.rewardList),hc=async(a,e,t)=>await Ie(t,e).XCetusModule.cancelRedeemPayload(a),gc=async(a,e,t)=>await Ie(t,e).XCetusModule.redeemPayload(a);var co=class a extends S{constructor(t){super(t);this.data=t}txType=gm.Other;txSubType="xCETUSCancelRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await hc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as ym}from"@msafe/sui3-utils";var lo=class a extends S{constructor(t){super(t);this.data=t}txType=ym.Other;txSubType="xCETUSClaimStakingRwewards";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await fc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as bm}from"@msafe/sui3-utils";var uo=class a extends S{constructor(t){super(t);this.data=t}txType=bm.Other;txSubType="xCETUSConvert";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await pc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Tm}from"@msafe/sui3-utils";var mo=class a extends S{constructor(t){super(t);this.data=t}txType=Tm.Other;txSubType="xCETUSRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await gc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Sm}from"@msafe/sui3-utils";var po=class a extends S{constructor(t){super(t);this.data=t}txType=Sm.Other;txSubType="xCETUSRedeemLock";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await dc(i,n,o)}static fromData(t){return new a(t)}};var fo=class{application="cetus";supportSDK="@mysten/sui";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{txbParams:t,action:n}=e;return{txType:Im.Other,txSubType:n,intentionData:{txbParams:{...t},action:n}}}async build(e){let{suiClient:t,account:n,network:o}=e,i;switch(e.txSubType){case"OpenAndAddLiquidity":i=qn.fromData(e.intentionData);break;case"IncreaseLiquidity":i=to.fromData(e.intentionData);break;case"DecreaseLiquidity":i=Vn.fromData(e.intentionData);break;case"RemoveLiquidity":i=oo.fromData(e.intentionData);break;case"ClaimFeeAndMining":i=Fn.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":i=$n.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":i=Qn.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":i=zn.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":i=Jn.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":i=Xn.fromData(e.intentionData);break;case"FarmingHarvest":i=Gn.fromData(e.intentionData);break;case"FarmingBatchHarvest":i=Hn.fromData(e.intentionData);break;case"FarmingStake":i=Yn.fromData(e.intentionData);break;case"FarmingUnstake":i=Zn.fromData(e.intentionData);break;case"xCETUSConvert":i=uo.fromData(e.intentionData);break;case"xCETUSRedeemLock":i=po.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":i=lo.fromData(e.intentionData);break;case"xCETUSCancelRedeem":i=co.fromData(e.intentionData);break;case"xCETUSRedeem":i=mo.fromData(e.intentionData);break;case"VestingRedeem":i=so.fromData(e.intentionData);break;case"AggregatorSwap":i=ao.fromData(e.intentionData);break;case"AddVaultsPosition":i=io.fromData(e.intentionData);break;case"RemoveVaultsPosition":i=ro.fromData(e.intentionData);break;case"PosVestingRedeem":i=no.fromData(e.intentionData);break;case"CreatePool":i=Kn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Tp}from"@msafe/sui3-utils";import wm from"sort-keys-recursive";var Nt=class{constructor(e){this.data=e}serialize(){return JSON.stringify(wm(this.data))}};import{getFullnodeUrl as ho}from"@mysten/sui.js/client";var xr={};ks(xr,{contractId:()=>Dm,default:()=>Om,feeObjId:()=>Am,roleObjId:()=>km,status:()=>xm,transaction:()=>Cm,upgradeCapObjId:()=>Mm,vaultObjId:()=>vm});var Cm="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",xm="success",Dm="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",km="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",vm="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Am="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Mm="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Om={transaction:Cm,status:xm,contractId:Dm,roleObjId:km,vaultObjId:vm,feeObjId:Am,upgradeCapObjId:Mm};var Dr={};ks(Dr,{contractId:()=>Bm,default:()=>Lm,feeObjId:()=>Nm,roleObjId:()=>Em,status:()=>Rm,transaction:()=>Pm,upgradeCapObjId:()=>_m,vaultObjId:()=>Wm});var Pm="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Rm="success",Bm="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Em="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Wm="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Nm="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",_m="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Lm={transaction:Pm,status:Rm,contractId:Bm,roleObjId:Em,vaultObjId:Wm,feeObjId:Nm,upgradeCapObjId:_m};var jm=ho("testnet"),Um=ho("testnet"),qm=ho("mainnet"),Fm=ho("mainnet"),Km="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",Vm="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",$m="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",Hm="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",yc=xr,bc=Dr,Xm=new Map([["dev",{env:"dev",rpc:{url:jm},backend:{url:Km},contract:yc}],["stg",{env:"stg",rpc:{url:Um},backend:{url:Vm},contract:yc}],["prev",{env:"prev",rpc:{url:qm},backend:{url:$m},contract:bc}],["prod",{env:"prod",rpc:{url:Fm},backend:{url:Hm},contract:bc}]]);function Tc(a,e){let t=Xm.get(a);if(!t)throw new Error(`Env not supported: ${a}`);return e&&e.rpc&&(t.rpc=e.rpc),e&&e.backend&&(t.backend=e.backend),e&&e.contract&&(t.contract=e.contract),t}import{SuiClient as Gm}from"@mysten/sui.js/client";var _=class extends Error{mpayErrorCode;context;constructor(e,t,n={}){let{cause:o,context:i}=n;o?super(`[MPay] ${t}: ${o}`):super(`[MPay] ${t}`),this.mpayErrorCode=e,this.context=i}};var go=class extends _{constructor(){super(11,"Backend is not specified")}};var yo=class extends _{constructor(){super(1,"Wallet not connected")}};import Ce,{AxiosError as zm}from"axios";var we=class extends _{constructor(e,t){super(10,e,{context:t})}};var bo=class a{constructor(e){this.apiURL=e}static parseResponseData(e){if(e instanceof zm)throw new we(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new we(e.data.code)}throw new we(e.status.toString())}async getIncomingStreams(e,t){let n=await Ce.post(`${this.apiURL}/stream`,{recipient:e,...t});return a.parseResponseData(n)}async getOutgoingStreams(e,t){let n=await Ce.post(`${this.apiURL}/stream`,{sender:e,...t});return a.parseResponseData(n)}async getStreamHistory(e){let t=await Ce.post(`${this.apiURL}/stream-events`,e),n=a.parseResponseData(t);return n.data.forEach(o=>{let i=o;return i.data.type==="create_stream"?i.data.balance=BigInt(i.data.balance):i.data.type==="cancel_stream"?i.data.withdrawAmount=BigInt(i.data.withdrawAmount):i.data.type==="claim"||i.data.type==="auto_claim"?i.data.claimAmount=BigInt(i.data.claimAmount):i.data.type==="set_auto_claim"&&(i.data.enabled=!!i.data.enabled),i.createdAt=new Date(i.createdAt),i}),n}async getAllCoinTypes(e){let t=await Ce.post(`${this.apiURL}/stream-info`,{address:e});return a.parseResponseData(t)}async getAllRecipients(e,t){let n=await Ce.post(`${this.apiURL}/stream-info`,{sender:e,status:t});return a.parseResponseData(n)}async getAllSenders(e,t){let n=await Ce.post(`${this.apiURL}/stream-info`,{recipient:e,status:t});return a.parseResponseData(n)}};var xe=class a{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new Gm({url:e.rpc.url}),e.backend&&(this._backend=new bo(e.backend.url))}static new(e,t){let n=Tc(e,t);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new go;return this._backend}set backend(e){this._backend=e}connectWallet(e){this.signer=e}disconnect(){this.signer=void 0}get wallet(){if(!this.signer)throw new yo;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as gp,normalizeStructTag as yp,normalizeSuiAddress as Kc}from"@mysten/sui.js/utils";import{TransactionBlock as xo}from"@mysten/sui.js/transactions";import{TransactionBlock as Ac}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as Mc,normalizeStructTag as Zm}from"@mysten/sui.js/utils";var kr=50n,To=10000n,Sc=25n,vr=100000000n;var Qt=class{constructor(e){this.object=e}moveArg(e){return e.object(this.object)}},qe=class{constructor(e){this.objects=e}moveArgs(e){return e.makeMoveVec({objects:this.objects.map(t=>e.object(t))})}},re=class a{constructor(e){this.result=e;return new Proxy(this,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(t,n){if(n in t)return Reflect.get(t,n);let o=s=>new a(t.result[s]);if(n===Symbol.iterator)return function*(){let s=0;for(;;)yield o(s),s++};if(typeof n=="symbol")return;let i=parseInt(n,10);if(!(Number.isNaN(i)||i<0))return o(i)}})}moveArg(){return this.result}};import{Buffer as Ic}from"buffer";import{normalizeSuiAddress as Qm}from"@mysten/sui.js/utils";var Fe=class extends _{constructor(e,t){super(3,e,{context:t})}};var So=class{constructor(e){this.results=e}callResult(e){return this.results.results[e]}returnValue(e,t){return e.returnValues[t]}getValue(e=0,t=0){let n=this.callResult(e);return this.returnValue(n,t)}getAddress(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="address")throw new Fe("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return Qm(Ic.from(n).toString("hex"))}getU64(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="u64")throw new Fe("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return Ic.from(n).readBigInt64LE()}};import{bcs as Cc}from"@mysten/sui.js/bcs";var $=class extends _{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var xc={groupId:"string",name:"string"},Jm=64;function Dc(a){return kc(a),Cc.ser(xc,a).toString("base64")}function Ke(a){let e=Cc.de(xc,a,"base64");return kc(e),e}function kc(a){if(!wc(a.name))throw new $("Invalid metadata: Name contains unknown character");if(!wc(a.groupId))throw new $("Invalid metadata: Group ID contains unknown character");if(a.name.length>Jm)throw new $("Invalid metadata: Name exceed max length 64")}function wc(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as Io}from"@mysten/sui.js/utils";function wo(a,e){return Io(a)===Io(e)}function se(a,e){return Io(a)===Io(e)}var Co="txn.gas";import{nanoid as Ym}from"nanoid";function vc(){return Ym()}var he=class a{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}static convertCreateStreamInfoToInternal(e){return{metadata:Dc({name:e.name,groupId:vc()}),coinType:Zm(e.coinType),recipients:e.recipients.map(t=>({address:t.address,cliffAmount:t.cliffAmount,amountPerEpoch:t.amountPerStep})),epochInterval:e.interval,numberEpoch:e.steps,startTime:e.startTimeMs,cancelable:e.cancelable}}async buildCreateStreamTransactionBlock(e){let t=new Ac,n=this.calculateFeesInternal(e),o=this.getCreateStreamCoinRequests(e,n),i=await this.wallet.requestCoins(o),s=await this.addMergeCoins(t,i[0]),l;o.length>1?l=await this.addMergeCoins(t,i[1]):l=s;for(let d=0;d<e.recipients.length;d++){let b=e.recipients[d],I=this.amountForRecipient(b,e.numberEpoch),C=this.getStreamFeeLocal(I),[x]=t.splitCoins(s,[t.pure(I+C,"u64")]),[D]=t.splitCoins(l,[t.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(t,{paymentCoin:new re(x),flatFeeCoin:new re(D),metadata:e.metadata,recipient:b.address,timeStart:e.startTime,cliff:b.cliffAmount,epochInterval:e.epochInterval,numEpoch:e.numberEpoch,amountPerEpoch:b.amountPerEpoch,cancelable:e.cancelable,coinType:e.coinType})}return t}calculateCreateStreamFees(e){let t=a.convertCreateStreamInfoToInternal(e);return this.calculateFeesInternal(t)}feeParams(){return{createFeePercent:{numerator:kr,denominator:To},claimFeePercent:{numerator:Sc,denominator:To},flatFeePerStream:vr}}async addMergeCoins(e,t){let n;return t.mergedCoins&&t.mergedCoins.length?(e.mergeCoins(e.object(t.primaryCoin),t.mergedCoins.map(o=>e.object(o))),n=e.object(t.primaryCoin)):t.primaryCoin===Co?n=e.gas:n=e.object(t.primaryCoin),n}getCreateStreamCoinRequests(e,t){let n=e.coinType;return wo(n,Mc)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:Mc,amount:t.flatFeeAmount}]}calculateFeesInternal(e){let t=e.recipients.reduce((o,i)=>{let s=this.amountForRecipient(i,e.numberEpoch),l=this.getStreamFeeLocal(s);return{totalAmount:o.totalAmount+s,streamFeeAmount:o.streamFeeAmount+l}},{totalAmount:0n,streamFeeAmount:0n});return{flatFeeAmount:BigInt(e.recipients.length)*this.flatSuiFee,...t}}amountForRecipient(e,t){return BigInt(e.amountPerEpoch)*BigInt(t)+BigInt(e.cliffAmount)}get flatSuiFee(){return vr}getStreamFeeLocal(e){return e*kr/To}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new Ac,e),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:t});return new So(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Pc}from"@mysten/sui.js/transactions";var Oc="0x0000000000000000000000000000000000000000000000000000000000000006";var De=class{constructor(e,t,n){this.moduleName=e;this.config=t;this.globals=n}addContractCall(e,t){let n=`${this.config.contractId}::${this.moduleName}::${t.method}`;return e.add(Pc.MoveCall({target:n,arguments:t.arguments.map(o=>o instanceof qe?o.moveArgs(e):o instanceof Qt?o.moveArg(e):o instanceof re?o.moveArg():e.pure(o)),typeArguments:t.typeArgs})),e}addTransactionBlock(e,t,n=[],o=[]){e.add(Pc.MoveCall({target:t,arguments:n.map(i=>i instanceof qe?i.moveArgs(e):i instanceof Qt?i.moveArg(e):i instanceof re?i.moveArg():e.pure(i)),typeArguments:o}))}makeObject(e){return typeof e=="string"?new Qt(e):e}vaultObject(){return new Qt(this.config.vaultObjId)}roleObject(){return new Qt(this.config.roleObjId)}feeObject(){return new Qt(this.config.feeObjId)}clockObject(){return new Qt(Oc)}};var ke=class a extends De{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_fee,arguments:[o,i,n],typeArgs:[]})}setStreamingFlatFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_streaming_flat_fee,arguments:[o,i,n],typeArgs:[]})}setClaimFee(t,n){let o=this.roleObject(),i=this.feeObject();return this.addContractCall(t,{method:a.MethodName.set_claim_fee,arguments:[o,i,n],typeArgs:[]})}streamingFee(t,n){let o=this.feeObject();return this.addContractCall(t,{method:a.MethodName.streaming_fee,arguments:[o,n],typeArgs:[]})}claimFee(t,n){return this.addContractCall(t,{method:a.MethodName.claim_fee,arguments:[this.feeObject(),n],typeArgs:[]})}feeDenominator(t){return this.addContractCall(t,{method:a.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var Jt=class a extends De{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}static ModuleName="stream";static MethodName={create_stream:"create_stream",set_auto_claim:"set_auto_claim",cancel_stream:"cancel_stream",claim_stream:"claim_stream",claim_stream_by_proxy:"claim_stream_by_proxy",stream_current_epoch:"stream_current_epoch",now_milli_seconds:"now_milli_seconds"};createStream(t,n){let o=this.feeObject(),i=this.vaultObject(),s=this.makeObject(n.paymentCoin),l=this.makeObject(n.flatFeeCoin),d=this.clockObject();return this.addContractCall(t,{method:a.MethodName.create_stream,arguments:[o,i,s,l,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,d],typeArgs:[n.coinType]})}setAutoClaim(t,n){let o=this.makeObject(n.streamId);return this.addContractCall(t,{method:a.MethodName.set_auto_claim,arguments:[o,n.enabled],typeArgs:[n.coinType]})}cancelStream(t,n){let o=this.makeObject(n.streamId),i=this.clockObject();return this.addContractCall(t,{method:a.MethodName.cancel_stream,arguments:[o,i],typeArgs:[n.coinType]})}claimStream(t,n){let o=this.makeObject(n.streamId),i=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream,arguments:[o,i],typeArgs:[n.coinType]})}claimStreamByProxy(t,n){let o=this.makeObject(n.streamId),i=this.vaultObject(),s=this.feeObject(),l=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream_by_proxy,arguments:[o,i,s,l],typeArgs:[n.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream_by_proxy}`}};var ve=class{constructor(e){this.globals=e;let t=e.envConfig.contract;this.feeContract=new ke(t,e),this.streamContract=new Jt(t,e)}feeContract;streamContract;async createStreams(e){let t=he.convertCreateStreamInfoToInternal(e);return this.createStreamHelper().buildCreateStreamTransactionBlock(t)}createStreamHelper(){return new he(this.globals,this.feeContract,this.streamContract)}setAutoClaim(e,t,n){let o=new xo;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new xo;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new xo;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new xo;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as Ar,SUI_TYPE_ARG as tp}from"@mysten/sui.js/utils";import{Duration as Rc}from"luxon";var Do=class extends _{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var ep=1e3,ko=class{constructor(e){this.globals=e;this.coinMetaHelper=new Mr(e.suiClient),this.createStreamHelper=new ve(e).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new Do(e.effects?.status.status,e.effects?.status.error);return e.objectChanges.filter(t=>t.type==="created"&&t.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(t=>t.objectId)}calculateCreateStreamFees(e){return this.createStreamHelper.calculateCreateStreamFees(e)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(e){if(e.steps===0n)throw new $("Invalid stream steps: 0");let t=e.cliff?e.cliff:{numerator:0n,denominator:100n},n=e.totalAmount*t.numerator/t.denominator,o=(e.totalAmount-n)/e.steps,s={realTotalAmount:o*e.steps+n,cliffAmount:n,amountPerStep:o};return this.validateStreamAmount(s,e.totalAmount),s}calculateTimelineByInterval(e){if(e.steps===0n)throw new $("Invalid stream steps: 0");let t=e.timeStart.plus(e.interval.toMillis()*Number(e.steps)),n={timeStart:e.timeStart,timeEnd:t,interval:e.interval,steps:e.steps};return this.validateTimeline(n),n}calculateTimelineByTotalDuration(e){if(e.steps===0n)throw new $("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus(Rc.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:Rc.fromMillis(Number(t)),steps:e.steps};return this.validateTimeline(o),o}async getBalance(e,t){let n=await this.globals.suiClient.getBalance({owner:e,coinType:t}),o=await this.getCoinMeta(t);return{...n,coinType:Ar(n.coinType),coinMeta:o}}async getAllBalance(e){let t=await this.globals.suiClient.getAllBalances({owner:e}),n=await Promise.all(t.map(o=>this.getCoinMeta(o.coinType)));return t.map((o,i)=>({...o,coinType:Ar(o.coinType),coinMeta:n[i]}))}async getCoinMeta(e){return this.coinMetaHelper.getCoinMeta(e)}async simulateTransactionBlock(e){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:e,sender:await this.globals.wallet.address()})}validateStreamAmount(e,t){if(e.amountPerStep===0n)throw new $("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new $("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<ep)throw new $("Interval shall be at least 1 second","interval",e.interval)}},Mr=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(e){let t=Ar(e||tp);if(this.coinMetaReg.has(t))return this.coinMetaReg.get(t);let n=await this.queryCoinMeta(t);return n&&this.coinMetaReg.set(t,n),n}async queryCoinMeta(e){return await this.suiClient.getCoinMetadata({coinType:e})||void 0}};import{normalizeStructTag as Wc,normalizeSuiAddress as Ro}from"@mysten/sui.js/utils";import{DateTime as Nc}from"luxon";import{TransactionBlock as Oo}from"@mysten/sui.js/transactions";import{normalizeStructTag as Ec,parseStructTag as ap}from"@mysten/sui.js/utils";import{DateTime as ip}from"luxon";var vo=class extends _{constructor(){super(7,"Connected wallet is not creator")}};var Ve=class extends _{constructor(){super(8,"Connected wallet is not recipient")}};var $e=class extends _{constructor(e,t){super(6,e,{context:t})}};var vt=class extends _{constructor(e,t={}){super(0,e,t)}};var Ao=class extends _{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as np,Duration as op}from"luxon";var Bc=(1n<<64n)-1n,Mo=1e3;function Or(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Mo);return np.fromMillis(t*Mo)}function Pr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Mo);return op.fromMillis(t*Mo)}var ce=class a{constructor(e,t,n){this.globals=e;this.streamId=t;this.rawData=n;this.streamContract=new Jt(e.envConfig.contract,e)}streamContract;type="Stream";static async new(e,t){let n=await a.fetchStreamData(e,t);return new a(e,t,n)}static fromObjectData(e,t,n){let o=a.parseRawStreamData(t,n);return new a(e,t,o)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await a.fetchStreamData(this.globals,this.streamId)}refreshWithData(e){if(e.data?.objectId!==this.streamId)throw new vt("Object Id does not align");this.rawData=a.parseRawStreamData(this.streamId,e)}async historyEvents(e){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:e})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new vo;let e=new Oo;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Ve;let e=new Oo;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new Ve;let t=new Oo;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new Oo;return this.streamContract.claimStreamByProxy(e,{streamId:this.streamId,coinType:this.coinType}),e}get wallet(){return this.globals.wallet}get client(){return this.globals.suiClient}get coinType(){return Ec(this.rawData.coinType)}get progress(){return{status:this.streamStatus,total:this.totalAmount,streamed:this.streamedAmount,claimed:this.claimedAmount,claimable:this.claimable,canceled:this.canceledAmount}}get balance(){return this.rawData.balance}get autoClaim(){return this.rawData.autoClaim}get amountPerEpoch(){return this.rawData.config.amountPerEpoch}get cancelable(){return this.rawData.config.cancelable}get cliff(){return this.rawData.config.cliff}get creator(){return this.rawData.config.creator}get interval(){return Pr(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return Ke(e).groupId}get name(){let{metadata:e}=this.rawData.config;return Ke(e).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return Or(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,t=e.epochInterval*e.totalEpoch;return Pr(t)}get timeEnd(){return this.timeStart.plus(this.duration)}get totalSteps(){return this.rawData.config.totalEpoch}get claimable(){return this.streamedAmount-this.claimedAmount}get nextReleaseDate(){return this.currentEpoch===-1n?this.timeStart:this.currentEpoch>=this.totalSteps||this.isCanceled?null:Or((this.currentEpoch+1n)*this.rawData.config.epochInterval+this.rawData.config.timeStart)}get nextReleaseAmount(){return this.currentEpoch===-1n?this.cliff:this.currentEpoch>=this.totalSteps||this.isCanceled?null:this.amountPerEpoch}get streamStatus(){let e=this.rawData.status.status;return e===16?"CANCELED":e===17?"SETTLED":e===1?"COMPLETED":this.currentEpoch>=this.totalSteps?"STREAMED":"STREAMING"}get streamedAmount(){return this.currentEpoch===-1n?0n:this.isCanceled?this.rawData.status.epochCanceled*this.amountPerEpoch+this.cliff:this.currentEpoch*this.amountPerEpoch+this.cliff}get claimedAmount(){return this.rawData.status.epochClaimed===Bc?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=ip.now().toMillis(),t=this.timeStart.toMillis();if(e<t)return-1n;let n=Math.floor((e-t)/Number(this.rawData.config.epochInterval));return BigInt(n)>Number(this.rawData.config.totalEpoch)?this.rawData.config.totalEpoch:BigInt(n)}get totalAmount(){let e=this.rawData.config;return e.amountPerEpoch*e.totalEpoch+e.cliff}get isCanceled(){let e=this.rawData.status.status;return e===16||e===17}get canceledAmount(){return this.isCanceled?this.totalAmount-this.streamedAmount:0n}static async fetchStreamData(e,t){let n=await e.suiClient.getObject({id:t,options:{showContent:!0,showType:!0}});return a.parseRawStreamData(t,n)}static parseRawStreamData(e,t){if(t.error)throw t.error.code==="notExists"?new Ao(e):new $e(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data.content;if(n.dataType!=="moveObject")throw new $e("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=ap(n.type),i=Ec(o[0]),s=n.fields,l=s.config.fields,d=s.status.fields;return{coinType:i,autoClaim:s.auto_claim,balance:BigInt(s.balance.fields.balance),config:{amountPerEpoch:BigInt(l.amount_per_epoch),cancelable:l.cancelable,cliff:BigInt(l.cliff),creator:l.creator,epochInterval:BigInt(l.epoch_interval),metadata:l.metadata,recipient:l.recipient,timeStart:BigInt(l.time_start),totalEpoch:BigInt(l.total_epoch)},status:{status:d.status,epochCanceled:BigInt(d.epoch_canceled),epochClaimed:BigInt(d.epoch_claimed)}}}};var Ae=class extends _{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function Br(a){let e=[];for(;await a.hasNext();){let t=await a.next();e.push(t)}return e&&Array.isArray(e[0])?e.flat(1):e}var Rr=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},Me=class{constructor(e){this.requester=e;this.pager=new Rr(e),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}};var rp=25;async function Wr(a,e,t){let n=new He(e),o=new Xe(a,n,t);return await Br(o)}var He=class{constructor(e){this.ids=e;this.cursor=-1}cursor;async hasNext(){return this.cursor<this.ids.length-1}async next(){if(this.cursor+=1,this.cursor>=this.ids.length)throw new Error("invalid iterator implementation");return this.ids[this.cursor]}},Xe=class extends Me{constructor(t,n,o){super(new Er(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}},Er=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||rp,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}filter;pageSize;objectOptions;async doNextRequest(){let e=[];for(;e.length<this.pageSize&&await this.stringIter.hasNext();){let i=await this.stringIter.next();i&&e.push(i)}let t=await this.suiClient.multiGetObjects({ids:e,options:this.objectOptions}),n;if(this.filter){let{filter:o}=this;n=t.filter(i=>o?.(i))}else n=t;return{data:n,hasNext:await this.stringIter.hasNext()}}};var Po=class a{constructor(e,t){this.globals=e;this.streams=t;if(t.length===0)throw new Ae("stream size 0");let n=t.map(i=>i.groupId);if(new Set(n).size!==1)throw new $("Stream does not have same group ID")}type="StreamGroup";static async new(e,t){let n=await Wr(e.suiClient,t);return n.forEach(o=>{if(!o)throw new vt("stream group object data undefined")}),a.newFromObjectResponse(e,t,n)}static async newFromObjectResponse(e,t,n){let o=await a.parseGroupStreams(e,t,n);return new a(e,o)}static checkStreamGroup(e){let t=e.map(i=>i.groupCommonInfo),n=t[0],o=!0;return t.forEach(i=>{sp(n,i)||(o=!1)}),o}async refresh(){let e=await Wr(this.globals.suiClient,this.streams.map(t=>t.streamId));this.streams.forEach((t,n)=>{t.refreshWithData(e[n])})}get groupId(){return this.streams[0].groupId}get creator(){return this.streams[0].creator}get info(){return{groupId:this.groupId,streamIds:this.streams.map(e=>e.streamId),progress:this.progress,name:this.streams[0].name,creator:this.creator,coinType:this.streams[0].coinType,totalAmount:this.streams.reduce((e,t)=>e+t.totalAmount,0n),start:this.streams[0].timeStart,end:this.streams[0].timeEnd,cancelable:this.streams[0].cancelable,cliffAmount:this.streams.reduce((e,t)=>e+t.cliff,0n),duration:this.streams[0].duration,interval:this.streams[0].interval,steps:this.streams[0].totalSteps,nextReleaseAmount:this.streams.reduce((e,t)=>t.nextReleaseAmount===null?e:e+t.nextReleaseAmount,0n),nextReleaseDate:this.streams[0].nextReleaseDate}}get progress(){return{total:this.streams.reduce((e,t)=>e+t.totalAmount,0n),streamed:this.streams.reduce((e,t)=>e+t.streamedAmount,0n),claimed:this.streams.reduce((e,t)=>e+t.claimedAmount,0n),claimable:this.streams.reduce((e,t)=>e+t.claimable,0n),canceled:this.streams.reduce((e,t)=>e+t.canceledAmount,0n)}}async historyEvents(e){return this.globals.backend.getStreamHistory({groupId:this.groupId,pagination:e})}static async parseGroupStreams(e,t,n){let o=n.map((i,s)=>ce.fromObjectData(e,t[s],i)).filter(i=>!!i);if(new Set(o.map(i=>i.groupId)).size!==1)throw new Ae("Not same group ID");if(!this.checkStreamGroup(o))throw new Ae("Not same stream settings");return o}};function sp(a,e){return a.name===e.name&&a.groupId===e.groupId&&a.creator===e.creator&&a.start.toMillis()===e.start.toMillis()&&a.interval.toMillis()===e.interval.toMillis()&&a.steps===e.steps&&a.cancelable===e.cancelable}var ze=class a{constructor(e,t){this.it=e;this.pageSize=t}static async newIncoming(e){let t=await Bo.newIncoming(e);return new a(t,e.pageSize)}static async newOutgoing(e){let t=await Bo.newOutgoing(e);return new a(t,e.pageSize)}async hasNext(){return this.it.hasNext()}async next(){let e=[];for(;e.length<this.pageSize&&await this.it.hasNext();)e.push(await this.it.next());return e}},Bo=class a{constructor(e){this.requester=e}cachedNext;static async newIncoming(e){let t=await Eo.newIncomingQuery(e);return new a(t)}static async newOutgoing(e){let t=await Eo.newOutgoingQuery(e);return new a(t)}async hasNext(){return this.cachedNext===void 0&&(this.cachedNext=await this.requester.doNextRequest()),this.cachedNext!==null}async next(){if(this.cachedNext===void 0){let t=await this.requester.doNextRequest();if(t===null)throw new vt("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new vt("No more results");return e}},Eo=class a{constructor(e,t,n,o){this.globals=e;this.recipient=t;this.groupRefs=n;this.query=o;this.current=0;let i=new He(n.flat().map(s=>s.streamId));this.objectIter=new Xe(e.suiClient,i)}current=0;objectIter;static async newIncomingQuery(e){let t=pp(e.query),n=await e.globals.walletAddress(),i=(await e.globals.backend.getIncomingStreams(n,t)).filter(l=>Ro(l.recipient)===Ro(n)),s=_c(i);return new a(e.globals,n,s,e.query)}static async newOutgoingQuery(e){let t=dp(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),i=_c(o);return new a(e.globals,n,i,e.query)}async doNextRequest(){if(this.current>=this.groupRefs.length)return null;let e=this.groupRefs[this.current];if(e.length===1){let t=await up(this.globals,e[0].streamId,this.objectIter);return this.current++,Lc(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await mp(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,lp(t,this.query)?t:this.doNextRequest()}throw new vt("Stream group with no stream")}};function _c(a){let e=new Map;return a.forEach(t=>{let n=e.get(t.groupId);n?(n.push(t),e.set(t.groupId,n)):e.set(t.groupId,[t])}),Array.from(e.values()).sort((t,n)=>Nc.fromISO(n[0].createDate).toMillis()-Nc.fromISO(t[0].createDate).toMillis())}function Lc(a,e){if(e===void 0)return!0;let t=cp(a,e.status);if(e&&"claimable"in e&&e.claimable!==void 0){let n=e.claimable?a.progress.claimable!==0n:a.progress.claimable===0n;return t&&n}return t}function cp(a,e){return e===void 0?!0:Array.isArray(e)?e.includes(a.progress.status):a.progress.status===e}function lp(a,e){if(!e)return!0;let t=!1;return a.streams.forEach(n=>{Lc(n,e)&&(t=!0)}),t}async function up(a,e,t){let n=await jc(t,e);return ce.fromObjectData(a,e,n)}async function mp(a,e,t){let n=[];for(;n.length<e.length;){let o=await jc(t,e[n.length]);n.push(o)}return Po.newFromObjectResponse(a,e,n)}async function jc(a,e){if(!await a.hasNext())throw new vt("object iterator has been consumed");let t=await a.next();if(!t||t.error||t.data===void 0||t.data===null)throw new vt("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new vt("stream id not aligned");return t}function pp(a){return{status:Nr(a?.status),coinType:Uc(a?.coinType),sender:qc(a?.sender)}}function dp(a){return{status:Nr(a?.status),coinType:Uc(a?.coinType),recipient:qc(a?.recipient)}}function Nr(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((e,t)=>{let n=Nr(t);return!e||e===n?n:"all"},void 0):fp(a)}function fp(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new $("Unknown stream filtered status")}}function Uc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Wc(e)):void 0:Wc(a)}function qc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Ro(e)):void 0:Ro(a)}var Wo=class extends _{constructor(t,n,o){super(4,`Not enough balance: ${t}`,{context:{coinType:t,requestAmount:n,gotAmount:o}});this.coinType=t;this.requestAmount=n;this.gotAmount=o}};var hp=25;async function Fc(a,e,t,n="0x2::sui::SUI",o=hp){let i=new _r(a,e,n,o),s=BigInt(0),l=[];for(;await i.hasNext()&&s<t;){let d=await i.next();d&&(l.push(d),s+=BigInt(d.balance))}if(s<t)throw new Wo(n,t,s);return l}var _r=class extends Me{constructor(t,n,o,i){super(new Lr(t,n,o,i));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=i}},Lr=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new vt("Invalid reqPageSize")}nextCursor;async doNextRequest(){let e=await this.suiClient.getCoins({owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=e.nextCursor,{data:e.data,hasNext:e.hasNextPage}}};var jr=class{constructor(e){this.msafe=e}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},No=class{constructor(e){this.account=e}async address(){return this.account.address}},Ur=class{constructor(e,t){this.singleWallet=e;this.suiClient=t}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(e){return Promise.all(e.map(t=>this.requestCoin(t)))}async requestCoin(e){if(wo(e.coinType,gp))return{primaryCoin:Co};if(e.amount<=0)throw new $("Invalid coin request","coinAmount",e.amount);let t=await Fc(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new vt("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(n=>n.coinObjectId)}}},_o=class{globals;helper;constructor(e,t){this.globals=xe.new(e,t),this.helper=new ko(this.globals)}connectSingleWallet(e){let t=new Ur(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new jr(e);this.globals.connectWallet(t)}async createStream(e){return this.builder().createStreams(e)}async getStream(e){return ce.new(this.globals,e)}async getIncomingStreams(e,t=10){return ze.newIncoming({globals:this.globals,query:e,pageSize:t})}async getOutgoingStreams(e,t=10){return ze.newOutgoing({globals:this.globals,query:e,pageSize:t})}async getCoinTypesForStreamFilter(){let e=await this.wallet.address();return(await this.globals.backend.getAllCoinTypes(e)).map(n=>yp(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>Kc(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>Kc(o))}get wallet(){return this.globals.wallet}builder(){return new ve(this.globals)}};var Ft=class extends Nt{application="mpay";getClient(e,t){let n=new _o(e==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new No(t)),n}};var Ge=class extends Ft{constructor(t){super(t);this.data=t}txType=Tp.Stream;txSubType="Cancel";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).cancel()}};import{TransactionType as Sp}from"@msafe/sui3-utils";var Qe=class extends Ft{constructor(t){super(t);this.data=t}txType=Sp.Stream;txSubType="ClaimByProxy";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claimByProxy()}};import{TransactionType as Ip}from"@msafe/sui3-utils";var Je=class extends Ft{constructor(t){super(t);this.data=t}txType=Ip.Stream;txSubType="Claim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).claim()}};import{TransactionType as wp}from"@msafe/sui3-utils";var Ye=class extends Ft{constructor(t){super(t);this.data=t}txType=wp.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o}=t;return this.getClient(n,o).createStream(this.data)}};import{bcs as Vc}from"@mysten/sui.js/bcs";import{normalizeStructTag as Cp,normalizeSuiAddress as Ze}from"@mysten/sui.js/utils";var Oe=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return BigInt(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return Ze(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Vc.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return Ze(e.value.Object.ImmOrOwned.objectId)}return Ze(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Ze(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Ze(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Vc.de(t,new Uint8Array(n))}typeArg(e){return Cp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};var Lo=class{constructor(e,t){this.globals=e;this.txb=t}decode(){let e=this.decodeCreateStreamInfo(),t=this.createStreamHelper().calculateCreateStreamFees(e);return{type:"CreateStream",info:e,fees:t}}decodeCreateStreamInfo(){let t=this.createStreamTransactions().map(n=>this.getCreationInfoFromMoveCall(n));return this.aggregateGroupStreamInfo(t)}createStreamTransactions(){let e=this.transactions.filter(t=>t.kind==="MoveCall"&&se(t.target,this.contract.createStreamTarget));if(e.length===0)throw new vt("No create stream transactions");return e.map(t=>new Oe(t,this.txb))}getCreationInfoFromMoveCall(e){let t=e.decodeInputString(4),{name:n,groupId:o}=Ke(t),i=e.decodeInputAddress(5),s=e.decodeInputU64(6),l=e.decodeInputU64(7),d=e.decodeInputU64(8),b=e.decodeInputU64(9),I=e.decodeInputU64(10),C=e.decodeInputBool(11),x=e.typeArg(0);return{name:n,groupId:o,recipient:i,timeStart:s,cliff:l,epochInterval:d,totalEpoch:b,amountPerEpoch:I,cancelable:C,coinType:x}}aggregateGroupStreamInfo(e){if(new Set(e.map(o=>JSON.stringify({name:o.name,groupId:o.groupId,timeStart:String(o.timeStart),epochInterval:String(o.epochInterval),totalEpoch:String(o.totalEpoch),cancelable:o.cancelable,coinType:o.coinType}))).size!==1)throw new $("Stream group not have common info");let n=e.map(o=>({address:o.recipient,amountPerStep:o.amountPerEpoch,cliffAmount:o.cliff}));return{name:e[0].name,coinType:e[0].coinType,recipients:n,interval:e[0].epochInterval,steps:e[0].totalEpoch,startTimeMs:e[0].timeStart,cancelable:e[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(e=>e.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new Jt(this.globals.envConfig.contract,this.globals)}get feeContract(){return new ke(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new he(this.globals,this.feeContract,this.contract)}getInputArg(e){if(e.kind!=="Input")throw new Error("not input type");return"value"in e?e:this.txb.blockData.inputs[e.index]}};var jo=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new Jt(e.envConfig.contract,e)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(t=>t.kind==="MoveCall"&&se(t.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&se(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new Lo(this.globals,this.txb).decode()}decodeSetAutoClaimTransaction(){let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeInputBool(1);return{type:"SetAutoClaim",streamId:e,enabled:t}}decodeClaimTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Claim",streamId:e}}decodeClaimByProxyTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"ClaimByProxy",streamId:e}}decodeCancelStreamTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Cancel",streamId:e}}get helper(){let e=this.transactions[0];return new Oe(e,this.txb)}};import{TransactionType as xp}from"@msafe/sui3-utils";var tn=class extends Ft{constructor(t){super(t);this.data=t}txType=xp.Stream;txSubType="SetAutoClaim";async build(t){let{network:n,account:o}=t;return(await this.getClient(n,o).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}};var Uo=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(e){let{network:t,transactionBlock:n}=e,o=xe.new(t==="sui:mainnet"?"prod":"dev"),s=new jo(o,n).decode(),l;switch(s.type){case"CreateStream":l=new Ye(s.info);break;case"SetAutoClaim":l=new tn({streamId:s.streamId,enabled:s.enabled});break;case"Claim":l=new Je({streamId:s.streamId});break;case"ClaimByProxy":l=new Qe({streamId:s.streamId});break;case"Cancel":l=new Ge({streamId:s.streamId});break;default:throw new Error(`Unknown transaction type: ${s}`)}return{txType:l.txType,txSubType:l.txSubType,intentionData:l.data}}async build(e){let{intentionData:t}=e,n;switch(e.txSubType){case"CreateStream":n=new Ye(t);break;case"Claim":n=new Je(t);break;case"ClaimByProxy":n=new Qe(t);break;case"SetAutoClaim":n=new tn(t);break;case"Cancel":n=new Ge(t);break;default:throw new Error("not implemented")}return n.build({...e})}};import{TransactionDefaultApplication as vp,TransactionSubTypes as $c}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Dp}from"@msafe/sui3-utils";var qo=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return Dp(n,this.data,o.address)}static fromData(t){return new a(t)}};import{buildObjectTransferTxb as kp}from"@msafe/sui3-utils";var Fo=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t;return kp(n,this.data,o.address)}static fromData(t){return new a(t)}};var Ko=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=vp}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case $c.assets.coin.send:o=qo.fromData(e.intentionData);break;case $c.assets.object.send:o=Fo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as Up}from"@msafe/sui3-utils";var Hc=!1,en={ProtocolPackage:"0xee0041239b89564ce870a7dec5ddc5d114367ab94a1137e90aa0633cb76518e0",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},wusdc:{name:"wUSDC",assetId:1,coinType:"wusdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"},wbtc:{name:"WBTC",coinType:"wbtc",assetId:8,poolId:"0xd162cbe40f8829ce71c9b3d3bf3a83859689a79fa220b23d70dc0300b777ae6e",type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",reserveObjectId:"0x8b4d81f004e4e9faf4540951a896b6d96e42598a270e6375f598b99742db767e",borrowBalanceParentId:"0x55e1f3c9e6e5cf9fff563bdd61db07a3826458c56ef72c455e049ab3b1b0e99c",supplyBalanceParentId:"0x821e505a0091b089edba94deaa14c2f2230d026bbaa7b85680554441aad447e0"},ausd:{name:"AUSD",coinType:"ausd",assetId:9,poolId:"0xc9208c1e75f990b2c814fa3a45f1bf0e85bb78404cfdb2ae6bb97de58bb30932",type:"0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",reserveObjectId:"0x918889c6a9d9b93108531d4d59a4ebb9cc4d41689798ffc1d4aed6e1ae816ec0",borrowBalanceParentId:"0x551300b9441c9a3a16ca1d7972c1dbb4715e15004ccd5f001b2c2eee22fd92c1",supplyBalanceParentId:"0xe151af690355de8be1c0281fbd0d483c099ea51920a57c4bf8c9666fd36808fd"},nusdc:{name:"USDC",assetId:10,coinType:"nusdc",poolId:"0xa3582097b4c57630046c0c49a88bfc6b202a3ec0a9db5597c31765f7563755a8",type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",reserveObjectId:"0x4c8a2c72a22ae8da803a8519798d312c86e74a9e0d6ec0eec2bfcf7e4b3fef5e",borrowBalanceParentId:"0xb0b0c7470e96cabbb4f1e8d06bef2fbea65f4dbac52afae8635d9286b1ea9a09",supplyBalanceParentId:"0x08b5ce8574ac3bc9327e66ad5decd34d07ee798f724ad01058e8855ac9acb605"},eth:{name:"ETH",assetId:11,coinType:"eth",poolId:"0x78ba01c21d8301be15690d3c30dc9f111871e38cfb0b2dd4b70cc6052fba41bb",type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",reserveObjectId:"0x376faea6dfbffab9ea808474cb751d91222b6d664f38c0f1d23de442a8edb1ce",borrowBalanceParentId:"0xf0c6ce5cfaee96073876a5fab7426043f3a798b79502c4caeb6d9772cd35af1f",supplyBalanceParentId:"0xc0a0cb43620eb8a84d5a4a50a85650e7fa7ba81e660f9cc2863404fd84591d4b"},usdy:{name:"USDY",assetId:12,coinType:"usdy",poolId:"0x4b6253a9f8cf7f5d31e6d04aed4046b9e325a1681d34e0eff11a8441525d4563",type:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",reserveObjectId:"",borrowBalanceParentId:"",supplyBalanceParentId:""}},borrowFee:.003,borrowFeeAddress:"0x70b9b10704263cf53392849e33b1f5fd16005869b4198ed5524836bad1234ea2"};async function qr(){if(!Hc)try{let a=await fetch("https://open-api.naviprotocol.io/api/msafe").then(i=>i.json()),{packageId:e,borrowFee:t,borrowFeeAddress:n,pool:o}=a;e&&(en.ProtocolPackage=e),t&&(en.borrowFee=t),n&&(en.borrowFeeAddress=n),o&&(en.pool=o),Hc=!0}catch(a){console.error(a.message)}}var $t=en;import{TransactionType as ye}from"@msafe/sui3-utils";import{normalizeStructTag as Mp,normalizeSuiAddress as nn}from"@mysten/sui/utils";import{bcs as Xc}from"@mysten/sui.js/bcs";var Vo=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.isEntryMultiDepositTransaction())return this.decodeEntryMultiDeposit();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();if(this.isEntryClaimAndDepositTransaction())return this.decodeEntryClaimAndDeposit();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isClaimRewardTransaction(){return!!this.transactions.find(t=>!!(t.kind==="MoveCall"&&t.target.includes("claim_reward")))}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::entry_borrow_v2`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::borrow_v2`)}isEntryMultiDepositTransaction(){let e=`${$t.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))?!1:t.length>1}isEntryClaimAndDepositTransaction(){let e=`${$t.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===e);return!!(this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))&&t.length>0)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${$t.ProtocolPackage}::incentive_v3::withdraw_v2`)}findPoolByAssetId(e){let t=Object.values($t.pool).find(n=>n.assetId===e);if(!t)throw new Error("Pool not found");return t}decodeEntryClaimAndDeposit(){return{txType:ye.Other,type:"EntryClaimAndDeposit",intentionData:{type:"entry_claim_and_deposit"}}}decodeClaimReward(){return console.log("decode claims"),{txType:ye.Other,type:"ClaimReward",intentionData:{type:"claim_reward"}}}decodeEntryBorrow(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryBorrow",intentionData:{amount:t,assetId:e}}}decodeEntryMultiDeposit(){let e=[],t=`${$t.ProtocolPackage}::incentive_v3::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===t){let o=new $o(n,this.txb),i=o.decodeInputU8(3),s=o.decodeInputU64(5);e.push({assetId:i,amount:s})}}),{txType:ye.Other,type:"EntryMultiDeposit",intentionData:{list:e}}}decodeEntryDeposit(){let e=this.helper.decodeInputU8(3),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryDeposit",intentionData:{amount:t,assetId:e}}}decodeEntryRepay(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(6);return{txType:ye.Other,type:"EntryRepay",intentionData:{amount:t,assetId:e}}}decodeEntryWithdraw(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:ye.Other,type:"EntryWithdraw",intentionData:{amount:t,assetId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith($t.ProtocolPackage));return new $o(e,this.txb)}},$o=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return nn(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return Xc.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return nn(e.value.Object.ImmOrOwned.objectId)}return nn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return nn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return nn(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return Xc.de(t,new Uint8Array(n))}typeArg(e){return Mp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{Transaction as zc}from"@mysten/sui/transactions";import{depositCoinPTB as Op,withdrawCoinPTB as Pp,repayCoinPTB as Rp,borrowCoinPTB as Bp,claimLendingRewardsPTB as Gc,getUserAvailableLendingRewards as Qc}from"@naviprotocol/lending";async function Pe(a,e,t,n){return await Op(a,e,t,{amount:n}),a}async function Jc(a,e,t,n){let[o]=await Pp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function Yc(a,e,t,n){let[o]=await Bp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function Fr(a,e,t,n){return await Rp(a,e,t,{amount:n}),a}async function Zc(a,e){let t=new zc,n=await Qc(e,{client:a});return await Gc(t,n),t}async function tl(a,e){let t=new zc,n=await Qc(e,{client:a});return await Gc(t,n,{customCoinReceive:{type:"depositNAVI",depositNAVI:{fallbackReceiveAddress:e}}}),t}var Ho=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await Zc(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};var Xo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward and supply",n),await tl(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Wp}from"@mysten/sui/transactions";import{getPool as Ep}from"@naviprotocol/lending";async function Yt(a){return Ep(a)}var zo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Wp;console.log("build",this.data);let s=await Yt(n);return await Yc(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Np}from"@mysten/sui/transactions";async function Re(a,e,t){let n=await a.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,n),n}var Go=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,l=new Np;console.log("build",this.data);let d=await Yt(i);if(i===0){let[x]=l.splitCoins(l.gas,[s]);return await Pe(l,d,x,s)}let b=await Re(n,o.address,d.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${d.suiCoinType} Token`);let I=b.data[0].coinObjectId;if(b.data.length>=2){let x=1;for(;x<b.data.length;)l.mergeCoins(I,[b.data[x].coinObjectId]),x++}return await Pe(l,d,l.object(I),s)}static fromData(t){return new a(t)}};import{Transaction as _p}from"@mysten/sui/transactions";var Qo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,l=new _p;console.log("build",this.data);let d=await Yt(i);if(i===0){let[C]=l.splitCoins(l.gas,[s]);return Fr(l,d,C,s)}let b=await Re(n,o.address,d.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${d.suiCoinType} Token`);let I=b.data[0].coinObjectId;if(b.data.length>=2){let C=1;for(;C<b.data.length;)l.mergeCoins(I,[b.data[C].coinObjectId]),C++}return Fr(l,d,l.object(I),s)}static fromData(t){return new a(t)}};import{Transaction as Lp}from"@mysten/sui/transactions";var Jo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Lp;console.log("build",this.data);let s=await Yt(n);return await Jc(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as jp}from"@mysten/sui/transactions";var Yo=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:i}=this.data,s=new jp;console.log("build",this.data);for(let l=0;l<i.length;l++){let{assetId:d,amount:b}=i[l],I=await Yt(d);if(d===0){let[D]=s.splitCoins(s.gas,[b]);await Pe(s,I,D,b);continue}let C=await Re(n,o.address,I.suiCoinType);if(!C.data[0])throw new Error(`Insufficient balance for ${I.suiCoinType} Token`);let x=C.data[0].coinObjectId;if(C.data.length>=2){let D=1;for(;D<C.data.length;)s.mergeCoins(x,[C.data[D].coinObjectId]),D++}await Pe(s,I,s.object(x),b)}return s}static fromData(t){return new a(t)}};var Zo=class{application="navi";supportSDK="@mysten/sui";async deserialize(e){await qr();let{transaction:t}=e,o=new Vo(t).decode();return{txType:Up.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await qr(),e.txSubType){case"EntryDeposit":o=Go.fromData(e.intentionData);break;case"EntryBorrow":o=zo.fromData(e.intentionData);break;case"EntryRepay":o=Qo.fromData(e.intentionData);break;case"EntryWithdraw":o=Jo.fromData(e.intentionData);break;case"EntryMultiDeposit":o=Yo.fromData(e.intentionData);break;case"ClaimReward":o=Ho.fromData(e.intentionData);break;case"EntryClaimAndDeposit":o=Xo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionSubTypes as qp,TransactionType as el}from"@msafe/sui3-utils";import{fromHex as Fp}from"@mysten/bcs";import{Transaction as Kp}from"@mysten/sui/transactions";import Vp from"sort-keys-recursive";var nl="msafe-plain-tx",ol=qp.others.plain,Kr=class a{constructor(e){this.data=e}application=nl;txType=el.Other;txSubType=ol;serialize(){return JSON.stringify(Vp(this.data))}async build(e){return Kp.from(Fp(this.data.content))}static fromData(e){return new a(e)}},ta=class{application;supportSDK="@mysten/sui";constructor(){this.application=nl}async deserialize(e){let{content:t}=e.appContext;return{txType:el.Other,txSubType:ol,intentionData:{content:t}}}async build(e){let{suiClient:t,network:n,account:o}=e;return Kr.fromData(e.intentionData).build({suiClient:t,network:n,account:o})}};import{SuiClient as al}from"@mysten/sui/client";import{Transaction as Jp}from"@mysten/sui/transactions";import{SuiClient as Hr}from"@mysten/sui.js/client";import{TransactionBlock as Yp}from"@mysten/sui.js/transactions";import{RequestManager as zp,HTTPTransport as Gp,Client as Qp}from"@open-rpc/client-js";var $p={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},Vr=class extends Error{},ea=class extends Vr{code;type;constructor(e,t){super(e),this.code=t,this.type=$p[t]??"ServerError"}};function Hp(a){let e=new URL(a);return e.protocol=e.protocol.replace("http","ws"),e.toString()}var Xp={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},na=class{endpoint;options;#n=0;#a=0;#t=null;#e=null;#i=new Set;#o=new Map;constructor(e,t={}){this.endpoint=e,this.options={...Xp,...t},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=Hp(this.endpoint))}async makeRequest(e,t){let n=await this.#r();return new Promise((o,i)=>{this.#n+=1,this.#o.set(this.#n,{resolve:o,reject:i,timeout:setTimeout(()=>{this.#o.delete(this.#n),i(new Error(`Request timeout: ${e}`))},this.options.callTimeout)}),n.send(JSON.stringify({jsonrpc:"2.0",id:this.#n,method:e,params:t}))}).then(({error:o,result:i})=>{if(o)throw new ea(o.message,o.code);return i})}#r(){return this.#e?this.#e:(this.#e=new Promise(e=>{this.#t?.close(),this.#t=new this.options.WebSocketConstructor(this.endpoint),this.#t.addEventListener("open",()=>{this.#a=0,e(this.#t)}),this.#t.addEventListener("close",()=>{this.#a++,this.#a<=this.options.maxReconnects&&setTimeout(()=>{this.#s()},this.options.reconnectTimeout)}),this.#t.addEventListener("message",({data:t})=>{let n;try{n=JSON.parse(t)}catch(o){console.error(new Error(`Failed to parse RPC message: ${t}`,{cause:o}));return}if("id"in n&&n.id!=null&&this.#o.has(n.id)){let{resolve:o,timeout:i}=this.#o.get(n.id);clearTimeout(i),o(n)}else if("params"in n){let{params:o}=n;this.#i.forEach(i=>{i.subscriptionId===o.subscription&&o.subscription===i.subscriptionId&&i.onMessage(o.result)})}})}),this.#e)}async#s(){return this.#t?.close(),this.#e=null,Promise.allSettled([...this.#i].map(e=>e.subscribe(this)))}async subscribe(e){let t=new $r(e);return this.#i.add(t),await t.subscribe(this),()=>t.unsubscribe(this)}},$r=class{subscriptionId=null;input;subscribed=!1;constructor(e){this.input=e}onMessage(e){this.subscribed&&this.input.onMessage(e)}async unsubscribe(e){let{subscriptionId:t}=this;return this.subscribed=!1,t==null?!1:(this.subscriptionId=null,e.makeRequest(this.input.unsubscribe,[t]))}async subscribe(e){this.subscriptionId=null,this.subscribed=!0;let t=await e.makeRequest(this.input.method,this.input.params);this.subscribed&&(this.subscriptionId=t)}};var le=class{rpcClient;websocketClient;constructor({url:e,websocket:{url:t,...n}={},rpc:o}){let i=new Gp(o?.url??e,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new Qp(new zp([i])),this.websocketClient=new na(t??e,n)}async request(e){return await this.rpcClient.request(e)}async subscribe(e){let t=await this.websocketClient.subscribe(e);return async()=>!!await t()}};var oa=class a{apps;constructor(){this.apps=new Map}static fromHelpers(e){let t=new a;for(let n=0;n<e.length;n++){let o=e[n];switch(o.supportSDK){case"@mysten/sui.js":t.addLegacyHelper(o);break;case"@mysten/sui":t.addHelper(o);break;default:throw new Error(`${o.application}: ${o.supportSDK} SDK not supported`)}}return t}addLegacyHelper(e){this.apps.set(e.application,new zr(e))}addHelper(e){this.apps.set(e.application,new Xr(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}},Xr=class{constructor(e){this.helper=e}async deserialize(e){let t=new al({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=new Hr({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),i=Jp.from(o);return this.helper.deserialize({...e,suiClient:t,transaction:i})}async build(e){let t=new al({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");let o=await this.helper.build({...e,suiClient:t});o.setSender(e.account.address);let i=await o.build({client:t});return Yp.from(i)}},zr=class{constructor(e){this.helper=e}async deserialize(e){let t=new Hr({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})});return this.helper.deserialize({...e,transactionBlock:e.transactionBlock,suiClient:t})}async build(e){let t=new Hr({transport:new le({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");return this.helper.build({...e,suiClient:t})}};import{TransactionType as cd}from"@msafe/sui3-utils";import{getFullnodeUrl as ld}from"@mysten/sui/client";import{Scallop as ud}from"@scallop-io/sui-scallop-sdk";import{TransactionType as Pt}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as ll}from"@scallop-io/sui-scallop-sdk";import{parseStructTag as Zp}from"@mysten/sui/utils";var ue=class{constructor(e,t){this.transaction=e;this.scallopClient=t;this.scallopClient=t,this.inputs=e.getData().inputs,this.commands=e.getData().commands,this.movecallsAsSet=new Set(this.commands.filter(this.isMoveCall).map(n=>`${n.MoveCall.package}::${n.MoveCall.module}::${n.MoveCall.function}`))}inputs;commands;movecallsAsSet;get address(){return this.scallopClient.address}get utils(){return this.scallopClient.utils}get coreId(){return{protocolPkg:this.address.get("core.packages.protocol.id"),market:this.address.get("core.market"),version:this.address.get("core.version"),coinDecimalsRegistry:this.address.get("core.coinDecimalsRegistry"),xOracle:this.address.get("core.oracles.xOracle"),spoolPkg:this.address.get("spool.id"),borrowIncentivePkg:this.address.get("borrowIncentive.id"),veScaPkgId:this.address.get("vesca.id"),veScaObjId:this.address.get("vesca.object"),scoin:this.address.get("scoin.id"),referral:this.address.get("referral.id")}}matchMoveCallCommand(e,t){let{address:n,module:o,name:i}=Zp(t);return e?e.package===n&&e.module===o&&e.function===i:!1}isMoveCall(e){return e.$kind==="MoveCall"&&!!e.MoveCall}filterMoveCallCommands(e,t){return this.isMoveCall(e)&&this.matchMoveCallCommand(e.MoveCall,t)}getMoveCallCommands(e){let t=new Set(e),n=e.reduce((i,s,l)=>(i[s]=l,i),{}),o=[];return this.commands.forEach(i=>{this.isMoveCall(i)&&i.MoveCall&&t.has(i.MoveCall.package)&&(o[n[i.MoveCall.package]]=i.MoveCall)}),o}hasMoveCallCommand(e){return this.movecallsAsSet.has(e)}};import{bcs as Gr}from"@mysten/sui/bcs";import{normalizeStructTag as td,normalizeSuiAddress as on}from"@mysten/sui/utils";var Qr=class a{constructor(e,t,n=0){this.moveCall=e;this.transaction=t;let o=[];e?.MoveCall&&t.getData().commands.filter((i,s)=>{if(i.$kind==="MoveCall"){let l=`${i.MoveCall.package}::${i.MoveCall.module}::${i.MoveCall.function}`,d=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;return l===d?(o.push(s),!0):!1}return!1}),this.cmdIdx=o[n]}cmdIdx;get txBlockTransactions(){return this.transaction.blockData.transactions[this.cmdIdx]}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"U64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"U8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"Address");return on(t)}decodeInputString(e){return this.decodePureArg(e,"String")}decodeInputBool(e){return this.decodePureArg(e,"Bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return t}getNestedInputParam(e){let t=this.txBlockTransactions.arguments[e];if(t.kind!=="NestedResult")throw new Error("not input type");return this.transaction.blockData.transactions[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure,o=Gr[t];return Gr[t].parse(new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return on(e.value.Object.ImmOrOwned.objectId)}return on(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return on(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return on(e.value.Object.Shared.objectId)}static getPureInput(e){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let t=e.value.Pure;return Gr.U64.parse(new Uint8Array(t))}typeArg(e){return td(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},W=Qr;var Jr=class{constructor(e,t){this.splitCoin=e;this.txb=t}getAmountInput(){return this.splitCoin.amounts.map(e=>{if(e.kind==="Input")return Number(W.getPureInputValue(e,"U64"))}).filter(e=>e!==void 0)}},Rt=Jr;import{normalizeStructTag as il,SUI_CLOCK_OBJECT_ID as rl,SUI_TYPE_ARG as ed}from"@mysten/sui/utils";var sl=async(a,e)=>{let t=await a.scallopSuiKit.client.getObject({id:e,options:{showContent:!0}});if(t?.data?.content?.dataType!=="moveObject")return!1;let o=t.data.content.fields.lock_key?.fields.name;if(!o)return!1;let i=a.address.get("borrowIncentive.object");return o===`${i.slice(2)}::incentive_account::IncentiveProgramLockKey`},Be={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},Kt={unstakeObligation:(a,e,t)=>a.moveCall(`${Be.id}::user::unstake`,[Be.incentivePools,Be.incentiveAccounts,a.object(e),a.object(t),rl],[il(ed)]),redeem_rewards:(a,e,t,n)=>a.moveCall(`${Be.id}::user::redeem_rewards`,[Be.incentivePools,Be.incentiveAccounts,a.object(e),a.object(t),rl],[il(n)])};var cl=(a,e)=>{let t=[];for(let n=0;n<a.length;n+=e)t.push(a.slice(n,n+e));return t};var aa=class extends ue{decode(){if(this.isSupplyWithStakeSpoolTransaction())return this.decodeSupplyWithStakeSpool();if(this.isUnstakeAndWithdrawTransaction())return this.decodeUnstakeAndWithdraw();if(this.isStakeSpoolTransaction())return this.decodeStakeSpool();if(this.isDepositCollateralTransaction())return this.decodeDepositCollateral();if(this.isWithdrawCollateralTransaction())return this.decodeWithdrawCollateral();if(this.isWithdrawLendingScoinTransaction())return this.decodeWithdrawLendingScoin();if(this.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithReferralTransaction())return this.decodeBorrowWithReferral();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayWithBoostTransaction())return this.decodeRepayWithBoost();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isMigrateScoinTransaction())return this.decodeMigrateScoin()}isMigrateScoinTransaction(){return this.hasMoveCallCommand(`${this.coreId.scoin}::s_coin_converter::mint_s_coin`)}isSupplyLendingTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::mint::mint`)}isSupplyWithStakeSpoolTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::mint::mint`),t=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::stake`);return e&&t}isUnstakeAndWithdrawTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::unstake`),t=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`);return e&&t}isStakeSpoolTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::stake`)}isWithdrawLendingTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`)}isWithdrawLendingScoinTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::redeem::redeem`),t=this.hasMoveCallCommand(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`);return e&&t}isDepositCollateralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`)}isWithdrawCollateralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`)}isBorrowTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow`)}isBorrowWithBoostTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`);return e&&t}isBorrowWithReferralTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`)}isRepayTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::repay::repay`)}isRepayWithBoostTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.protocolPkg}::repay::repay`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`);return e&&t}isUnstakeSpoolTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::unstake`)}isCreateStakeAccountTransaction(){return this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::new_spool_account`)}isClaimRewardTransaction(){let e=this.hasMoveCallCommand(`${this.coreId.spoolPkg}::user::redeem_rewards`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`);return e||t}isOpenObligationTransaction(){return this.hasMoveCallCommand(`${this.coreId.protocolPkg}::open_obligation::open_obligation`)}isMigrateAndClaim(){let e=this.hasMoveCallCommand(`${ll}::user::redeem_rewards`),t=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`),n=this.hasMoveCallCommand(`${this.coreId.borrowIncentivePkg}::user::stake`);return e&&(t||n)}get helperClaimLendingReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperClaimBorrowV2Reward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new W(e,this.transaction)}get helperClaimBorrowReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${ll}::user::redeem_rewards`)).map(t=>new W(t,this.transaction))}get helperMint(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::mint::mint`));return new W(e,this.transaction)}get helperUnstakes(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new W(t,this.transaction))}get helperRedeems(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new W(t,this.transaction))}get helperRedeem(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`));return new W(e,this.transaction)}get helperBurnScoin(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new W(e,this.transaction)}get helperStake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::stake`));return new W(e,this.transaction)}get helperUnstake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`));return new W(e,this.transaction)}get helperDepositCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new W(e,this.transaction)}get helperWithdrawCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new W(e,this.transaction)}get helperBorrow(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow`));return new W(e,this.transaction)}get helperBorrowWithReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new W(e,this.transaction)}get helperRepay(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::repay::repay`));return new W(e,this.transaction)}decodeMigrateScoin(){return{txType:Pt.Other,type:"MigrateScoin",intentionData:{}}}decodeMigrateAndClaim(){let e;this.helperStakeObligationWithVeSca.moveCall&&(e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let t=this.helperClaimBorrowReward[0].decodeOwnedObjectId(2),n=this.helperClaimBorrowReward[0].decodeSharedObjectId(3),o=this.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:Pt.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:Pt.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Rt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Pt.Other,type:"SupplyLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLending(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),t=this.helperRedeem.getNestedInputParam(2),n=new Rt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Pt.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLendingScoin(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0));console.log({coinName:e});let t=this.helperBurnScoin.getNestedInputParam(1),n=new Rt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Pt.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeDepositCollateral(){let e=this.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),t=this.helperDepositCollateral.getNestedInputParam(3),n=new Rt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:Pt.Other,type:"DepositCollateral",intentionData:{amount:n,obligationId:o,collateralCoinName:e}}}decodeWithdrawCollateral(){let e=this.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),t=this.helperWithdrawCollateral.decodeInputU64(5),n=this.helperWithdrawCollateral.decodeSharedObjectId(1),o=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"WithdrawCollateral",intentionData:{amount:t,collateralCoinName:e,obligationKey:o,obligationId:n}}}decodeBorrow(){let e=this.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),t=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),o=this.helperBorrow.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"Borrow",intentionData:{amount:t,coinName:e,obligationKey:o,obligationId:n}}}decodeBorrowWithBoost(){let e=this.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperBorrow.decodeInputU64(5),o=this.helperBorrow.decodeSharedObjectId(1),i=this.helperBorrow.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:e,obligationKey:i,obligationId:o,veScaKey:t}}}decodeBorrowWithReferral(){let e=this.utils.parseCoinNameFromType(this.helperBorrowWithReferral.typeArg(0)),t;this.helperStakeObligationWithVeSca.moveCall&&(t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let n=this.helperBorrowWithReferral.decodeInputU64(6),o=this.helperBorrowWithReferral.decodeSharedObjectId(1),i=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:Pt.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:e,obligationKey:i,obligationId:o,veScaKey:t}}}decodeRepay(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperRepay.getNestedInputParam(3),n=new Rt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:Pt.Other,type:"Repay",intentionData:{amount:n,obligationId:o,coinName:e}}}decodeRepayWithBoost(){let e=this.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperRepay.getNestedInputParam(3),o=new Rt(n,this.transaction).getAmountInput().reduce((s,l)=>s+l,0),i=this.helperRepay.decodeSharedObjectId(1);return{txType:Pt.Other,type:"RepayWithBoost",intentionData:{amount:o,obligationId:i,coinName:e,veScaKey:t}}}decodeStakeSpool(){let e;this.isCreateStakeAccountTransaction()||(e=this.helperStake.decodeOwnedObjectId(1));let t=0;if(this.helperBurnScoin.moveCall){let i=this.helperBurnScoin.getNestedInputParam(1);t=new Rt(i,this.transaction).getAmountInput().reduce((s,l)=>s+l,0)}if(this.helperStake.moveCall&&t===0){let i=this.helperStake.getNestedInputParam(2);t=new Rt(i,this.transaction).getAmountInput().reduce((s,l)=>s+l,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Pt.Other,type:"StakeSpool",intentionData:{amount:t,marketCoinName:o,stakeAccountId:e}}}decodeUnstakeSpool(){let e=this.helperUnstake.decodeOwnedObjectId(1),t=this.helperUnstake.decodeInputU64(2),n=this.helperUnstake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Pt.Other,type:"UnstakeSpool",intentionData:{amount:t,marketCoinName:o,stakeAccountId:e}}}decodeSupplyWithStakeSpool(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Rt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:Pt.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let e=[];this.helperUnstakes.forEach(o=>{let i=o.decodeOwnedObjectId(1),s=o.decodeInputU64(2);e.push({id:i,coin:s})});let t=this.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let o=this.helperBurnScoin.getNestedInputParam(1);n=new Rt(o,this.transaction).getAmountInput().reduce((i,s)=>i+s,0)}return{txType:Pt.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:e}}}decodeClaimReward(){let e=[],t=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let i=o.decodeOwnedObjectId(2),s=o.typeArg(0),l=this.utils.parseCoinNameFromType(s);e.push({stakeMarketCoinName:l,stakeAccountId:i})}),this.helperClaimBorrowV2Reward.forEach(o=>{let i=o.decodeSharedObjectId(4),s=o.decodeOwnedObjectId(3),l=this.utils.parseCoinNameFromType(o.typeArg(0));t.push({obligationId:s,obligationKey:i,rewardCoinName:l})}),this.helperClaimBorrowReward.forEach(o=>{let i=o.decodeSharedObjectId(2),s=o.decodeOwnedObjectId(3),l=this.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:s,obligationKey:i,rewardCoinName:l})}),{txType:Pt.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as Zr}from"@msafe/sui3-utils";var ia=class extends ue{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return this.hasMoveCallCommand(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(t=>new W(t,this.transaction))}get helperBindReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new W(e,this.transaction)}decodeCreateReferralLink(){return{txType:Zr.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Zr.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:Zr.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as te}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as nd}from"@scallop-io/sui-scallop-sdk";var ra=class extends ue{async decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca();if(this.isMergeVeSca())return this.decodeMergeVesca();if(this.isSplitVeSca())return this.decodeSplitVesca();if(this.isVeScaObligationBindings())return this.decodeVeScaObligationBindings();if(await this.isTransferVeScaKey())return this.decodeTransferVeScaKey()}isStakeScaFirsTime(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let e=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),t=this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!e&&!!t}isRedeemSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}isMergeVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::merge`)}isSplitVeSca(){return this.hasMoveCallCommand(`${this.coreId.veScaPkgId}::ve_sca::split`)}isVeScaObligationBindings(){let e=this.commands.filter(l=>this.filterMoveCallCommands(l,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`)),t=this.commands.filter(l=>this.filterMoveCallCommands(l,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`)),n=this.commands.filter(l=>this.filterMoveCallCommands(l,`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`)),o=e.length>0&&t.length>0&&e.length===t.length,i=n.length>0;return this.commands.length===e.length+t.length+n.length&&(o||i)}async isTransferVeScaKey(){let e=this.commands.filter(d=>d.$kind==="TransferObjects");if(e.length!==1)return!1;let{objects:t}=e[0].TransferObjects,n=t.filter(d=>d.$kind==="Input").map(({Input:d})=>d);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((d,b)=>d.$kind==="Object"&&o.has(b)).map(d=>d.Object.ImmOrOwnedObject),s=`${this.coreId.veScaObjId}::ve_sca::VeScaKey`,l=cl(i.map(({objectId:d})=>d),50);for(let d=0;d<l.length;d++){let b=l[d];if((await this.scallopClient.scallopSuiKit.queryGetObjects(b,{showType:!0})).some(C=>C.type!==s))return!1}return i.length>0}get helperStakeMoreSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new W(e,this.transaction)}get helperStakeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new W(e,this.transaction)}get helperExtendStakePeriod(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new W(e,this.transaction)}get helperRedeemSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new W(e,this.transaction)}get helperRenewExpired(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new W(e,this.transaction)}get helperOldUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${nd}::user::unstake`));return new W(e,this.transaction)}get helperUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`));return new W(e,this.transaction)}get helperStakeObligationWithVeSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`));return new W(e,this.transaction)}getMergeSplitVeScaHelper(e){let t=this.commands.find(n=>this.filterMoveCallCommands(n,`${this.coreId.veScaPkgId}::ve_sca::${e}`));return new W(t,this.transaction)}getVeScaObligationBindingHelpers(){let e=`${this.coreId.borrowIncentivePkg}::user::unstake_v2`,t=`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,n=`${this.coreId.borrowIncentivePkg}::user::deactivate_boost_v2`,o=[],i=0,s=0,l=0;return this.commands.forEach(d=>{this.filterMoveCallCommands(d,e)?(o.push({action:"unstake",helper:new W(d,this.transaction,i)}),i++):this.filterMoveCallCommands(d,t)?(o.push({action:"stake",helper:new W(d,this.transaction,s)}),s++):this.filterMoveCallCommands(d,n)&&(o.push({action:"deactivate",helper:new W(d,this.transaction,l)}),l++)}),o}decodeRedeemSca(){let e=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:te.Other,type:"RedeemSca",intentionData:{veScaKey:e}}}decodeRenewExpiredVeSca(){let e=this.helperRenewExpired.getNestedInputParam(4),t=this.helperRenewExpired.decodeInputU64(5),n=new Rt(e,this.transaction).getAmountInput().reduce((k,P)=>k+P,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),i=!!this.helperRedeemSca.moveCall,s=[],l=[],d=[];this.helperOldUnstakeObligation.moveCall&&(s=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(l=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(d=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let b=!1,I=!1,C,x,D=[{condition:s,isOld:!0},{condition:l,isOld:!1},{condition:d,isOld:!1}];for(let k=0;k<D.length;k++)D[k].condition.length>1&&([x,C]=D[k].condition,b=!0,I=D[k].isOld);return{txType:te.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:C,obligationKey:x,veScaKey:o,isHaveRedeem:i,isObligationLocked:b,isOldBorrowIncentive:I}}}decodeExtendStakePeriod(){let e=this.helperExtendStakePeriod.decodeInputU64(4),t=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],i=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(o=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(i=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let s=!1,l=!1,d,b,I=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:i,isOld:!1}];for(let C=0;C<I.length;C++)I[C].condition.length>1&&([b,d]=I[C].condition,s=!0,l=I[C].isOld);return{txType:te.Other,type:"ExtendStakePeriod",intentionData:{unlockTime:e,obligationId:d,obligationKey:b,veScaKey:t,isObligationLocked:s,isOldBorrowIncentive:l}}}decodePeriodAndStakeMoreSca(){let e=this.helperStakeMoreSca.getNestedInputParam(4),t=this.helperExtendStakePeriod.decodeInputU64(4),n=new Rt(e,this.transaction).getAmountInput().reduce((D,k)=>D+k,0),o=[],i=[],s,l=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(i=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(l=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,b=!1,I,C,x=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:l,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([C,I]=x[D].condition,d=!0,b=x[D].isOld);return{txType:te.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:s,unlockTime:t,obligationId:I,obligationKey:C,isOldBorrowIncentive:b,isObligationLocked:d}}}decodeStakeSca(){let e,t;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(e=this.helperStakeSca.getNestedInputParam(3),t=this.helperStakeSca.decodeInputU64(4)):e=this.helperStakeMoreSca.getNestedInputParam(4);let n=new Rt(e,this.transaction).getAmountInput().reduce((D,k)=>D+k,0),o=[],i=[],s,l=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(i=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(s=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(l=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,b=!1,I,C,x=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:l,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([C,I]=x[D].condition,d=!0,b=x[D].isOld);return{txType:te.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:I,obligationKey:C,veScaKey:s,isObligationLocked:d,isOldBorrowIncentive:b}}}decodeMergeVesca(){let e=this.getMergeSplitVeScaHelper("merge"),t={targetVeScaKey:e.decodeOwnedObjectId(1),sourceVeScaKey:e.decodeOwnedObjectId(2)};return{txType:te.Other,type:"MergeVeSca",intentionData:t}}decodeSplitVesca(){let e=this.getMergeSplitVeScaHelper("split"),t={targetVeScaKey:e.decodeOwnedObjectId(1),splitAmount:e.decodeInputU64(4)};return{txType:te.Other,type:"SplitVeSca",intentionData:t}}decodeVeScaObligationBindings(){let e=this.getVeScaObligationBindingHelpers(),t=(o,i)=>{switch(o){case"stake":return{veScaKey:i.decodeOwnedObjectId(9),obligationId:i.decodeSharedObjectId(4),obligationKey:i.decodeOwnedObjectId(3)};case"unstake":return{obligationId:i.decodeSharedObjectId(4),obligationKey:i.decodeOwnedObjectId(3)};case"deactivate":return{veScaKey:i.decodeOwnedObjectId(4),obligationId:i.decodeSharedObjectId(3)};default:throw new Error(`Invalid action ${o}`)}},n=e.map(({action:o,helper:i})=>({action:o,args:t(o,i)}));return{txType:te.Other,type:"VeScaObligationBindings",intentionData:{bindingDatas:n}}}decodeTransferVeScaKey(){let e=this.commands.filter(s=>s.$kind==="TransferObjects"),{objects:t}=e[0].TransferObjects,n=t.filter(s=>s.$kind==="Input").map(({Input:s})=>s);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((s,l)=>s.$kind==="Object"&&o.has(l)).map(s=>s.Object.ImmOrOwnedObject);return{xType:te.Other,type:"TransferVeScaKeys",intentionData:{veScaKeys:i}}}};import od from"sort-keys-recursive";var A=class{constructor(e){this.data=e}get application(){return"msafe-core"}serialize(){return JSON.stringify(od(this.data))}isObligationLocked=async(e,t)=>{let n=await e.getObject({id:typeof t=="string"?t:t.objectId,options:{showContent:!0}}),o=!1;return n&&n?.data.content?.dataType==="moveObject"&&"lock_key"in n.data.content.fields&&(o=!!n.data.content.fields.lock_key),o};async buildTxWithRefreshObligation(e,t,n){let o=e.builder.createTxBlock();o.setSender(t.walletAddress);let{obligationId:i,obligationKey:s}=t;return await this.isObligationLocked(e.scallopSuiKit.client,i)?(await o.unstakeObligationQuick(i,s),await n(e,o,t),await o.stakeObligationWithVeScaQuick(i,s,t.veScaKey)):await n(e,o,t),o}};var sa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrow({account:t,scallopClient:n}){let{coinName:o,amount:i,obligationId:s,obligationKey:l}=this.data,d=t.address;return(await this.buildTxWithRefreshObligation(n,{walletAddress:d,obligationId:s,obligationKey:l},async(I,C)=>{let x=await C.borrowQuick(+i,o,s,l);C.transferObjects([x],d)})).txBlock}async build(t){return this.borrow(t)}static fromData(t){return new a(t)}};var ca=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithBoost(t,n){let{obligationId:o,obligationKey:i,veScaKey:s,amount:l,coinName:d}=this.data;return(await this.buildTxWithRefreshObligation(t,{walletAddress:n,obligationId:o,obligationKey:i,veScaKey:s},async(I,C)=>{let x=await C.borrowQuick(+l,d,o,i);C.transferObjects([x],n)})).txBlock}async build(t){return this.borrowWithBoost(t.scallopClient,t.account.address)}static fromData(t){return new a(t)}};var la=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async borrowWithReferral({account:t,scallopClient:n}){let o=t.address,{obligationId:i,obligationKey:s,veScaKey:l,coinName:d,amount:b}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:i,obligationKey:s,veScaKey:l},async(C,x)=>{let D=x.claimReferralTicket(d),k=await x.borrowWithReferralQuick(+b,d,D,i,s);x.burnReferralTicket(D,d),x.transferObjects([k],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new a(t)}};import{SUI_TYPE_ARG as ad}from"@mysten/sui/utils";var ua=class a extends A{txType;txSubType;constructor(e={}){super(e)}async claimIncentiveRewards(e,t){let n=e.builder.createTxBlock();n.setSender(t);let o=await e.query.getAllStakeAccounts(t),i=await e.query.getLendings(void 0,t),s=await e.query.getObligations(t),l=Object.values(await e.query.getObligationAccounts(t)??[]),d=(()=>{let x=[...e.constants.whitelist.spool].map(D=>e.utils.parseCoinName(D));return Object.values(i??[]).filter(D=>!!D&&x.includes(D.coinName)).reduce((D,k)=>{let P=e.utils.parseMarketCoinName(k.coinName);return D[P]||(D[P]=0),D[P]+=k.availableClaimCoin,D},{})})(),b={};Object.entries(o).forEach(([x,D])=>{for(let k=0;k<D.length;k++){let P=D[k];if(!d[x])continue;let U=n.claim(P.id,x);b.sui?b.sui.push(U):b.sui=[U]}});let I=(()=>{let x={};return x.sui=Object.values(d).reduce((D,k)=>D+k,0),l.forEach(D=>{Object.values(D.borrowIncentives).forEach(k=>{k&&k.rewards.forEach(P=>{x[P.coinName]||(x[P.coinName]=0),x[P.coinName]?x[P.coinName]+=P.availableClaimCoin:x[P.coinName]=P.availableClaimCoin})})}),x})();if(s.length>0&&l.length>0)for(let x=0;x<l.length;x++){let D=l[x],k=!1,P=s.find(K=>K.id===D.obligationId)?.keyId,U={};if(P){if(Object.values(D.borrowIncentives).forEach(K=>{if(K){let Bt=K.rewards.filter(Et=>{let Mt=Et.coinName;return Et.availableClaimCoin>0&&!U[Mt]});k=Bt.length>0,Bt.forEach(Et=>{let Mt=n.claimBorrowIncentive(D.obligationId,P,Et.coinName);U[Et.coinName]=!0,b[Et.coinName]?b[Et.coinName].push(Mt):b[Et.coinName]=[Mt]})}}),I.sui>0){let K=Kt.redeem_rewards(n,P,D.obligationId,ad);b.sui?b.sui.push(K):b.sui=[K]}if(k&&await sl(e.query,D.obligationId)){n.unstakeObligation(D.obligationId,P);let Bt=await e.query.getBindedVeScaKey(D.obligationId);Bt?n.stakeObligationWithVesca(D.obligationId,P,Bt):n.stakeObligation(D.obligationId,P)}}}let C=(await Promise.all(Object.entries(b).map(async([x,D])=>{let k=D[0];if(D.length>1&&n.mergeCoins(k,D.slice(1)),x==="sui"){n.mergeCoins(n.gas,[k]);return}return await e.builder.utils.mergeSimilarCoins(n,k,e.utils.parseCoinType(x),t),k}))).filter(x=>!!x);return C.length>0&&n.transferObjects(C,t),n.txBlock}async build(e){return this.claimIncentiveRewards(e.scallopClient,e.account.address)}static fromData(e={}){return new a(e)}};var ma=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.depositCollateral(this.data.collateralCoinName,+this.data.amount,!1,this.data.obligationId)}static fromData(t){return new a(t)}};var pa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async migrateAndClaim({account:t,scallopClient:n}){let o=t.address,{obligationKey:i,obligationId:s,rewardCoinName:l,veScaKey:d}=this.data,b=n.builder.createTxBlock();b.setSender(o);let I=Kt.redeem_rewards(b,i,s,n.utils.parseCoinType(l));return b.transferObjects([I],o),await b.unstakeObligationQuick(s,i),d?await b.stakeObligationWithVeScaQuick(s,i,d):await b.stakeObligationQuick(s,i),b.txBlock}async build(t){return this.migrateAndClaim(t)}static fromData(t){return new a(t)}};var da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.migrateAllMarketCoin(!1,!1)}static fromData(t){return new a(t)}};var fa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.openObligation(!1)}static fromData(t){return new a(t)}};var ha=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repay({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:l,obligationKey:d}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:l,obligationKey:d},async(I,C)=>{await C.repayQuick(+s,i,l)})).txBlock}async build(t){return this.repay(t)}static fromData(t){return new a(t)}};var ga=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async repayWithBoost({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:l,veScaKey:d}=this.data,b=n.builder.createTxBlock();b.setSender(o);let I=n.constants.whitelist.borrowing.has(i);return I&&await b.unstakeObligationQuick(l,void 0),await b.repayQuick(+s,i,l),I&&await b.stakeObligationWithVeScaQuick(l,void 0,d),b.txBlock}async build(t){return this.repayWithBoost(t)}static fromData(t){return new a(t)}};var ya=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.deposit(this.data.coinName,+this.data.amount,!1,t.account.address)}static fromData(t){return new a(t)}};var ba=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.unstake(this.data.marketCoinName,+this.data.amount,!1)}static fromData(t){return new a(t)}};var Ta=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async unstakeAndWithdraw(t,n,o){let i=t.builder.createTxBlock();i.setSender(o);let{stakeAccountId:s,amount:l,coinName:d}=this.data,b=[];for(let I=0;I<s.length;I++){let{id:C,coin:x}=s[I],D=t.utils.parseMarketCoinName(d),[k]=await i.unstakeQuick(x,D,C);if(k){let P=i.withdraw(k,d);b.push(P)}}if(l>0){let I=await i.withdrawQuick(l,d);b.push(I)}return b.length>1&&i.mergeCoins(b[0],b.slice(1)),i.transferObjects(b,o),i.txBlock}async build(t){return this.unstakeAndWithdraw(t.scallopClient,this.data,t.account.address)}static fromData(t){return new a(t)}};var Sa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),!1,this.data.obligationId,this.data.obligationKey,t.account.address)}static fromData(t){return new a(t)}};var Ia=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){return t.scallopClient.withdraw(this.data.coinName,Number(this.data.amount),!1,t.account.address)}static fromData(t){return new a(t)}};var wa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async bindReferral({account:t,scallopClient:n}){let o=t.address,i=n.builder.createTxBlock();return i.setSender(o),i.bindToReferral(this.data.veScaKey),i.txBlock}async build(t){return this.bindReferral(t)}static fromData(t){return new a(t)}};var Ca=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async claimRevenueReferral({account:t,scallopClient:n}){let{veScaKey:o,coins:i}=this.data,s=t.address,l=n.builder.createTxBlock();l.setSender(s);let d=i.map(b=>n.utils.parseCoinNameFromType(b));return await l.claimReferralRevenueQuick(o,d),l.txBlock}async build(t){return this.claimRevenueReferral(t)}static fromData(t){return new a(t)}};var xa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async createReferralLink({account:t,scallopClient:n}){let o=t.address,i=n.builder.createTxBlock();i.setSender(o);let s=i.mintEmptyVeSca();return i.transferObjects([s],o),i.txBlock}async build(t){return this.createReferralLink(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as id}from"@scallop-io/sui-scallop-sdk";var Da=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendPeriodAndStakeMoreSca({account:t,scallopClient:n}){let{amount:o,veScaKey:i,unlockTime:s,obligationId:l,obligationKey:d,isOldBorrowIncentive:b,isObligationLocked:I}=this.data,C=t.address,x=n.builder.createTxBlock();x.setSender(C);let D=await n.utils.selectCoins(o,id,C),[k,P]=x.takeAmountFromCoins(D,o);return x.extendLockPeriod(i,s),x.extendLockAmount(i,k),x.transferObjects([P],C),!l||!d||(I&&(b?Kt.unstakeObligation(x,l,d):x.unstakeObligation(l,d)),x.stakeObligationWithVesca(l,d,i)),x.txBlock}async build(t){return this.extendPeriodAndStakeMoreSca(t)}static fromData(t){return new a(t)}};var ka=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async extendStakeScaLockPeriod({account:t,scallopClient:n}){let o=t.address,{veScaKey:i,unlockTime:s,obligationId:l,obligationKey:d,isObligationLocked:b,isOldBorrowIncentive:I}=this.data,C=n.builder.createTxBlock();return C.setSender(o),C.extendLockPeriod(i,s),l&&d&&(b&&(I?Kt.unstakeObligation(C,d,l):C.unstakeObligation(l,d)),C.stakeObligationWithVesca(l,d,i)),C.txBlock}async build(t){return this.extendStakeScaLockPeriod(t)}static fromData(t){return new a(t)}};var va=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,sourceVeScaKey:s}=this.data,[l,d]=await Promise.all([n.getBindedObligationId(i),n.getBindedObligationId(s)]);l&&await t.unstakeObligationQuick(l),d&&await t.unstakeObligationQuick(d),o(t,i,s),l&&await t.stakeObligationWithVeScaQuick(l,void 0,i),d&&await t.stakeObligationWithVeScaQuick(d,void 0,s)}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();return i.setSender(o),await this.handleUnsubForKeys(i,n.query,async(s,l,d)=>{s.mergeVeSca(i.object(l),i.object(d))}),i.txBlock}static fromData(t){return new a(t)}};var Aa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async redeemSca({account:t,scallopClient:n}){let{veScaKey:o}=this.data,i=t.address,s=n.builder.createTxBlock();return s.setSender(i),await s.redeemScaQuick({veScaKey:o}),s.txBlock}async build(t){return this.redeemSca(t)}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as rd}from"@scallop-io/sui-scallop-sdk";var Ma=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async renewExpiredStakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,unlockTime:s,veScaKey:l,isHaveRedeem:d,obligation:b,obligationKey:I,isObligationLocked:C,isOldBorrowIncentive:x}=this.data,D=n.builder.createTxBlock();if(D.setSender(o),d){let K=D.redeemSca(l);D.transferObjects([K],o)}let k=await n.builder.utils.selectCoins(i,rd,o),[P,U]=D.takeAmountFromCoins(k,i);return D.transferObjects([U],o),D.renewExpiredVeSca(l,P,s),!b||!I||(C&&(x?Kt.unstakeObligation(D,I,b):D.unstakeObligation(b,I)),D.stakeObligationWithVesca(b,I,l)),D.txBlock}async build(t){return this.renewExpiredStakeSca(t)}static fromData(t){return new a(t)}};var Oa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,splitAmount:s}=this.data,l=await n.getBindedObligationId(i);l&&await t.unstakeObligationQuick(l),o(t,i,s.toString()),l&&await t.stakeObligationWithVeScaQuick(l,void 0,i)}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();return i.setSender(o),await this.handleUnsubForKeys(i,n.query,(s,l,d)=>{let b=s.splitVeSca(l,d.toString());s.transferObjects([b],o)}),i.txBlock}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as sd}from"@scallop-io/sui-scallop-sdk";var Pa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async stakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,isObligationLocked:s,isOldBorrowIncentive:l,obligationId:d,obligationKey:b,unlockTime:I,veScaKey:C}=this.data,x=n.builder.createTxBlock();x.setSender(o);let D=await n.utils.selectCoins(i,sd,o),[k,P]=x.takeAmountFromCoins(D,i),U;return C?x.extendLockAmount(C,k):U=x.lockSca(k,I),d&&b&&(s&&(l?Kt.unstakeObligation(x,b,d):x.unstakeObligation(d,b)),x.stakeObligationWithVesca(d,b,C||U)),C||x.transferObjects([U,P],o),x.txBlock}async build(t){return this.stakeSca(t)}static fromData(t){return new a(t)}};var Ra=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async supplyAndStake({account:t,scallopClient:n}){let o=t.address,{amount:i,coinName:s,stakeAccountId:l}=this.data,d=n.builder.createTxBlock();d.setSender(o);let b=await d.depositQuick(+i,s),I=n.utils.parseMarketCoinName(s);if(n.constants.whitelist.spool.has(I))return d.txBlock;let C=await n.query.getStakeAccounts(I,o),x=l||(C.length>0?C[0].id:void 0);if(x)await d.stakeQuick(b,I,x);else{let D=d.createStakeAccount(I);await d.stakeQuick(b,I,D),d.transferObjects([D],o)}return d.txBlock}async build(t){return this.supplyAndStake(t)}static fromData(t){return new a(t)}};var Ba=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;handleAction(t,{action:n,args:o}){switch(n){case"deactivate":return t.deactivateBoost(o.obligationId,o.veScaKey);case"stake":return t.stakeObligationWithVesca(o.obligationId,o.obligationKey,o.veScaKey);case"unstake":return t.unstakeObligation(o.obligationId,o.obligationKey);default:throw new Error("Invalid action")}}async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();i.setSender(o);let{bindingDatas:s}=this.data;return s.forEach(l=>this.handleAction(i,l)),i.txBlock}static fromData(t){return new a(t)}};var Ea=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{scallopClient:n,account:{address:o}}=t,i=n.builder.createTxBlock();i.setSender(o);let{veScaKeys:s}=this.data;return i.transferObjects(s.map(l=>i.objectRef(l)),i.pure.address(o)),i.txBlock}static fromData(t){return new a(t)}};var Wa=class a extends A{constructor(t){super(t);this.data=t}txType;txSubType;async withdrawUnlockedSca({account:t,scallopClient:n}){let{vescaKey:o}=this.data,i=t.address,s=n.builder.createTxBlock();return s.setSender(i),await s.redeemScaQuick({veScaKey:o}),s.txBlock}async build(t){return this.withdrawUnlockedSca(t)}static fromData(t){return new a(t)}};var Na=class{application="scallop";supportSDK="@mysten/sui";scallopClient;async initScallopClient(e,t){if(!this.scallopClient){let n=new ud({addressId:"67c44a103fe1b8c454eb9699",walletAddress:e,suiClients:[t],fullnodeUrls:[t.transport.rpcClient.requestManager.transports[0]?.uri??ld("mainnet")]});this.scallopClient=await n.createScallopClient()}}async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;await this.initScallopClient(o.address,n),console.log("transaction",t);let i=new aa(t,this.scallopClient),s=new ia(t,this.scallopClient),l=new ra(t,this.scallopClient),d=i.decode()||s.decode()||await l.decode();if(!d)throw new Error("Unknown transaction type");return{txType:cd.Other,txSubType:d.type,intentionData:d.intentionData}}async build(e){let{suiClient:t,account:n,network:o,txSubType:i,intentionData:s}=e;await this.initScallopClient(n.address,t);let l;switch(i){case"SupplyLending":l=ya.fromData(s);break;case"WithdrawLending":l=Ia.fromData(s);break;case"Borrow":l=sa.fromData(s);break;case"Repay":l=ha.fromData(s);break;case"DepositCollateral":l=ma.fromData(s);break;case"WithdrawCollateral":l=Sa.fromData(s);break;case"OpenObligation":l=fa.fromData(s);break;case"UnstakeSpool":l=ba.fromData(s);break;case"ClaimIncentiveReward":l=ua.fromData(s);break;case"BorrowWithBoost":l=ca.fromData(s);break;case"StakeSca":l=Pa.fromData(s);break;case"ExtendStakePeriod":l=ka.fromData(s);break;case"ExtendPeriodAndStakeMore":l=Da.fromData(s);break;case"RenewExpStakePeriod":l=Ma.fromData(s);break;case"WithdrawStakedSca":l=Wa.fromData(s);break;case"SupplyAndStakeLending":l=Ra.fromData(s);break;case"WithdrawAndUnstakeLending":l=Ta.fromData(s);break;case"RedeemSca":l=Aa.fromData(s);break;case"MigrateAndClaim":l=pa.fromData(s);break;case"BorrowWithReferral":l=la.fromData(s);break;case"CreateReferralLink":l=xa.fromData(s);break;case"ClaimRevenueReferral":l=Ca.fromData(s);break;case"BindReferral":l=wa.fromData(s);break;case"MigrateScoin":l=da.fromData(s);break;case"RepayWithBoost":l=ga.fromData(s);break;case"MergeVeSca":l=va.fromData(s);break;case"SplitVeSca":l=Oa.fromData(s);break;case"VeScaObligationBindings":{l=Ba.fromData(s);break}case"TransferVeScaKeys":{l=Ea.fromData(s);break}default:throw new Error("not implemented")}return l.build({suiClient:t,account:n,network:o,scallopClient:this.scallopClient})}};import{TransactionType as Kd}from"@msafe/sui3-utils";import{TransactionType as sn}from"@msafe/sui3-utils";import{normalizeStructTag as be}from"@mysten/sui/utils";import{API_URL as kd}from"@suilend/sui-fe";import{TransactionType as Cd}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as xd,LENDING_MARKET_TYPE as Dd,SuilendClient as ts}from"@suilend/sdk";import{TransactionType as Ee}from"@msafe/sui3-utils";import{fromBase64 as ul,toHex as ml}from"@mysten/bcs";import{normalizeStructTag as an}from"@mysten/sui/utils";import{MAX_U64 as We}from"@suilend/sui-fe";import pl from"bignumber.js";var _a=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimTransaction())return this.decodeClaim();if(this.isClaimAndDepositTransaction())return this.decodeClaimAndDeposit();throw new Error("Unknown transaction type")}get inputs(){return console.log("this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("this.transaction.getData().commands",this.transaction.getData().commands),this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasClaimTransactionMoveCallCommands(){return!!this.getMoveCallCommand("claim_rewards")}isDepositTransaction(){return!this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity_request")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow_request")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimTransaction(){return this.hasClaimTransactionMoveCallCommands()&&!this.hasDepositTransactionMoveCallCommands()}isClaimAndDepositTransaction(){return this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}decodeDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("lending_market::MintEvent"))},t=an(e.MintEvent.parsedJson.coin_type.name),n=e.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",t,n),{txType:Ee.Other,type:"deposit",intentionData:{coinType:t,value:n}}}decodeWithdraw(){let e={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},t={RedeemEvent:this.simResult.events.find(d=>d.type.includes("lending_market::RedeemEvent"))},n=an(t.RedeemEvent.parsedJson.coin_type.name),o=t.RedeemEvent.parsedJson.liquidity_amount;console.log("Decoder.decodeWithdraw",n,o);let i=e.withdraw_ctokens.MoveCall.arguments[4].Input,s=new pl(ml(ul(this.inputs[i].Pure.bytes)),16).toString(),l=s===We.toString();return console.log("decodeWithdraw - isMax:",l,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",We.toString()),l&&(o=We.toString()),{txType:Ee.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let e={borrow_request:this.getMoveCallCommand("borrow_request")},t={BorrowEvent:this.simResult.events.find(d=>d.type.includes("lending_market::BorrowEvent"))},n=an(t.BorrowEvent.parsedJson.coin_type.name),o=`${+t.BorrowEvent.parsedJson.liquidity_amount-+t.BorrowEvent.parsedJson.origination_fee_amount}`;console.log("Decoder.decodeBorrow",n,o);let i=e.borrow_request.MoveCall.arguments[4].Input,s=new pl(ml(ul(this.inputs[i].Pure.bytes)),16).toString(),l=s===We.toString();return console.log("decodeBorrow - isMax:",l,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",We.toString()),l&&(o=We.toString()),{txType:Ee.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let e={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},t=an(e.RepayEvent.parsedJson.coin_type.name),n=e.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",t,n),{txType:Ee.Other,type:"repay",intentionData:{coinType:t,value:n}}}decodeClaim(){let e={ClaimReward:this.simResult.events.filter(n=>n.type.includes("lending_market::ClaimReward"))},t={};for(let n=0;n<e.ClaimReward.length;n++){let o=e.ClaimReward[n],i=an(o.parsedJson.coin_type.name),s=o.parsedJson.liquidity_amount;t[i]=`${+(t[i]??"0")+ +s}`}return console.log("Decoder.decodeClaimRewards",t),{txType:Ee.Other,type:"claim",intentionData:{value:t}}}decodeClaimAndDeposit(){return{txType:Ee.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as dd}from"@mysten/sui/transactions";import pd from"sort-keys-recursive";var _t=class{constructor(e){this.data=e}serialize(){return JSON.stringify(pd(this.data))}};var La=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("BorrowIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new dd;return await i.borrowAndSendToUser(o.address,s.id,l.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("BorrowIntention.fromData",t),new a(t)}};import{Transaction as bd}from"@mysten/sui/transactions";import{normalizeStructTag as fd}from"@mysten/sui/utils";import{Side as rn}from"@suilend/sdk";import{isSendPoints as hd}from"@suilend/sui-fe";import gd from"bignumber.js";var yd=(a,e)=>{let t={[rn.DEPOSIT]:[],[rn.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[rn.DEPOSIT,rn.BORROW].forEach(o=>{let i=o===rn.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,s=e.userRewardManagers.find(l=>l.poolRewardManagerId===i.id);s&&(t[o]=i.poolRewards.map((l,d)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(d),rewardCoinType:fd(l.coinType.name),side:o})).filter(l=>!hd(l.rewardCoinType)&&!!s.rewards[Number(l.rewardIndex)]&&new gd(s.rewards[Number(l.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},ja=yd;var Ua=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("ClaimIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new bd;return i.claimRewardsAndSendToUser(o.address,s.id,ja(i,l),d),d}static fromData(t){return console.log("ClaimIntention.fromData",t),new a(t)}};import{Transaction as Td}from"@mysten/sui/transactions";var qa=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("ClaimAndDepositIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new Td;return i.claimRewardsAndDeposit(o.address,s.id,ja(i,l),d),d}static fromData(t){return console.log("ClaimAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Sd}from"@mysten/sui/transactions";var Fa=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;console.log("DepositIntention.build",n,o,i,s,l);let d=new Sd;return await i.depositIntoObligation(o.address,this.data.coinType,this.data.value,d,s?.id),d}static fromData(t){return console.log("DepositIntention.fromData",t),new a(t)}};import{Transaction as Id}from"@mysten/sui/transactions";var Ka=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("RepayIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new Id;return await i.repayIntoObligation(o.address,l.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("RepayIntention.fromData",t),new a(t)}};import{Transaction as wd}from"@mysten/sui/transactions";var Va=class a extends _t{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:l}=t;if(console.log("WithdrawIntention.build",n,o,i,s,l),!s||!l)throw new Error("Obligation not found");let d=new wd;return await i.withdrawAndSendToUser(o.address,s.id,l.id,this.data.coinType,this.data.value,d),d}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};var $a=async(a,e)=>{let t=await ts.initialize(xd,Dd,a),n=await ts.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(i=>ts.getObligation(i.obligationId,t.lendingMarket.$typeArgs,a)));return console.log("XXX getUtils - suilendClient:",t,"obligations:",o,"obligationOwnerCaps:",n),{suilendClient:t,obligationOwnerCaps:n,obligations:o}},Ha=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await $a(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SuilendAppHelper.deserialize - simResult:",i,"utils:",this.utils,"suiClient:",n);let l=new _a(t,i).decode();return{txType:Cd.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await $a(i,s));let l;switch(n){case"deposit":l=Fa.fromData(o);break;case"withdraw":l=Va.fromData(o);break;case"borrow":l=La.fromData(o);break;case"repay":l=Ka.fromData(o);break;case"claim":l=Ua.fromData(o);break;case"claimAndDeposit":l=qa.fromData(o);break;default:throw new Error("not implemented")}let d=window.localStorage.getItem("obligationId"),b=this.utils.obligations?.find(C=>C.id===d)??this.utils.obligations?.[0],I=this.utils.obligationOwnerCaps?.find(C=>C.obligationId===b?.id);return l.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,obligationOwnerCap:I,obligation:b})}};var es=async(a,e)=>{let t=await $a(a,e),n=await fetch(`${kd}/springsui/lst-info`),o=await n.json();if(n?.statusCode===500)throw new Error("Failed to fetch SpringSui LST data");let s=Object.fromEntries(Object.values(o).map(l=>[l.LIQUID_STAKING_INFO.type,l.LIQUID_STAKING_INFO]));return{...t,LIQUID_STAKING_INFO_MAP:s}};var Xa=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isStakeTransaction())return this.decodeStake();if(this.isStakeAndDepositTransaction())return this.decodeStakeAndDeposit();if(this.isConvertTransaction())return this.decodeConvert();if(this.isConvertAndDepositTransaction())return this.decodeConvertAndDeposit();if(this.isUnstakeTransaction())return this.decodeUnstake();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}hasSuilendDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasMintMoveCallCommands(){return!!this.getMoveCallCommand("mint")}hasRedeemMoveCallCommands(){return!!this.getMoveCallCommand("redeem")}isStakeTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isStakeAndDepositTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isConvertTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isConvertAndDepositTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isUnstakeTransaction(){return!this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}decodeStake(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=be(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStake",n),{txType:sn.Other,type:"stake",intentionData:{amount:n,outCoinType:t}}}decodeStakeAndDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=be(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStakeAndDeposit",n),{txType:sn.Other,type:"stakeAndDeposit",intentionData:{amount:n,outCoinType:t}}}decodeConvert(){let e={RedeemEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::MintEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=be(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvert",o),{txType:sn.Other,type:"convert",intentionData:{amount:o,inCoinType:t,outCoinType:n}}}decodeConvertAndDeposit(){let e={RedeemEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(i=>i.type.includes("liquid_staking::MintEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=be(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvertAndDeposit",o),{txType:sn.Other,type:"convertAndDeposit",intentionData:{amount:o,inCoinType:t,outCoinType:n}}}decodeUnstake(){let e={RedeemEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::RedeemEvent"))},t=be(e.RedeemEvent.parsedJson.event.typename.name),n=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeUnstake",n),{txType:sn.Other,type:"unstake",intentionData:{amount:n,inCoinType:t}}}};import{Transaction as Md}from"@mysten/sui/transactions";import{LstClient as dl,convertLstsAndRebalanceAndSendToUser as Od}from"@suilend/springsui-sdk";import Ad from"sort-keys-recursive";var Vt=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Ad(this.data))}};var za=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("ConvertIntention.build",n,o,i,s,l,d);let b=await dl.initialize(n,Object.values(s).find(x=>x.type===this.data.inCoinType)),I=await dl.initialize(n,Object.values(s).find(x=>x.type===this.data.outCoinType)),C=new Md;return Od(b,I,C,o.address,this.data.amount),C}static fromData(t){return console.log("ConvertIntention.fromData",t),new a(t)}};import{Transaction as Pd}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Rd,sendObligationToUser as Bd}from"@suilend/sdk";import{LstClient as fl,convertLstsAndRebalance as Ed}from"@suilend/springsui-sdk";var Ga=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("ConvertAndDepositIntention.build",n,o,i,s,l,d);let b=await fl.initialize(n,Object.values(s).find(P=>P.type===this.data.inCoinType)),I=await fl.initialize(n,Object.values(s).find(P=>P.type===this.data.outCoinType)),C=new Pd,{obligationOwnerCapId:x,didCreate:D}=Rd(i,C,l),k=Ed(b,I,C,o.address,this.data.amount);return i.deposit(k,this.data.outCoinType,x,C),D&&Bd(x,o.address,C),C}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Wd}from"@mysten/sui/transactions";import{LstClient as Nd}from"@suilend/springsui-sdk";var Qa=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("StakeIntention.build",n,o,i,s,l,d);let b=await Nd.initialize(n,Object.values(s).find(C=>C.type===this.data.outCoinType)),I=new Wd;return b.mintAmountAndRebalanceAndSendToUser(I,o.address,this.data.amount),I}static fromData(t){return console.log("StakeIntention.fromData",t),new a(t)}};import{Transaction as _d}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Ld,sendObligationToUser as jd}from"@suilend/sdk";import{LstClient as Ud}from"@suilend/springsui-sdk";var Ja=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("StakeAndDepositIntention.build",n,o,i,s,l,d);let b=await Ud.initialize(n,Object.values(s).find(k=>k.type===this.data.outCoinType)),I=new _d,{obligationOwnerCapId:C,didCreate:x}=Ld(i,I,l),D=b.mintAmountAndRebalance(I,o.address,this.data.amount);return i.deposit(D,this.data.outCoinType,C,I),x&&jd(C,o.address,I),I}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new a(t)}};import{Transaction as qd}from"@mysten/sui/transactions";import{LstClient as Fd}from"@suilend/springsui-sdk";var Ya=class a extends Vt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:l,obligation:d}=t;console.log("UnstakeIntention.build",n,o,i,s,l,d);let b=await Fd.initialize(n,Object.values(s).find(C=>C.type===this.data.inCoinType)),I=new qd;return b.redeemAmountAndRebalanceAndSendToUser(I,o.address,this.data.amount),I}static fromData(t){return console.log("UnstakeIntention.fromData",t),new a(t)}};var Za=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await es(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SpringSuiAppHelper.deserialize",i);let l=new Xa(t,i).decode();return{txType:Kd.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await es(i,s));let l;switch(n){case"stake":l=Qa.fromData(o);break;case"stakeAndDeposit":l=Ja.fromData(o);break;case"convert":l=za.fromData(o);break;case"convertAndDeposit":l=Ga.fromData(o);break;case"unstake":l=Ya.fromData(o);break;default:throw new Error("not implemented")}return l.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,LIQUID_STAKING_INFO_MAP:this.utils.LIQUID_STAKING_INFO_MAP,obligationOwnerCap:this.utils.obligationOwnerCaps?.[0],obligation:this.utils.obligations?.[0]})}};import{TransactionType as Xd}from"@msafe/sui3-utils";import{TransactionType as hl}from"@msafe/sui3-utils";var ti=class{constructor(e,t){this.transaction=e;this.simResult=t}decode(){if(this.isMintTransaction()){let e=this.getLiquidityChangeEvent("MintEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeMint(t)}if(this.isRedeemTransaction()){let e=this.getLiquidityChangeEvent("RedeemEvent");if(!e)throw new Error("No liquidity change event found. Unable to decode transaction.");let t=e.parsedJson;return console.log("Decoder event data - ",t),this.decodeRedeem(t)}throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getLiquidityChangeEvent(e){return this.simResult.events.find(t=>this.isLiquidityChangeEventType(t.type,e))}isLiquidityChangeEventType(e,t){return e.includes(t)}isMintTransaction(){return!!this.getMoveCallCommand("mint")}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(e){let{event:{sui_amount_in:t}}=e;return console.log("Decoder.decodeMint",t),{txType:hl.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:hl.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as $d}from"@alphafi/stsui-sdk";var ei=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},l=await new $d(i).mint(o,n.address);return l.setGasBudget(1e8),l}static fromData(t){return console.log("MintIntention.fromData",t),new a(t)}};import{LST as Hd}from"@alphafi/stsui-sdk";var ni=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},l=await new Hd(i).redeem(o,n.address);return l.setGasBudget(1e8),l}static fromData(t){return console.log("RedeemIntention.fromData",t),new a(t)}};var oi=class{application="stsui";supportSDK="@mysten/sui";async deserialize(e){let{transaction:t,suiClient:n}=e,o=await n.devInspectTransactionBlock({sender:t.getData().sender,transactionBlock:t});console.log("StSuiHelper Sim result - ",o);let s=new ti(t,o).decode();return{txType:Xd.Other,txSubType:s.type,intentionData:s.intentionData}}async build(e){let{account:t}=e;console.log("StSui build transaction type",e.txSubType);let n;switch(e.txSubType){case"mint":n=ei.fromData(e.intentionData);break;case"redeem":n=ni.fromData(e.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:t})}};import{TransactionType as gf}from"@msafe/sui3-utils";import{TurbosSdk as yf}from"turbos-clmm-sdk";import{TransactionType as Lt}from"@msafe/sui3-utils";import{fromBase64 as Ne}from"@mysten/bcs";import{bcs as _e}from"@mysten/sui/bcs";import{BN as Gd}from"turbos-clmm-sdk";var Ht={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},Xt={PackageId:"0xdee9"};var Qd=(a,e,t,n)=>{if(a===1)switch(n.findIndex(s=>s===e)){case 0:return[!0,!0];case 1:return[!0,!1];case 2:return[!1,!0];case 3:return[!1,!1];default:throw new Error(`not target: ${e}`)}switch(t.findIndex(i=>i===e)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${e}`)}},ai=class{constructor(e,t,n){this.txb=e;this.turbosSdk=t;this.config=n}get transactions(){return this.txb.getData().commands}get swap1Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b`,`${this.config.PackageId}::swap_router::swap_b_a`]}get swap2Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b_b_c`,`${this.config.PackageId}::swap_router::swap_a_b_c_b`,`${this.config.PackageId}::swap_router::swap_b_a_b_c`,`${this.config.PackageId}::swap_router::swap_b_a_c_b`]}async decode(e){if(this.isSwapTransaction())return this.decodeSwap();if(this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isIncreaseLiquidityTransaction())return this.decodeIncreaseLiquidity(e);if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity(e);if(this.isDecreaseLiquidityTransaction())return this.decodeDecreaseLiquidity(e);if(this.isRemoveLiquidityWithReturnTransaction())return this.decodeRemoveLiquidityWithReturn(e);if(this.isDecreaseLiquidityWithReturnTransaction())return this.decodeDecreaseLiquidityWithReturn(e);if(this.isCollectFeeTransaction())return this.decodeCollectFee();if(this.isCollectRewardTransaction())return this.decodeCollectReward();if(this.isBurnTransaction())return this.decodeBurn();if(this.isPrixClaimTransaction())return this.decodePrixClaim();if(this.isPrixJoinTransaction())return this.decodePrixJoin();if(this.isSwapExactBaseForQuoteTransaction())return this.decodeSwapExactBaseForQuote();if(this.isSwapExactQuoteForBaseTransaction())return this.decodeSwapExactQuoteForBase();throw new Error("Unknown transaction type")}getMoveCallTransaction(e){return this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===e:!1)}getMoveCallsTransaction(e){return e.every(t=>this.transactions.find(n=>n.$kind==="MoveCall"?`${n.MoveCall.package}::${n.MoveCall.module}::${n.MoveCall.function}`===t:!1))}getSwapMoveCallTransaction(e){return this.transactions.find(t=>{if(t.$kind==="MoveCall"){let n=`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`;return!!e.includes(n)}return!1})}isSwapTransaction(){return!!this.getSwapMoveCallTransaction([...this.swap1Layer,...this.swap2Layer])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity`)}isDecreaseLiquidityWithReturnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity_with_return_`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::burn`)}isPrixJoinTransaction(){return!!this.getMoveCallTransaction(`${Ht.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${Ht.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isRemoveLiquidityWithReturnTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity_with_return_`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${Xt.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${Xt.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let e=this.transactions.find(D=>D.$kind==="MoveCall"),t=0,n=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;console.log(n,"moveCallTarget"),this.swap2Layer.includes(n)&&(t=1);let o=Qd(t,n,this.swap1Layer,this.swap2Layer),i=o.map((D,k)=>{let P=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(k)),U=this.helper.decodeInputU128(this.helper.getInputsIndex(4+k+t)),K=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new Gd(U.toString()));return{pool:P,a2b:D,nextTickIndex:K}}),s=o[0]||t===1?e.MoveCall.typeArguments[0]:e.MoveCall.typeArguments[1],l=t===1?e.MoveCall.typeArguments[4]:o[0]?e.MoveCall.typeArguments[1]:e.MoveCall.typeArguments[0],d=this.helper.decodeInputAddress(this.helper.getInputsIndex(6+2*t)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(7+2*t)),I=this.helper.decodeInputBool(this.helper.getInputsIndex(5+2*t)),C=this.helper.decodeInputU64(this.helper.getInputsIndex(2+t)),x=this.helper.decodeInputU64(this.helper.getInputsIndex(3+t));return{txType:Lt.Other,type:"Swap",intentionData:{routes:i,coinTypeA:s,coinTypeB:l,address:d,amountA:I?C:x,amountB:I?x:C,amountSpecifiedIsInput:I,slippage:"0.1",deadline:b}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeInputAddress(this.helper.getInputsIndex(12)),n=this.helper.decodeInputU64(this.helper.getInputsIndex(8)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(9)),i=this.helper.decodeInputU32(this.helper.getInputsIndex(4)),s=this.helper.decodeInputBool(this.helper.getInputsIndex(5)),l=this.helper.decodeInputU32(this.helper.getInputsIndex(6)),d=this.helper.decodeInputBool(this.helper.getInputsIndex(7)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(13));return{txType:Lt.Other,type:"AddLiquidity",intentionData:{pool:e,slippage:30,address:t,amountA:n,amountB:o,tickLower:s?-i:i,tickUpper:d?-l:l,deadline:b}}}decodeIncreaseLiquidity(e){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),n=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(4)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(6)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(9));return{txType:Lt.Other,type:"IncreaseLiquidity",intentionData:{pool:t,slippage:30,address:e,amountA:o,amountB:i,nft:n,deadline:s}}}decodeDecreaseLiquidity(e){console.log(this.helper,"decodeDecreaseLiquidity this.helper");let t=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),n=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(3)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(5)),l=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:Lt.Other,type:"DecreaseLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,deadline:l}}}decodeDecreaseLiquidityWithReturn(e){console.log(this.helper,"decodeDecreaseLiquidityWithReturn this.helper");let t=this.helper.decodeSharedObjectId(0),n=this.helper.decodeOwnedObjectId(2),o=this.helper.decodeInputU64(3),i=this.helper.decodeInputU64(4),s=this.helper.decodeInputU64(5),l=this.helper.decodeInputU64(6);return{txType:Lt.Other,type:"DecreaseLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,deadline:l}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(5)),o=this.helper.decodeInputU64(this.helper.getInputsIndex(3)),i=this.helper.decodeInputU64(this.helper.getInputsIndex(4)),s=this.helper.decodeInputU64(this.helper.getInputsIndex(6));return{txType:Lt.Other,type:"CollectFee",intentionData:{pool:e,address:n,collectAmountA:o,collectAmountB:i,nft:t,deadline:s}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2)),n=this.helper.decodeInputAddress(this.helper.getInputsIndex(6)),o=[0,0,0];this.collectRewardHelper.forEach(s=>{let l=s.decodeInputU64(s.getInputsIndex(4)),d=s.decodeInputU64(s.getInputsIndex(5));o[l]=d});let i=this.helper.decodeInputU64(7);return{txType:Lt.Other,type:"CollectReward",intentionData:{pool:e,address:n,rewardAmounts:o,nft:t,deadline:i}}}decodeBurn(){console.log(this.helper,"decodeBurn this.helper");let e=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(0)),t=this.helper.decodeOwnedObjectId(this.helper.getInputsIndex(2));return{txType:Lt.Other,type:"Burn",intentionData:{pool:e,nft:t}}}decodeRemoveLiquidity(e){console.log(this.helper,"decodeRemoveLiquidity this.helper");let t=30,n=this.decreaseLiquidityHelper.decodeSharedObjectId(this.decreaseLiquidityHelper.getInputsIndex(0)),o=this.decreaseLiquidityHelper.decodeOwnedObjectId(this.decreaseLiquidityHelper.getInputsIndex(2)),i=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(3)),s=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(4)),l=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(5)),d=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(6)),b=[0,0,0];this.collectRewardHelper.forEach(x=>{let D=x.decodeInputU64(x.getInputsIndex(4)),k=x.decodeInputU64(x.getInputsIndex(5));b[D]=k});let I=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(3))||0,C=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(4))||0;return{txType:Lt.Other,type:"RemoveLiquidity",intentionData:{pool:n,decreaseLiquidity:i,nft:o,amountA:(s/(100-t)*100).toFixed(0),amountB:(l/(100-t)*100).toFixed(0),slippage:t,address:e,collectAmountA:I,collectAmountB:C,rewardAmounts:b,deadline:d}}}decodeRemoveLiquidityWithReturn(e){console.log(this.helper,"decodeRemoveLiquidityWithReturn this.helper");let t=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeOwnedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),i=this.decreaseLiquidityHelper.decodeInputU64(4),s=this.decreaseLiquidityHelper.decodeInputU64(5),l=this.decreaseLiquidityHelper.decodeInputU64(6),d=this.collectRewardHelper.map(C=>C.decodeInputU64(5)),b=this.collectFeeHelper.decodeInputU64(3)||0,I=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:Lt.Other,type:"removeLiquidityWithReturn",intentionData:{pool:t,decreaseLiquidity:o,nft:n,amountA:i,amountB:s,slippage:10,address:e,collectAmountA:b,collectAmountB:I,rewardAmounts:d,deadline:l}}}decodePrixClaim(){return{txType:Lt.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:Lt.Other,type:"PrixJoin",intentionData:{}}}decodeSwapExactBaseForQuote(){let e=this.swapExactBaseForQuoteHelper.decodeSharedObjectId(0),t=this.swapExactBaseForQuoteHelper.decodeInputU64(3),n=this.swapExactBaseForQuoteHelper.shortTypeArg(0),o=this.swapExactBaseForQuoteHelper.shortTypeArg(1);return{txType:Lt.Other,type:"SwapExactBaseForQuote",intentionData:{poolId:e,amountIn:t,token1:n,token2:o}}}decodeSwapExactQuoteForBase(){let e=this.swapExactQuoteForBaseHelper.decodeSharedObjectId(0),t=this.swapExactQuoteForBaseHelper.decodeInputU64(3),n=this.swapExactQuoteForBaseHelper.shortTypeArg(0),o=this.swapExactQuoteForBaseHelper.shortTypeArg(1);return{txType:Lt.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:e,amountIn:t,token1:n,token2:o}}}get helper(){let e=this.transactions.find(t=>{if(t.$kind==="MoveCall"){let n=`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`;return n!=="0x2::coin::zero"&&n!=="0x0000000000000000000000000000000000000000000000000000000000000002::coin::zero"}return!1});return new me(e,this.txb)}get collectRewardHelper(){return this.transactions.filter(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::collect_reward`:!1).map(t=>new me(t,this.txb))}get collectFeeHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::collect`:!1);return new me(e,this.txb)}get decreaseLiquidityHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${this.config.PackageId}::position_manager::decrease_liquidity`:!1);return new me(e,this.txb)}get swapExactBaseForQuoteHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Xt.PackageId}::clob_v2::swap_exact_base_for_quote`:!1);return new me(e,this.txb)}get swapExactQuoteForBaseHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Xt.PackageId}::clob_v2::swap_exact_quote_for_base`:!1);return new me(e,this.txb)}},me=class{constructor(e,t){this.moveCall=e;this.txb=t}get inputs(){return this.txb.getData().inputs}getInputsIndex(e){return this.moveCall.MoveCall.arguments[e].Input}decodeSharedObjectId(e){return this.inputs[e].Object?.SharedObject?.objectId||this.inputs[e].UnresolvedObject.objectId}decodeOwnedObjectId(e){return this.inputs[e].Object?.ImmOrOwnedObject?.objectId||this.inputs[e].UnresolvedObject.objectId}decodeInputU128(e){return Number(_e.u128().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputU64(e){return Number(_e.u64().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputU32(e){return Number(_e.u32().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputU8(e){return Number(_e.u8().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes))))}decodeInputAddress(e){return _e.Address.parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes)))}decodeInputBool(e){return _e.bool().parse(Uint8Array.from(Ne(this.inputs[e].Pure.bytes)))}shortTypeArg(e){return this.moveCall.MoveCall.typeArguments[e]}txArg(e){return this.moveCall.MoveCall.arguments[e]}};import{TurbosSdk as Jd}from"turbos-clmm-sdk";var ii=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Jd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,tickLower:b,tickUpper:I,deadline:C,txb:x}=this.data;return n.pool.addLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,tickLower:b,tickUpper:I,deadline:C,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as Yd}from"turbos-clmm-sdk";var ri=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Yd(t.network.replace("sui:",""),t.suiClient),{pool:o,nft:i,txb:s}=this.data;return n.position.burn({pool:o,nft:i,txb:s})}static fromData(t){return new a(t)}};import{TurbosSdk as Zd}from"turbos-clmm-sdk";var si=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new Zd(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,collectAmountA:l,collectAmountB:d,deadline:b,txb:I}=this.data;return n.pool.collectFee({pool:o,address:i,collectAmountA:l,collectAmountB:d,nft:s,deadline:b,txb:I})}static fromData(t){return new a(t)}};import{TurbosSdk as tf}from"turbos-clmm-sdk";var ci=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new tf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,rewardAmounts:l,deadline:d,txb:b}=this.data;return n.pool.collectReward({pool:o,address:i,rewardAmounts:l,nft:s,deadline:d,txb:b})}static fromData(t){return new a(t)}};import{TurbosSdk as ef}from"turbos-clmm-sdk";var li=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new ef(t.network.replace("sui:",""),t.suiClient),{fee:o,address:i,tickLower:s,tickUpper:l,sqrtPrice:d,slippage:b,coinTypeA:I,coinTypeB:C,amountA:x,amountB:D,deadline:k,txb:P}=this.data;return n.pool.createPool({fee:o,amountA:x,amountB:D,address:i,tickLower:s,tickUpper:l,sqrtPrice:d,slippage:b,coinTypeA:I,coinTypeB:C,deadline:k,txb:P})}static fromData(t){return new a(t)}};import{TurbosSdk as nf}from"turbos-clmm-sdk";var ui=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new nf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,decreaseLiquidity:I,deadline:C,txb:x}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,decreaseLiquidity:I,deadline:C,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as of}from"turbos-clmm-sdk";var mi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new of(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,decreaseLiquidity:I,deadline:C}=this.data,{txb:x,coinA:D,coinB:k}=await n.pool.decreaseLiquidityWithReturn({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,decreaseLiquidity:I,deadline:C});return x.transferObjects([D,k],this.data.address),x}static fromData(t){return new a(t)}};import{TurbosSdk as af}from"turbos-clmm-sdk";var pi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new af(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:l,slippage:d,nft:b,deadline:I,txb:C}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:d,address:i,amountA:s,amountB:l,nft:b,deadline:I,txb:C})}static fromData(t){return new a(t)}};import{Transaction as rf}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as sf}from"@mysten/sui/utils";var di=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new rf;return n.moveCall({target:`${Ht.PackageId}::claim::claim`,typeArguments:[Ht.turbosCoinType],arguments:[n.object(Ht.Claim),n.object(sf)]}),n}static fromData(t){return new a(t)}};import{Transaction as cf}from"@mysten/sui/transactions";var fi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new cf;return n.moveCall({target:`${Ht.PackageId}::claim::join`,typeArguments:[Ht.turbosCoinType],arguments:[n.object(Ht.Claim)]}),n}static fromData(t){return new a(t)}};import{Transaction as lf}from"@mysten/sui/transactions";import{TurbosSdk as uf}from"turbos-clmm-sdk";var hi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new uf(t.network.replace("sui:",""),t.suiClient),o=new lf;return o=await n.pool.collectFee({txb:o,...this.data}),o=await n.pool.collectReward({txb:o,...this.data}),o=await n.pool.decreaseLiquidity({txb:o,...this.data}),o=await n.position.burn({txb:o,nft:this.data.nft,pool:this.data.pool}),o}static fromData(t){return new a(t)}};import{TurbosSdk as mf}from"turbos-clmm-sdk";var gi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new mf(t.network.replace("sui:",""),t.suiClient),{txb:o,coinA:i,coinB:s}=await n.pool.removeLiquidityWithReturn({...this.data});return o.transferObjects([i,s],this.data.address),o}static fromData(t){return new a(t)}};import{TurbosSdk as pf}from"turbos-clmm-sdk";var yi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new pf(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:i,coinTypeB:s,address:l,amountA:d,amountB:b,slippage:I,amountSpecifiedIsInput:C,deadline:x,txb:D}=this.data;return n.trade.swap({routes:o,coinTypeA:i,coinTypeB:s,address:l,amountA:d,amountB:b,amountSpecifiedIsInput:C,slippage:I,deadline:x,txb:D})}static fromData(t){return new a(t)}};import{TurbosSdk as ff}from"turbos-clmm-sdk";import{Transaction as gl}from"@mysten/sui/transactions";import{normalizeSuiObjectId as yl}from"@mysten/sui/utils";import{unstable_getObjectId as df}from"turbos-clmm-sdk";var cn=class{constructor(e){this.turbosSdk=e}async getCoinsData(e,t,n){let o=[],i;do i=await this.turbosSdk.provider.getCoins({owner:e,coinType:t,cursor:i?.nextCursor}),o.push(...i.data);while(i.hasNextPage);let s=[],l=0;return o.sort((d,b)=>Number(b.balance)-Number(d.balance)).some(d=>l>=n?!0:(l+=Number(d.balance),s.push(d),!1)),s}splitAndMergeCoin(e,t,n){if(!e||e.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(e[0].coinType)){let[s]=n.splitCoins(n.gas,[n.pure.u64(t)]);return[s,void 0]}let o=n.object(e[0].coinObjectId);e.length>1&&n.mergeCoins(o,e.slice(1).map(s=>n.object(s.coinObjectId)));let[i]=n.splitCoins(o,[n.pure.u64(t)]);return[i,o]}isSuiCoinAddress(e){return e.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(e){let t=await this.turbosSdk.provider.getOwnedObjects({owner:e,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${Xt.PackageId}::custodian_v2::AccountCap`}});return t.data[0]?.data?df(t.data[0].data):void 0}createAccount(e){let[t]=e.moveCall({typeArguments:[],target:`${Xt.PackageId}::clob_v2::create_account`,arguments:[]});return t}zero(e,t){return t.moveCall({typeArguments:[e],target:"0x2::coin::zero",arguments:[]})}};var bl=89,Tl=1e6,Sl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,l=new gl,d=new cn(s),b=await d.getCoinsData(i,t,o),[I,C]=d.splitAndMergeCoin(b,o,l);if(!I)throw new Error(`Not enough balance: ${t}`);let x=await d.IsAccountCap(i),D=x?l.object(x):d.createAccount(l),[k,P,U]=l.moveCall({typeArguments:[e,t],target:`${Xt.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[l.object(String(n)),l.pure.u64(bl),D,l.pure.u64(o),l.object(yl("0x6")),I]});return C&&l.transferObjects([C],l.pure.address(i)),l.transferObjects([k],l.pure.address(i)),l.transferObjects([P],l.pure.address(i)),x||l.transferObjects([D],l.pure.address(i)),l.setSenderIfNotSet(i),l.setGasBudget(Tl),l},Il=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,l=new gl,d=new cn(s),b=await d.getCoinsData(i,e,o),[I,C]=d.splitAndMergeCoin(b,o,l);if(!I)throw new Error(`Not enough balance: ${e}`);let x=await d.IsAccountCap(i),D=x?l.object(x):d.createAccount(l),k=d.zero(t,l),[P,U,K]=l.moveCall({typeArguments:[e,t],target:`${Xt.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[l.object(String(n)),l.pure.u64(bl),D,l.pure.u64(o),I,k,l.object(yl("0x6"))]});return C&&l.transferObjects([C],l.pure.address(i)),l.transferObjects([P],l.pure.address(i)),l.transferObjects([U],l.pure.address(i)),x||l.transferObjects([D],l.pure.address(i)),l.setSenderIfNotSet(i),l.setGasBudget(Tl),l};var bi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new ff(t.network.replace("sui:",""),t.suiClient);return await Il({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};import{TurbosSdk as hf}from"turbos-clmm-sdk";var Ti=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let n=new hf(t.network.replace("sui:",""),t.suiClient);return await Sl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};var Si=class{application="turbos";supportSDK="@mysten/sui";async deserialize(e){console.log(e,"input");let t=new yf(e.network.replace("sui:","")),n=await t.contract.getConfig(),{transaction:o,account:i}=e,l=await new ai(o,t,n).decode(i.address);return{txType:gf.Other,txSubType:l.type,intentionData:l.intentionData}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.intentionData,"intentionData");let i;switch(e.txSubType){case"CreatePool":i=li.fromData(e.intentionData);break;case"AddLiquidity":i=ii.fromData(e.intentionData);break;case"IncreaseLiquidity":i=pi.fromData(e.intentionData);break;case"DecreaseLiquidity":i=ui.fromData(e.intentionData);break;case"DecreaseLiquidityWithReturn":i=mi.fromData(e.intentionData);break;case"RemoveLiquidity":i=hi.fromData(e.intentionData);break;case"removeLiquidityWithReturn":i=gi.fromData(e.intentionData);break;case"CollectFee":i=si.fromData(e.intentionData);break;case"CollectReward":i=ci.fromData(e.intentionData);break;case"Burn":i=ri.fromData(e.intentionData);break;case"Swap":i=yi.fromData(e.intentionData);break;case"PrixJoin":i=fi.fromData(e.intentionData);break;case"PrixClaim":i=di.fromData(e.intentionData);break;case"SwapExactBaseForQuote":i=bi.fromData(e.intentionData);break;case"SwapExactQuoteForBase":i=Ti.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as xf}from"@msafe/sui3-utils";import{TransactionType as ns}from"@msafe/sui3-utils";import{bcs as wl}from"@mysten/sui.js/bcs";import{normalizeStructTag as Sf,normalizeSuiAddress as ln}from"@mysten/sui.js/utils";var bf={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},kt=bf;var Ii=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${kt.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${kt.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${kt.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:ns.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:ns.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:ns.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(kt.packageId));return new os(e,this.txb)}},os=class a{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return a.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return a.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return ln(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let n=this.getInputParam(e);return a.getPureInputValue(n,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let n=e.value.Pure;return wl.de(t,new Uint8Array(n))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return ln(e.value.Object.ImmOrOwned.objectId)}return ln(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return ln(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return ln(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let n=e.value.Pure;return wl.de(t,new Uint8Array(n))}typeArg(e){return Sf(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as If}from"@mysten/sui.js/transactions";var wi=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new If,{ticketId:o}=this.data;return n.moveCall({target:`${kt.packageId}::native_pool::burn_ticket`,arguments:[n.object(kt.poolObjectId),n.object(kt.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as wf}from"@mysten/sui.js/transactions";var Ci=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new wf,{amount:o}=this.data,[i]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${kt.packageId}::native_pool::stake`,arguments:[n.object(kt.poolObjectId),n.object(kt.metadataObjectId),n.object(kt.systemStateObjectId),i]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Cf}from"@mysten/sui.js/transactions";var xi=class a extends Nt{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let n=new Cf,{amount:o}=this.data,i=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[s,...l]=i.filter(I=>I.coinType.split("::")[0]===kt.certType.split("::")[0]),d=n.object(s.coinObjectId);l.length&&n.mergeCoins(d,l.map(I=>n.object(I.coinObjectId)));let b=n.splitCoins(n.object(s.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${kt.packageId}::native_pool::unstake`,arguments:[n.object(kt.poolObjectId),n.object(kt.metadataObjectId),n.object(kt.systemStateObjectId),b]}),n}static fromData(t){return new a(t)}};var Di=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(e){let{transactionBlock:t}=e,o=new Ii(t).decode();return{txType:xf.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case"Stake":o=Ci.fromData(e.intentionData);break;case"UnStake":o=xi.fromData(e.intentionData);break;case"ClaimTicket":o=wi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as jf}from"@msafe/sui3-utils";import{asIntN as Cl}from"@cetusprotocol/common-sdk";import{TransactionType as pe}from"@msafe/sui3-utils";import{fromBase64 as un}from"@mysten/bcs";import{bcs as mn}from"@mysten/sui/bcs";var ki=class{constructor(e,t){this.transaction=e;this.appContext=t}async decode(){if(this.isOpenPositionTx())return this.decodeOpenPositionTx();if(this.isClosePositionTx())return this.decodeClosePositionTx();if(this.isProvideLiquidityTx())return this.decodeProvideLiquidityTx();if(this.isRemoveLiquidityTx())return this.decodeRemoveLiquidityTx();if(this.isCollectRewardsAndFeeTx())return this.decodeCollectRewardsAndFeeTx();if(this.isCollectRewardsTx())return this.decodeCollectRewardsTx();if(this.isCollectFeeTx())return this.decodeCollectFeeTx();if(this.isAggregator7KSwapTx())return this.decodeAggregator7KSwapTx();throw new Error("Unknown transaction type")}decodeOpenPositionTx(){let e=this.getMoveCallCommand("open_position"),t=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:pe.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,1)),lowerTick:Number(Cl(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(Cl(BigInt(this.getU32(this.getInputIndex(e,3)))).toString()),tokenAmount:this.getU64(this.getInputIndex(t,6)),maxAmountTokenA:this.getU64(this.getInputIndex(t,7)),maxAmountTokenB:this.getU64(this.getInputIndex(t,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(t,9))}}}decodeClosePositionTx(){let e=this.getMoveCallCommand("close_position"),t=this.getCollectRewardCallData();return{txType:pe.Other,type:"ClosePosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),transferTokensTo:this.getAddress(this.getInputIndex(e,4)),collectRewardTokens:t.map(n=>n.rewardCoinType),collectFeeTokens:this.getTypeArguments(e)}}}decodeProvideLiquidityTx(){let e=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:pe.Other,type:"ProvideLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),tokenAmount:this.getU64(this.getInputIndex(e,6)),maxAmountTokenA:this.getU64(this.getInputIndex(e,7)),maxAmountTokenB:this.getU64(this.getInputIndex(e,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(e,9))}}}decodeRemoveLiquidityTx(){let e=this.getMoveCallCommand("remove_liquidity");return{txType:pe.Other,type:"RemoveLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),liquidity:this.getU128(this.getInputIndex(e,4)),maxAmountTokenA:this.getU64(this.getInputIndex(e,5)),maxAmountTokenB:this.getU64(this.getInputIndex(e,6)),transferTokensTo:this.getAddress(this.getInputIndex(e,7)),...this.collectTokens()}}}decodeCollectRewardsTx(){let e=this.getCollectRewardCallData();return{txType:pe.Other,type:"CollectRewards",intentionData:{pool:e[0].pool,position:e[0].position,collectRewardTokens:e.map(t=>t.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:pe.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let e=this.getFeeCallData();return{txType:pe.Other,type:"CollectRewardsAndFee",intentionData:{pool:e.pool,position:e.position,...this.collectTokens()}}}getFeeCallData(){let e=this.getMoveCallCommand("collect_fee");return{pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),collectFeeTokens:this.getTypeArguments(e)}}getCollectRewardCallData(){let e=[];return this.commands.forEach(t=>{t.$kind==="MoveCall"&&t.MoveCall.function==="collect_reward"&&e.push({pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),rewardCoinType:this.getTypeArguments(t)[2]})}),e}async decodeAggregator7KSwapTx(){let{appContext:e}=this;return console.log("appContext",e),{txType:pe.Other,type:"Aggregator7KSwap",intentionData:{tokenIn:e.txParams.tokenIn,tokenOut:e.txParams.tokenOut,amountIn:String(e.txParams.amountIn),maxSlippage:String(e.txParams.maxSlippage)}}}collectTokens(){let e=this.getFeeCallData(),t=this.getCollectRewardCallData();return{collectFeeTokens:e.collectFeeTokens,collectRewardTokens:t.map(n=>n.rewardCoinType)}}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}isOpenPositionTx(){return!!this.getMoveCallCommand("open_position")}isProvideLiquidityTx(){return!!this.getMoveCallCommand("provide_liquidity_with_fixed_amount")}isRemoveLiquidityTx(){return!!this.getMoveCallCommand("remove_liquidity")}isCollectRewardsTx(){return!!this.getMoveCallCommand("collect_reward")}isCollectFeeTx(){return!!this.getMoveCallCommand("collect_fee")}isCollectRewardsAndFeeTx(){return this.isCollectRewardsTx()&&this.isCollectFeeTx()}isClosePositionTx(){return!!this.getMoveCallCommand("close_position")}isAggregator7KSwapTx(){return!!this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function.toLowerCase().includes("settle"))}getMoveCallCommand(e){return this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.function===e)}getSharedObjectID(e){return this.inputs[e].Object.SharedObject.objectId}getOwnedObjectID(e){return this.inputs[e].Object.ImmOrOwnedObject.objectId}getU32(e){return String(mn.u32().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes))))}getU64(e){return mn.u64().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getU128(e){return mn.u128().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getBoolean(e){return mn.bool().parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getAddress(e){return mn.Address.parse(Uint8Array.from(un(this.inputs[e].Pure.bytes)))}getTypeArguments(e){return e.MoveCall.typeArguments||[]}getInputIndex(e,t){return e.MoveCall.arguments[t].Input}};import{TransactionType as Pf}from"@msafe/sui3-utils";import{buildTx as vf,getQuote as Af}from"@bluefin-exchange/bluefin7k-aggregator-sdk";import{BN as Te,ClmmPoolUtil as Mf}from"@firefly-exchange/library-sui";import{Decimal as Of}from"turbos-clmm-sdk";import{SuiClient as Df}from"@firefly-exchange/library-sui";import{OnChainCalls as kf}from"@firefly-exchange/library-sui/spot";var xl={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x67b34b728c4e28e704dcfecf7c5cf55c7fc593b6c65c20d1836d97c209c1928a"}},ne=(a,e)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let t=new Df({url:xl.rpc});return new kf(t,xl.objects,{address:e.address,isUIWallet:!1})};var At=class{static async OpenPosition(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool),s=this.prototype.buildLiqInput(i,{...e,slippage:0});return await o.openPositionWithFixedAmount(i,e.lowerTick,e.upperTick,s,{returnTx:!0,sender:t.address})}static async provideLiquidity(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool),s=this.prototype.buildLiqInput(i,e);return await o.provideLiquidityWithFixedAmount(i,e.position,s,{returnTx:!0,sender:t.address})}static async removeLiquidity(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.removeLiquidity(i,e.position,{liquidityAmount:new Te(e.liquidity),tokenMaxA:new Te(e.maxAmountTokenA),tokenMaxB:new Te(e.maxAmountTokenB)},{returnTx:!0,sender:t.address})}static async closePosition(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.closePosition(i,e.position,{returnTx:!0,sender:t.address})}static async collectRewards(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.collectRewards(i,e.position,{rewardCoinsType:e.collectRewardTokens,returnTx:!0,sender:t.address})}static async collectFee(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return await o.collectFee(i,e.position,{returnTx:!0,sender:t.address})}static async collectRewardsAndFee(e,t,n){let o=ne(n,t),i=await o.queryChain.getPool(e.pool);return console.log(e.position),await o.collectFeeAndRewards(i,e.position,{returnTx:!0,sender:t.address})}static async aggregator7KSwap(e,t,n){let o=ne(n,t),i=await Af({tokenIn:e.tokenIn.address,tokenOut:e.tokenOut.address,amountIn:new Of(e.amountIn).mul(10**e.tokenIn.decimals).toString()}),s=await vf({quoteResponse:i,accountAddress:t.address,slippage:e.maxSlippage,commission:{partner:"0x956d6ea2da156a037952964badc51f997cc5581c86a0e05f74049e6effab9347",commissionBps:0}});return s.tx.setSender(t.address),s.tx}buildLiqInput(e,t){return{...Mf.estLiquidityAndCoinAmountFromOneAmounts(t.lowerTick,t.upperTick,new Te(t.tokenAmount),t.isTokenAFixed,!0,0,new Te(e.current_sqrt_price)),tokenMaxA:new Te(t.maxAmountTokenA),tokenMaxB:new Te(t.maxAmountTokenB)}}};var vi=class a extends S{constructor(t){super(t);this.data=t}txType=Pf.Other;txSubType="Aggregator7KSwap";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.aggregator7KSwap(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Rf}from"@msafe/sui3-utils";var Ai=class a extends S{constructor(t){super(t);this.data=t}txType=Rf.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.closePosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Bf}from"@msafe/sui3-utils";var Mi=class a extends S{constructor(t){super(t);this.data=t}txType=Bf.Other;txSubType="CollectFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.collectFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ef}from"@msafe/sui3-utils";var Oi=class a extends S{constructor(t){super(t);this.data=t}txType=Ef.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.collectRewards(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Wf}from"@msafe/sui3-utils";var Pi=class a extends S{constructor(t){super(t);this.data=t}txType=Wf.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Nf}from"@msafe/sui3-utils";var Ri=class a extends S{constructor(t){super(t);this.data=t}txType=Nf.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.OpenPosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as _f}from"@msafe/sui3-utils";var Bi=class a extends S{constructor(t){super(t);this.data=t}txType=_f.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.provideLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Lf}from"@msafe/sui3-utils";var Ei=class a extends S{constructor(t){super(t);this.data=t}txType=Lf.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),At.removeLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};var Wi=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(e){console.log("Bluefin helper deserialize input: ",e);let{transaction:t,appContext:n}=e,i=await new ki(t,n).decode();return{txType:jf.Other,txSubType:i.type,intentionData:{appContext:e.appContext,...i.intentionData}}}async build(e){let{suiClient:t,account:n,network:o}=e;console.log(e.txSubType);let i;switch(e.txSubType){case"OpenPosition":i=Ri.fromData(e.intentionData);break;case"ProvideLiquidity":i=Bi.fromData(e.intentionData);break;case"RemoveLiquidity":i=Ei.fromData(e.intentionData);break;case"ClosePosition":i=Ai.fromData(e.intentionData);break;case"CollectFee":i=Mi.fromData(e.intentionData);break;case"CollectRewards":i=Oi.fromData(e.intentionData);break;case"CollectRewardsAndFee":i=Pi.fromData(e.intentionData);break;case"Aggregator7KSwap":i=vi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as dh}from"@msafe/sui3-utils";import{MmtSDK as zf}from"@mmt-finance/clmm-sdk";import{Transaction as Gf}from"@mysten/sui/transactions";var R=tu(kl());import{convertI32ToSigned as is,TickMath as Ml}from"@mmt-finance/clmm-sdk/dist/utils/math/tickMath";import Vf from"bignumber.js";var Uf="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",zt=a=>a!=="0x2::sui::SUI"?a:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",qf=async({suiClient:a,address:e,type:t})=>{let n,o=[],i=0;do{try{let s=await a.getCoins({owner:e,coinType:t,cursor:n,limit:50});o=o.concat(s.data),n=s.nextCursor,(!s.hasNextPage||i===8)&&(n=null)}catch(s){console.log(s),n=null}i++}while(n!==null);return o},Ff=(a,e)=>{let t=[],n=BigInt(0);for(let o of e)n<a&&!t.includes(o.objectId)&&(t.push(o.objectId),n+=BigInt(o.balance)),o.balance===BigInt(0)&&!t.includes(o.objectId)&&t.push(o.objectId);if(n>=a)return t;throw new Error("Insufficient balance")},Kf=(a,e,t,n)=>{if(a===Uf){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=Ff(t,e);o.length>1&&n.mergeCoins(n.object(o[0]),o.slice(1).map(s=>n.object(s)));let[i]=n.splitCoins(n.object(o[0]),[n.pure.u64(t)]);return i}};async function vl(a,e,t,n,o){let i=await qf({suiClient:a.rpcClient,address:e,type:t});return Kf(zt(t),i.map(l=>({balance:BigInt(l.balance),objectId:l.coinObjectId})),n,o)}var Se=(a,e,t,n,o)=>{let i={objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType};n?.rewarders&&n?.rewarders.length>0&&a.Pool.collectAllRewards(o,i,n.rewarders.map(s=>({coin_type:s.coinType,flow_rate:s.flowRate,reward_amount:s.rewardAmount,rewards_allocated:s.rewardsAllocated,hasEnded:s.hasEnded})),t.objectId,e),a.Pool.collectFee(o,{objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType,isStable:n.isStable,tickSpacing:n.tickSpacing},t.objectId,e)};async function Al({sdk:a,address:e,positionId:t,pool:n,txb:o,targetCoinType:i,slippage:s}){let l={objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType},d=n.rewarders.map(I=>I.coinType);d.length>0&&(console.log("claimRewardsAsTargetCoin input",{pool:l,positionId:t,rewarderCoinTypes:d,targetCoinType:i,slippage:s,toAddress:e}),await a.Pool.claimRewardsAs({txb:o,pool:l,positionId:t,rewarderCoinTypes:d,targetCoinType:i,slippage:s,toAddress:e}));let b=await a.Pool.getAllPools();return await a.Pool.claimFeeAs({txb:o,pool:l,positionId:t,targetCoinType:i,slippage:s,toAddress:e,pools:b}),o}function E(a,e,t){let n=a.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}function $f(a){let e;return(a&1)!==0?e=new R.default("79232123823359799118286999567"):e=new R.default("79228162514264337593543950336"),(a&2)!==0&&(e=E(e.mul(new R.default("79236085330515764027303304731")),96,256)),(a&4)!==0&&(e=E(e.mul(new R.default("79244008939048815603706035061")),96,256)),(a&8)!==0&&(e=E(e.mul(new R.default("79259858533276714757314932305")),96,256)),(a&16)!==0&&(e=E(e.mul(new R.default("79291567232598584799939703904")),96,256)),(a&32)!==0&&(e=E(e.mul(new R.default("79355022692464371645785046466")),96,256)),(a&64)!==0&&(e=E(e.mul(new R.default("79482085999252804386437311141")),96,256)),(a&128)!==0&&(e=E(e.mul(new R.default("79736823300114093921829183326")),96,256)),(a&256)!==0&&(e=E(e.mul(new R.default("80248749790819932309965073892")),96,256)),(a&512)!==0&&(e=E(e.mul(new R.default("81282483887344747381513967011")),96,256)),(a&1024)!==0&&(e=E(e.mul(new R.default("83390072131320151908154831281")),96,256)),(a&2048)!==0&&(e=E(e.mul(new R.default("87770609709833776024991924138")),96,256)),(a&4096)!==0&&(e=E(e.mul(new R.default("97234110755111693312479820773")),96,256)),(a&8192)!==0&&(e=E(e.mul(new R.default("119332217159966728226237229890")),96,256)),(a&16384)!==0&&(e=E(e.mul(new R.default("179736315981702064433883588727")),96,256)),(a&32768)!==0&&(e=E(e.mul(new R.default("407748233172238350107850275304")),96,256)),(a&65536)!==0&&(e=E(e.mul(new R.default("2098478828474011932436660412517")),96,256)),(a&131072)!==0&&(e=E(e.mul(new R.default("55581415166113811149459800483533")),96,256)),(a&262144)!==0&&(e=E(e.mul(new R.default("38992368544603139932233054999993551")),96,256)),E(e,32,256)}function Hf(a){let e=Math.abs(a),t;return(e&1)!==0?t=new R.default("18445821805675392311"):t=new R.default("18446744073709551616"),(e&2)!==0&&(t=E(t.mul(new R.default("18444899583751176498")),64,256)),(e&4)!==0&&(t=E(t.mul(new R.default("18443055278223354162")),64,256)),(e&8)!==0&&(t=E(t.mul(new R.default("18439367220385604838")),64,256)),(e&16)!==0&&(t=E(t.mul(new R.default("18431993317065449817")),64,256)),(e&32)!==0&&(t=E(t.mul(new R.default("18417254355718160513")),64,256)),(e&64)!==0&&(t=E(t.mul(new R.default("18387811781193591352")),64,256)),(e&128)!==0&&(t=E(t.mul(new R.default("18329067761203520168")),64,256)),(e&256)!==0&&(t=E(t.mul(new R.default("18212142134806087854")),64,256)),(e&512)!==0&&(t=E(t.mul(new R.default("17980523815641551639")),64,256)),(e&1024)!==0&&(t=E(t.mul(new R.default("17526086738831147013")),64,256)),(e&2048)!==0&&(t=E(t.mul(new R.default("16651378430235024244")),64,256)),(e&4096)!==0&&(t=E(t.mul(new R.default("15030750278693429944")),64,256)),(e&8192)!==0&&(t=E(t.mul(new R.default("12247334978882834399")),64,256)),(e&16384)!==0&&(t=E(t.mul(new R.default("8131365268884726200")),64,256)),(e&32768)!==0&&(t=E(t.mul(new R.default("3584323654723342297")),64,256)),(e&65536)!==0&&(t=E(t.mul(new R.default("696457651847595233")),64,256)),(e&131072)!==0&&(t=E(t.mul(new R.default("26294789957452057")),64,256)),(e&262144)!==0&&(t=E(t.mul(new R.default("37481735321082")),64,256)),t}var Ol=(a,e,t)=>{let n=is(t?a+a%(e??1):a-a%(e??1));return n>0?new R.default($f(n)):new R.default(Hf(n))};function Pl(a,e){if(!/^(\d+)(\.\d+)?$/.test(a))return BigInt(0);let[t,n=""]=a.split("."),o=(n+"0".repeat(e)).slice(0,e),s=(t+o).replace(/^0+/,"")||"0";return BigInt(s)}async function de({address:a,coinType:e,coinAmount:t,coinDecimals:n,tx:o,mmt:i}){let s=Pl(t,n),l;return Number(t)?l=await vl(i,a,zt(e),s,o):[l]=o.moveCall({target:"0x2::coin::zero",typeArguments:[e],arguments:[]}),l}function Rl({mmt:a,tx:e,poolModel:t,selectedLowTick:n,selectedHighTick:o}){let i=Ol(is(n),t.tickSpacing),s=Ol(is(o),t.tickSpacing);return a.Position.openPosition(e,t,i.toString(),s.toString())}var Xf=(a,e)=>{let n=1e4-Math.floor(e*100);return a*BigInt(n)/BigInt(1e4)};function Ni(a,e,t){let n=Pl(a,e);return Number(a)===0?BigInt(0):Xf(n,t)}async function pn({poolId:a,currentSqrtPrice:e,tokenX:t,tokenY:n,slippagePercentage:o,isTokenX:i,suiClient:s}){let d=(await s.getObject({id:a,options:{showContent:!0}}))?.data?.content?.fields?.sqrt_price??e,b=Ml.sqrtPriceX64ToPrice(new R.default(d?.toString()),t.decimals,n.decimals),I=i?(100-o)/100:(100+o)/100,C=Ml.priceToSqrtPriceX64(b.mul(I),t.decimals,n.decimals);return BigInt(C.toString())}var Bl=async(a,e,t,n,o,i,s,l,d,b)=>{let I=await de({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),C=await de({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),x={objectId:s,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},D=Rl({mmt:a,tx:e,poolModel:x,selectedLowTick:l,selectedHighTick:d}),k=Ni(n,i.tokenX.decimals,b),P=Ni(o,i.tokenY.decimals,b);a.Pool.addLiquidity(e,x,D,I,C,k,P,t),e.transferObjects([D],e.pure.address(t))},El=async(a,e,t,n,o,i,s,l,d,b,I)=>{try{let C=await de({mmt:a,address:n,coinType:i?s.tokenX.coinType:s.tokenY.coinType,coinAmount:o,coinDecimals:i?s.tokenX.decimals:s.tokenY.decimals,tx:e}),x={objectId:s.poolId,tokenXType:zt(s.tokenX.coinType),tokenYType:zt(s.tokenY.coinType),tickSpacing:s.tickSpacing},D=Rl({mmt:a,tx:e,poolModel:x,selectedLowTick:l,selectedHighTick:d}),k=await pn({suiClient:t,poolId:s.poolId,currentSqrtPrice:s.currentSqrtPrice,tokenX:s.tokenX,tokenY:s.tokenY,slippagePercentage:b,isTokenX:i});await a.Pool.addLiquiditySingleSidedV2({txb:e,pool:x,position:D,inputCoin:C,isXtoY:i,limitSqrtPrice:k,slippagePercentage:I,transferToAddress:n,useMvr:!0}),e.transferObjects([D],e.pure.address(n))}catch(C){console.error(C)}},Wl=async(a,e,t,n,o,i,s,l)=>{let d=await de({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),b=await de({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),I={objectId:i.poolId,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},C=Ni(n,i.tokenX.decimals,l),x=Ni(o,i.tokenY.decimals,l);a.Pool.addLiquidity(e,I,s,d,b,C,x,t)},Nl=async(a,e,t,n,o,i,s,l,d)=>{try{let b=await de({mmt:a,address:t,coinType:o?i.tokenX.coinType:i.tokenY.coinType,coinAmount:n,coinDecimals:o?i.tokenX.decimals:i.tokenY.decimals,tx:e}),I={objectId:i.poolId,tokenXType:i.tokenX.coinType,tokenYType:i.tokenY.coinType,tickSpacing:i.tickSpacing},C=await pn({suiClient:a.rpcClient,poolId:i.poolId,currentSqrtPrice:i.currentSqrtPrice,tokenX:i.tokenX,tokenY:i.tokenY,slippagePercentage:l,isTokenX:o});await a.Pool.addLiquiditySingleSidedV2({txb:e,pool:I,position:s,inputCoin:b,isXtoY:o,limitSqrtPrice:C,slippagePercentage:d,transferToAddress:t})}catch(b){throw console.error(b),b}},_l=(a,e)=>BigInt(e===100?a:new Vf(a).multipliedBy(e/100).toFixed(0)),Ll=async(a,e,t,n,o,i)=>{let s=_l(t.liquidity,o),l=n.tokenX.coinType,d=n.tokenY.coinType,b={objectId:n?.poolId,tokenXType:l,tokenYType:d};a.Pool.removeLiquidity(i,b,t.objectId,s,BigInt(0),BigInt(0),e),Se(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)},jl=async({sdk:a,address:e,position:t,pool:n,withdrawPercentage:o,txb:i,targetCoinType:s,slippage:l})=>{let d=_l(t.liquidity,o),b=zt(n.tokenX.coinType),I=zt(n.tokenY.coinType),C=zt(s)===I,x={objectId:n?.poolId,tokenXType:b,tokenYType:I},{removeLpCoinA:D,removeLpCoinB:k}=a.Pool.removeLiquidity(i,x,t.objectId,d,BigInt(0),BigInt(0)),P=await pn({suiClient:a.rpcClient,poolId:n.poolId,currentSqrtPrice:n.currentSqrtPrice,tokenX:n.tokenX,tokenY:n.tokenY,isTokenX:C,slippagePercentage:l}),U=C?D:k,K=i.moveCall({target:"0x2::coin::value",arguments:[U],typeArguments:[C?b:I]});i.transferObjects([C?k:D],e),a.Pool.swapV2({txb:i,transferToAddress:e,pool:x,limitSqrtPrice:P,amount:K,inputCoin:U,isXtoY:C}),Se(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)};var _i=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=zf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:l,selectedLowTick:d,selectedHighTick:b,slippage:I}=n,C=new Gf;return await Bl(t,C,o,i,s,l,l.poolId,d,b,I),C}static fromData(t){return new a(t)}};import{MmtSDK as Qf}from"@mmt-finance/clmm-sdk";import{Transaction as Jf}from"@mysten/sui/transactions";var Li=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Qf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:l,selectedLowTick:d,selectedHighTick:b,swapSlippage:I,addLiquiditySlippage:C}=n,x=new Jf;return await El(t,x,t.rpcClient,o,i,s,l,d,b,I,C),x}static fromData(t){return new a(t)}};import{MmtSDK as Yf}from"@mmt-finance/clmm-sdk";import{Transaction as Zf}from"@mysten/sui/transactions";var ji=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=Yf.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,positions:i,pools:s}=n,l=new Zf;for(let d of i){let b=s.find(I=>I.poolId===d.poolId);b&&Se(t,o,d,b,l)}return l}static fromData(t){return new a(t)}};import{MmtSDK as th}from"@mmt-finance/clmm-sdk";import{Transaction as eh}from"@mysten/sui/transactions";var Ui=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=th.NEW({network:"mainnet"}),{params:n}=this.data,o=new eh;return await Promise.all(n.claimParams.map(i=>Al({...i,sdk:t,txb:o}))),o}static fromData(t){return new a(t)}};import{MmtSDK as nh}from"@mmt-finance/clmm-sdk";import{Transaction as oh}from"@mysten/sui/transactions";var qi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=nh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,position:i,pool:s}=n,l=new oh;return Se(t,o,i,s,l),l}static fromData(t){return new a(t)}};import{MmtSDK as ah}from"@mmt-finance/clmm-sdk";import{Transaction as ih}from"@mysten/sui/transactions";var Fi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=ah.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:l,positionObjectId:d,slippage:b}=n,I=new ih;return await Wl(t,I,o,i,s,l,d,b),I}static fromData(t){return new a(t)}};import{MmtSDK as rh}from"@mmt-finance/clmm-sdk";import{Transaction as sh}from"@mysten/sui/transactions";var Ki=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=rh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:l,positionObjectId:d,swapSlippage:b,addLiquiditySlippage:I}=n,C=new sh;return await Nl(t,C,o,i,s,l,d,b,I),C}static fromData(t){return new a(t)}};import{MmtSDK as ch}from"@mmt-finance/clmm-sdk";import{Transaction as lh}from"@mysten/sui/transactions";var Vi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=ch.NEW({network:"mainnet"}),{params:n}=this.data,{pool:o,position:i,address:s,withdrawPercentage:l,zapOutOn:d,targetCoinType:b,slippage:I}=n,C=new lh;return d?await jl({sdk:t,address:s,position:i,pool:o,withdrawPercentage:l,txb:C,targetCoinType:b,slippage:I}):await Ll(t,s,i,o,l,C),C}static fromData(t){return new a(t)}};import{Transaction as Ul}from"@mysten/sui/transactions";import{LstClient as ql}from"@suilend/springsui-sdk";var rs={id:"0x0431232199873db77a92aa645cd43521437e9cc5c6fff07fd03edb88afe0b25a",type:"0x2b6602099970374cf58a2a1b9d96f005fccceb81e92eb059873baf420eb6c717::x_sui::X_SUI",weightHookId:"0x9e35c13dbb0bc437e8ad5a95ec463622f58763e060552ae8d100db77f4904601"},Fl=async(a,e,t)=>{let n=await ql.initialize(a,rs),o=new Ul,[i]=o.splitCoins(o.gas,[BigInt(t)]),s=n.mint(o,i);return o.transferObjects([s],e),o},Kl=async(a,e,t)=>{let n=await ql.initialize(a,rs),o=await a.getCoins({owner:e,coinType:rs.type,limit:1e3});if(o.data.length===0)throw new Error("No lst coins found");let i=new Ul,s=o.data[0];o.data.length>1&&i.mergeCoins(s.coinObjectId,o.data.slice(1).map(b=>b.coinObjectId));let[l]=i.splitCoins(s.coinObjectId,[BigInt(t)]),d=n.redeem(i,l);return i.transferObjects([d],e),i};var $i=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await Fl(t.suiClient,o,i)}static fromData(t){return new a(t)}};import{MmtSDK as mh}from"@mmt-finance/clmm-sdk";import{Transaction as ph}from"@mysten/sui/transactions";import{mappedMmtV3Pool as uh}from"@mmt-finance/clmm-sdk/dist/utils/poolUtils";var Vl=async(a,e,t,n,o,i,s)=>{let l=await de({mmt:a,tx:i,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals}),d=i.moveCall({target:"0x2::coin::value",typeArguments:[t.coinType],arguments:[l]}),b=t.coinType;for(let I=0;I<e.length;I+=1){let{poolId:C,tokenX:x,tokenY:D,isStable:k,currentSqrtPrice:P}=e[I],{id:U,isReverse:K}=uh[C]||{id:C,isReverse:!1},Bt=zt(x.coinType)===zt(b);Bt=K?!Bt:Bt;let Et=K?D.coinType:x.coinType,Mt=K?x.coinType:D.coinType,Le=await pn({poolId:U,tokenX:x,tokenY:D,slippagePercentage:s,isTokenX:Bt,suiClient:a.rpcClient,currentSqrtPrice:P}),Wt=a.Pool.swap(i,{objectId:U,tokenXType:Et,tokenYType:Mt,isStable:k},d,l,Bt,void 0,Le,!1);i.transferObjects([l],i.pure.address(o)),l=Wt,b=Bt?Mt:Et,d=i.moveCall({target:"0x2::coin::value",typeArguments:[b],arguments:[l]})}i.transferObjects([l],i.pure.address(o))};var Hi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let t=mh.NEW({network:"mainnet"}),{params:n}=this.data,{route:o,tokenIn:i,amountIn:s,address:l,slippage:d}=n,b=new ph;return await Vl(t,o,i,s,l,b,d),b}static fromData(t){return new a(t)}};var Xi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await Kl(t.suiClient,o,i)}static fromData(t){return new a(t)}};var zi=class{application="mmt-dex";supportSDK="@mysten/sui";async deserialize(e){let{appContext:t}=e;return{txType:dh.Other,txSubType:t.action,intentionData:t}}async build(e){let t;switch(e.txSubType){case"Swap":t=Hi.fromData(e.intentionData);break;case"AddLiquidity":t=_i.fromData(e.intentionData);break;case"AddLiquiditySingleSide":t=Li.fromData(e.intentionData);break;case"ClaimRewards":t=qi.fromData(e.intentionData);break;case"ClaimAllRewards":t=ji.fromData(e.intentionData);break;case"ClaimRewardsAs":t=Ui.fromData(e.intentionData);break;case"RemoveLiquidity":t=Vi.fromData(e.intentionData);break;case"StakeXSui":t=$i.fromData(e.intentionData);break;case"UnstakeXSui":t=Xi.fromData(e.intentionData);break;case"ManageLiquidity":t=Fi.fromData(e.intentionData);break;case"ManageLiquiditySingleSide":t=Ki.fromData(e.intentionData);break;default:throw new Error(`not implemented ${e.txSubType}`)}return t.build({suiClient:e.suiClient})}};import{TransactionType as $l}from"@msafe/sui3-utils";import{Transaction as fh}from"@mysten/sui/transactions";import{Vaults as hh}from"@nemoprotocol/vaults-sdk";var Gi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,i=hh.createSDK({client:n}),s=new fh;return await i.deposit(this.data,o.address,s),s}static fromData(t){return new a(t)}};import{Transaction as gh}from"@mysten/sui/transactions";import{Vaults as yh}from"@nemoprotocol/vaults-sdk";var Qi=class a extends S{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:n,account:o}=t,i=yh.createSDK({client:n}),s=new gh;return await i.withdraw(this.data,o.address,s),s}static fromData(t){return new a(t)}};var Ji=class{application="nemo";supportSDK="@mysten/sui";async deserialize(e){let t=e.transaction.blockData.transactions.find(o=>o.kind==="MoveCall"&&o.target.toString().toLowerCase().includes("deposit::deposit_non_entry")),n=e.transaction.blockData.transactions.find(o=>o.kind==="MoveCall"&&o.target.toString().toLowerCase().includes("withdraw::withdraw"));if(t)return{txType:$l.Other,txSubType:"VaultDeposit",intentionData:e.appContext};if(n)return{txType:$l.Other,txSubType:"VaultWithdraw",intentionData:e.appContext}}async build(e){let{suiClient:t,account:n}=e;console.log(e.txSubType);let o;switch(e.txSubType){case"VaultDeposit":o=Gi.fromData(e.intentionData);break;case"VaultWithdraw":o=Qi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};var L6=oa.fromHelpers([new Ko,new Zo,new Uo,new ta,new fo,new Si,new zi,new Na,new Di,new Un,new Ha,new Za,new wn,new Wi,new oi,new Ji]);export{L6 as appHelpers};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|