@msafe/sui-app-store 0.0.335 → 0.0.337
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.d.mts +6 -6
- package/dist/index.d.ts +6 -6
- 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 +4 -4
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var mu=Object.create;var Or=Object.defineProperty;var pu=Object.getOwnPropertyDescriptor;var du=Object.getOwnPropertyNames;var fu=Object.getPrototypeOf,hu=Object.prototype.hasOwnProperty;var gu=(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 yu=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),Ls=(a,e)=>{for(var t in e)Or(a,t,{get:e[t],enumerable:!0})},bu=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of du(e))!hu.call(a,o)&&o!==t&&Or(a,o,{get:()=>e[o],enumerable:!(n=pu(e,o))||n.enumerable});return a};var Tu=(a,e,t)=>(t=a!=null?mu(fu(a)):{},bu(e||!a||!a.__esModule?Or(t,"default",{value:a,enumerable:!0}):t,a));var jl=yu((Ll,bs)=>{"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=gu("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 d=0;r[0]==="-"&&(d++,this.negative=1),d<r.length&&(u===16?this._parseHex(r,d,m):(this._parseBase(r,u,d),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 d=0;d<this.length;d++)this.words[d]=0;var h,T,C=0;if(m==="be")for(d=r.length-1,h=0;d>=0;d-=3)T=r[d]|r[d-1]<<8|r[d-2]<<16,this.words[h]|=T<<C&67108863,this.words[h+1]=T>>>26-C&67108863,C+=24,C>=26&&(C-=26,h++);else if(m==="le")for(d=0,h=0;d<r.length;d+=3)T=r[d]|r[d+1]<<8|r[d+2]<<16,this.words[h]|=T<<C&67108863,this.words[h+1]=T>>>26-C&67108863,C+=24,C>=26&&(C-=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 c(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 d=0;d<this.length;d++)this.words[d]=0;var h=0,T=0,C;if(m==="be")for(d=r.length-1;d>=u;d-=2)C=c(r,u,d)<<h,this.words[T]|=C&67108863,h>=18?(h-=18,T+=1,this.words[T]|=C>>>26):h+=8;else{var f=r.length-u;for(d=f%2===0?u+1:u;d<r.length;d+=2)C=c(r,u,d)<<h,this.words[T]|=C&67108863,h>=18?(h-=18,T+=1,this.words[T]|=C>>>26):h+=8}this._strip()};function p(y,r,u,m){for(var d=0,h=0,T=Math.min(y.length,u),C=r;C<T;C++){var f=y.charCodeAt(C)-48;d*=m,f>=49?h=f-49+10:f>=17?h=f-17+10:h=f,t(f>=0&&h<m,"Invalid character"),d+=h}return d}o.prototype._parseBase=function(r,u,m){this.words=[0],this.length=1;for(var d=0,h=1;h<=67108863;h*=u)d++;d--,h=h/u|0;for(var T=r.length-m,C=T%d,f=Math.min(T,T-C)+m,l=0,g=m;g<f;g+=d)l=p(r,g,g+d,u),this.imuln(h),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(C!==0){var v=1;for(l=p(r,g,r.length,u),g=0;g<C;g++)v*=u;this.imuln(v),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}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")]=S}catch{o.prototype.inspect=S}else o.prototype.inspect=S;function S(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var I=["","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 d=0,h=0,T=0;T<this.length;T++){var C=this.words[T],f=((C<<d|h)&16777215).toString(16);h=C>>>24-d&16777215,d+=2,d>=26&&(d-=26,T--),h!==0||T!==this.length-1?m=I[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 l=x[r],g=D[r];m="";var v=this.clone();for(v.negative=0;!v.isZero();){var O=v.modrn(g).toString(r);v=v.idivn(g),v.isZero()?m=O+m:m=I[l-O.length]+O+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 d=this.byteLength(),h=m||Math.max(1,d);t(d<=h,"byte array longer than desired length"),t(h>0,"Requested array length <= 0");var T=k(r,h),C=u==="le"?"LE":"BE";return this["_toArrayLike"+C](T,d),T},o.prototype._toArrayLikeLE=function(r,u){for(var m=0,d=0,h=0,T=0;h<this.length;h++){var C=this.words[h]<<T|d;r[m++]=C&255,m<r.length&&(r[m++]=C>>8&255),m<r.length&&(r[m++]=C>>16&255),T===6?(m<r.length&&(r[m++]=C>>24&255),d=0,T=0):(d=C>>>24,T+=2)}if(m<r.length)for(r[m++]=d;m<r.length;)r[m++]=0},o.prototype._toArrayLikeBE=function(r,u){for(var m=r.length-1,d=0,h=0,T=0;h<this.length;h++){var C=this.words[h]<<T|d;r[m--]=C&255,m>=0&&(r[m--]=C>>8&255),m>=0&&(r[m--]=C>>16&255),T===6?(m>=0&&(r[m--]=C>>24&255),d=0,T=0):(d=C>>>24,T+=2)}if(m>=0)for(r[m--]=d;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 M(y){for(var r=new Array(y.bitLength()),u=0;u<r.length;u++){var m=u/26|0,d=u%26;r[u]=y.words[m]>>>d&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 d=0;d<m.length;d++)this.words[d]=u.words[d]^m.words[d];if(this!==u)for(;d<u.length;d++)this.words[d]=u.words[d];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 d=0;d<u;d++)this.words[d]=~this.words[d]&67108863;return m>0&&(this.words[d]=~this.words[d]&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,d=r%26;return this._expand(m+1),u?this.words[m]=this.words[m]|1<<d:this.words[m]=this.words[m]&~(1<<d),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,d;this.length>r.length?(m=this,d=r):(m=r,d=this);for(var h=0,T=0;T<d.length;T++)u=(m.words[T]|0)+(d.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 d,h;m>0?(d=this,h=r):(d=r,h=this);for(var T=0,C=0;C<h.length;C++)u=(d.words[C]|0)-(h.words[C]|0)+T,T=u>>26,this.words[C]=u&67108863;for(;T!==0&&C<d.length;C++)u=(d.words[C]|0)+T,T=u>>26,this.words[C]=u&67108863;if(T===0&&C<d.length&&d!==this)for(;C<d.length;C++)this.words[C]=d.words[C];return this.length=Math.max(this.length,C),d!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(r){return this.clone().isub(r)};function L(y,r,u){u.negative=r.negative^y.negative;var m=y.length+r.length|0;u.length=m,m=m-1|0;var d=y.words[0]|0,h=r.words[0]|0,T=d*h,C=T&67108863,f=T/67108864|0;u.words[0]=C;for(var l=1;l<m;l++){for(var g=f>>>26,v=f&67108863,O=Math.min(l,r.length-1),P=Math.max(0,l-y.length+1);P<=O;P++){var B=l-P|0;d=y.words[B]|0,h=r.words[P]|0,T=d*h+v,g+=T/67108864|0,v=T&67108863}u.words[l]=v|0,f=g|0}return f!==0?u.words[l]=f|0:u.length--,u._strip()}var U=function(r,u,m){var d=r.words,h=u.words,T=m.words,C=0,f,l,g,v=d[0]|0,O=v&8191,P=v>>>13,B=d[1]|0,_=B&8191,F=B>>>13,ie=d[2]|0,K=ie&8191,$=ie>>>13,ws=d[3]|0,X=ws&8191,z=ws>>>13,Is=d[4]|0,Q=Is&8191,Y=Is>>>13,Cs=d[5]|0,J=Cs&8191,Z=Cs>>>13,xs=d[6]|0,tt=xs&8191,et=xs>>>13,Ds=d[7]|0,nt=Ds&8191,ot=Ds>>>13,ks=d[8]|0,at=ks&8191,it=ks>>>13,vs=d[9]|0,rt=vs&8191,st=vs>>>13,As=h[0]|0,ct=As&8191,lt=As>>>13,Ms=h[1]|0,ut=Ms&8191,mt=Ms>>>13,Os=h[2]|0,pt=Os&8191,dt=Os>>>13,Ps=h[3]|0,ft=Ps&8191,ht=Ps>>>13,Rs=h[4]|0,gt=Rs&8191,yt=Rs>>>13,Bs=h[5]|0,bt=Bs&8191,Tt=Bs>>>13,Es=h[6]|0,St=Es&8191,wt=Es>>>13,Ns=h[7]|0,It=Ns&8191,Ct=Ns>>>13,Ws=h[8]|0,xt=Ws&8191,Dt=Ws>>>13,_s=h[9]|0,kt=_s&8191,vt=_s>>>13;m.negative=r.negative^u.negative,m.length=19,f=Math.imul(O,ct),l=Math.imul(O,lt),l=l+Math.imul(P,ct)|0,g=Math.imul(P,lt);var mr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(mr>>>26)|0,mr&=67108863,f=Math.imul(_,ct),l=Math.imul(_,lt),l=l+Math.imul(F,ct)|0,g=Math.imul(F,lt),f=f+Math.imul(O,ut)|0,l=l+Math.imul(O,mt)|0,l=l+Math.imul(P,ut)|0,g=g+Math.imul(P,mt)|0;var pr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(pr>>>26)|0,pr&=67108863,f=Math.imul(K,ct),l=Math.imul(K,lt),l=l+Math.imul($,ct)|0,g=Math.imul($,lt),f=f+Math.imul(_,ut)|0,l=l+Math.imul(_,mt)|0,l=l+Math.imul(F,ut)|0,g=g+Math.imul(F,mt)|0,f=f+Math.imul(O,pt)|0,l=l+Math.imul(O,dt)|0,l=l+Math.imul(P,pt)|0,g=g+Math.imul(P,dt)|0;var dr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(dr>>>26)|0,dr&=67108863,f=Math.imul(X,ct),l=Math.imul(X,lt),l=l+Math.imul(z,ct)|0,g=Math.imul(z,lt),f=f+Math.imul(K,ut)|0,l=l+Math.imul(K,mt)|0,l=l+Math.imul($,ut)|0,g=g+Math.imul($,mt)|0,f=f+Math.imul(_,pt)|0,l=l+Math.imul(_,dt)|0,l=l+Math.imul(F,pt)|0,g=g+Math.imul(F,dt)|0,f=f+Math.imul(O,ft)|0,l=l+Math.imul(O,ht)|0,l=l+Math.imul(P,ft)|0,g=g+Math.imul(P,ht)|0;var fr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(fr>>>26)|0,fr&=67108863,f=Math.imul(Q,ct),l=Math.imul(Q,lt),l=l+Math.imul(Y,ct)|0,g=Math.imul(Y,lt),f=f+Math.imul(X,ut)|0,l=l+Math.imul(X,mt)|0,l=l+Math.imul(z,ut)|0,g=g+Math.imul(z,mt)|0,f=f+Math.imul(K,pt)|0,l=l+Math.imul(K,dt)|0,l=l+Math.imul($,pt)|0,g=g+Math.imul($,dt)|0,f=f+Math.imul(_,ft)|0,l=l+Math.imul(_,ht)|0,l=l+Math.imul(F,ft)|0,g=g+Math.imul(F,ht)|0,f=f+Math.imul(O,gt)|0,l=l+Math.imul(O,yt)|0,l=l+Math.imul(P,gt)|0,g=g+Math.imul(P,yt)|0;var hr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(hr>>>26)|0,hr&=67108863,f=Math.imul(J,ct),l=Math.imul(J,lt),l=l+Math.imul(Z,ct)|0,g=Math.imul(Z,lt),f=f+Math.imul(Q,ut)|0,l=l+Math.imul(Q,mt)|0,l=l+Math.imul(Y,ut)|0,g=g+Math.imul(Y,mt)|0,f=f+Math.imul(X,pt)|0,l=l+Math.imul(X,dt)|0,l=l+Math.imul(z,pt)|0,g=g+Math.imul(z,dt)|0,f=f+Math.imul(K,ft)|0,l=l+Math.imul(K,ht)|0,l=l+Math.imul($,ft)|0,g=g+Math.imul($,ht)|0,f=f+Math.imul(_,gt)|0,l=l+Math.imul(_,yt)|0,l=l+Math.imul(F,gt)|0,g=g+Math.imul(F,yt)|0,f=f+Math.imul(O,bt)|0,l=l+Math.imul(O,Tt)|0,l=l+Math.imul(P,bt)|0,g=g+Math.imul(P,Tt)|0;var gr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(gr>>>26)|0,gr&=67108863,f=Math.imul(tt,ct),l=Math.imul(tt,lt),l=l+Math.imul(et,ct)|0,g=Math.imul(et,lt),f=f+Math.imul(J,ut)|0,l=l+Math.imul(J,mt)|0,l=l+Math.imul(Z,ut)|0,g=g+Math.imul(Z,mt)|0,f=f+Math.imul(Q,pt)|0,l=l+Math.imul(Q,dt)|0,l=l+Math.imul(Y,pt)|0,g=g+Math.imul(Y,dt)|0,f=f+Math.imul(X,ft)|0,l=l+Math.imul(X,ht)|0,l=l+Math.imul(z,ft)|0,g=g+Math.imul(z,ht)|0,f=f+Math.imul(K,gt)|0,l=l+Math.imul(K,yt)|0,l=l+Math.imul($,gt)|0,g=g+Math.imul($,yt)|0,f=f+Math.imul(_,bt)|0,l=l+Math.imul(_,Tt)|0,l=l+Math.imul(F,bt)|0,g=g+Math.imul(F,Tt)|0,f=f+Math.imul(O,St)|0,l=l+Math.imul(O,wt)|0,l=l+Math.imul(P,St)|0,g=g+Math.imul(P,wt)|0;var yr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(yr>>>26)|0,yr&=67108863,f=Math.imul(nt,ct),l=Math.imul(nt,lt),l=l+Math.imul(ot,ct)|0,g=Math.imul(ot,lt),f=f+Math.imul(tt,ut)|0,l=l+Math.imul(tt,mt)|0,l=l+Math.imul(et,ut)|0,g=g+Math.imul(et,mt)|0,f=f+Math.imul(J,pt)|0,l=l+Math.imul(J,dt)|0,l=l+Math.imul(Z,pt)|0,g=g+Math.imul(Z,dt)|0,f=f+Math.imul(Q,ft)|0,l=l+Math.imul(Q,ht)|0,l=l+Math.imul(Y,ft)|0,g=g+Math.imul(Y,ht)|0,f=f+Math.imul(X,gt)|0,l=l+Math.imul(X,yt)|0,l=l+Math.imul(z,gt)|0,g=g+Math.imul(z,yt)|0,f=f+Math.imul(K,bt)|0,l=l+Math.imul(K,Tt)|0,l=l+Math.imul($,bt)|0,g=g+Math.imul($,Tt)|0,f=f+Math.imul(_,St)|0,l=l+Math.imul(_,wt)|0,l=l+Math.imul(F,St)|0,g=g+Math.imul(F,wt)|0,f=f+Math.imul(O,It)|0,l=l+Math.imul(O,Ct)|0,l=l+Math.imul(P,It)|0,g=g+Math.imul(P,Ct)|0;var br=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(br>>>26)|0,br&=67108863,f=Math.imul(at,ct),l=Math.imul(at,lt),l=l+Math.imul(it,ct)|0,g=Math.imul(it,lt),f=f+Math.imul(nt,ut)|0,l=l+Math.imul(nt,mt)|0,l=l+Math.imul(ot,ut)|0,g=g+Math.imul(ot,mt)|0,f=f+Math.imul(tt,pt)|0,l=l+Math.imul(tt,dt)|0,l=l+Math.imul(et,pt)|0,g=g+Math.imul(et,dt)|0,f=f+Math.imul(J,ft)|0,l=l+Math.imul(J,ht)|0,l=l+Math.imul(Z,ft)|0,g=g+Math.imul(Z,ht)|0,f=f+Math.imul(Q,gt)|0,l=l+Math.imul(Q,yt)|0,l=l+Math.imul(Y,gt)|0,g=g+Math.imul(Y,yt)|0,f=f+Math.imul(X,bt)|0,l=l+Math.imul(X,Tt)|0,l=l+Math.imul(z,bt)|0,g=g+Math.imul(z,Tt)|0,f=f+Math.imul(K,St)|0,l=l+Math.imul(K,wt)|0,l=l+Math.imul($,St)|0,g=g+Math.imul($,wt)|0,f=f+Math.imul(_,It)|0,l=l+Math.imul(_,Ct)|0,l=l+Math.imul(F,It)|0,g=g+Math.imul(F,Ct)|0,f=f+Math.imul(O,xt)|0,l=l+Math.imul(O,Dt)|0,l=l+Math.imul(P,xt)|0,g=g+Math.imul(P,Dt)|0;var Tr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Tr>>>26)|0,Tr&=67108863,f=Math.imul(rt,ct),l=Math.imul(rt,lt),l=l+Math.imul(st,ct)|0,g=Math.imul(st,lt),f=f+Math.imul(at,ut)|0,l=l+Math.imul(at,mt)|0,l=l+Math.imul(it,ut)|0,g=g+Math.imul(it,mt)|0,f=f+Math.imul(nt,pt)|0,l=l+Math.imul(nt,dt)|0,l=l+Math.imul(ot,pt)|0,g=g+Math.imul(ot,dt)|0,f=f+Math.imul(tt,ft)|0,l=l+Math.imul(tt,ht)|0,l=l+Math.imul(et,ft)|0,g=g+Math.imul(et,ht)|0,f=f+Math.imul(J,gt)|0,l=l+Math.imul(J,yt)|0,l=l+Math.imul(Z,gt)|0,g=g+Math.imul(Z,yt)|0,f=f+Math.imul(Q,bt)|0,l=l+Math.imul(Q,Tt)|0,l=l+Math.imul(Y,bt)|0,g=g+Math.imul(Y,Tt)|0,f=f+Math.imul(X,St)|0,l=l+Math.imul(X,wt)|0,l=l+Math.imul(z,St)|0,g=g+Math.imul(z,wt)|0,f=f+Math.imul(K,It)|0,l=l+Math.imul(K,Ct)|0,l=l+Math.imul($,It)|0,g=g+Math.imul($,Ct)|0,f=f+Math.imul(_,xt)|0,l=l+Math.imul(_,Dt)|0,l=l+Math.imul(F,xt)|0,g=g+Math.imul(F,Dt)|0,f=f+Math.imul(O,kt)|0,l=l+Math.imul(O,vt)|0,l=l+Math.imul(P,kt)|0,g=g+Math.imul(P,vt)|0;var Sr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Sr>>>26)|0,Sr&=67108863,f=Math.imul(rt,ut),l=Math.imul(rt,mt),l=l+Math.imul(st,ut)|0,g=Math.imul(st,mt),f=f+Math.imul(at,pt)|0,l=l+Math.imul(at,dt)|0,l=l+Math.imul(it,pt)|0,g=g+Math.imul(it,dt)|0,f=f+Math.imul(nt,ft)|0,l=l+Math.imul(nt,ht)|0,l=l+Math.imul(ot,ft)|0,g=g+Math.imul(ot,ht)|0,f=f+Math.imul(tt,gt)|0,l=l+Math.imul(tt,yt)|0,l=l+Math.imul(et,gt)|0,g=g+Math.imul(et,yt)|0,f=f+Math.imul(J,bt)|0,l=l+Math.imul(J,Tt)|0,l=l+Math.imul(Z,bt)|0,g=g+Math.imul(Z,Tt)|0,f=f+Math.imul(Q,St)|0,l=l+Math.imul(Q,wt)|0,l=l+Math.imul(Y,St)|0,g=g+Math.imul(Y,wt)|0,f=f+Math.imul(X,It)|0,l=l+Math.imul(X,Ct)|0,l=l+Math.imul(z,It)|0,g=g+Math.imul(z,Ct)|0,f=f+Math.imul(K,xt)|0,l=l+Math.imul(K,Dt)|0,l=l+Math.imul($,xt)|0,g=g+Math.imul($,Dt)|0,f=f+Math.imul(_,kt)|0,l=l+Math.imul(_,vt)|0,l=l+Math.imul(F,kt)|0,g=g+Math.imul(F,vt)|0;var wr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(wr>>>26)|0,wr&=67108863,f=Math.imul(rt,pt),l=Math.imul(rt,dt),l=l+Math.imul(st,pt)|0,g=Math.imul(st,dt),f=f+Math.imul(at,ft)|0,l=l+Math.imul(at,ht)|0,l=l+Math.imul(it,ft)|0,g=g+Math.imul(it,ht)|0,f=f+Math.imul(nt,gt)|0,l=l+Math.imul(nt,yt)|0,l=l+Math.imul(ot,gt)|0,g=g+Math.imul(ot,yt)|0,f=f+Math.imul(tt,bt)|0,l=l+Math.imul(tt,Tt)|0,l=l+Math.imul(et,bt)|0,g=g+Math.imul(et,Tt)|0,f=f+Math.imul(J,St)|0,l=l+Math.imul(J,wt)|0,l=l+Math.imul(Z,St)|0,g=g+Math.imul(Z,wt)|0,f=f+Math.imul(Q,It)|0,l=l+Math.imul(Q,Ct)|0,l=l+Math.imul(Y,It)|0,g=g+Math.imul(Y,Ct)|0,f=f+Math.imul(X,xt)|0,l=l+Math.imul(X,Dt)|0,l=l+Math.imul(z,xt)|0,g=g+Math.imul(z,Dt)|0,f=f+Math.imul(K,kt)|0,l=l+Math.imul(K,vt)|0,l=l+Math.imul($,kt)|0,g=g+Math.imul($,vt)|0;var Ir=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Ir>>>26)|0,Ir&=67108863,f=Math.imul(rt,ft),l=Math.imul(rt,ht),l=l+Math.imul(st,ft)|0,g=Math.imul(st,ht),f=f+Math.imul(at,gt)|0,l=l+Math.imul(at,yt)|0,l=l+Math.imul(it,gt)|0,g=g+Math.imul(it,yt)|0,f=f+Math.imul(nt,bt)|0,l=l+Math.imul(nt,Tt)|0,l=l+Math.imul(ot,bt)|0,g=g+Math.imul(ot,Tt)|0,f=f+Math.imul(tt,St)|0,l=l+Math.imul(tt,wt)|0,l=l+Math.imul(et,St)|0,g=g+Math.imul(et,wt)|0,f=f+Math.imul(J,It)|0,l=l+Math.imul(J,Ct)|0,l=l+Math.imul(Z,It)|0,g=g+Math.imul(Z,Ct)|0,f=f+Math.imul(Q,xt)|0,l=l+Math.imul(Q,Dt)|0,l=l+Math.imul(Y,xt)|0,g=g+Math.imul(Y,Dt)|0,f=f+Math.imul(X,kt)|0,l=l+Math.imul(X,vt)|0,l=l+Math.imul(z,kt)|0,g=g+Math.imul(z,vt)|0;var Cr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Cr>>>26)|0,Cr&=67108863,f=Math.imul(rt,gt),l=Math.imul(rt,yt),l=l+Math.imul(st,gt)|0,g=Math.imul(st,yt),f=f+Math.imul(at,bt)|0,l=l+Math.imul(at,Tt)|0,l=l+Math.imul(it,bt)|0,g=g+Math.imul(it,Tt)|0,f=f+Math.imul(nt,St)|0,l=l+Math.imul(nt,wt)|0,l=l+Math.imul(ot,St)|0,g=g+Math.imul(ot,wt)|0,f=f+Math.imul(tt,It)|0,l=l+Math.imul(tt,Ct)|0,l=l+Math.imul(et,It)|0,g=g+Math.imul(et,Ct)|0,f=f+Math.imul(J,xt)|0,l=l+Math.imul(J,Dt)|0,l=l+Math.imul(Z,xt)|0,g=g+Math.imul(Z,Dt)|0,f=f+Math.imul(Q,kt)|0,l=l+Math.imul(Q,vt)|0,l=l+Math.imul(Y,kt)|0,g=g+Math.imul(Y,vt)|0;var xr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(xr>>>26)|0,xr&=67108863,f=Math.imul(rt,bt),l=Math.imul(rt,Tt),l=l+Math.imul(st,bt)|0,g=Math.imul(st,Tt),f=f+Math.imul(at,St)|0,l=l+Math.imul(at,wt)|0,l=l+Math.imul(it,St)|0,g=g+Math.imul(it,wt)|0,f=f+Math.imul(nt,It)|0,l=l+Math.imul(nt,Ct)|0,l=l+Math.imul(ot,It)|0,g=g+Math.imul(ot,Ct)|0,f=f+Math.imul(tt,xt)|0,l=l+Math.imul(tt,Dt)|0,l=l+Math.imul(et,xt)|0,g=g+Math.imul(et,Dt)|0,f=f+Math.imul(J,kt)|0,l=l+Math.imul(J,vt)|0,l=l+Math.imul(Z,kt)|0,g=g+Math.imul(Z,vt)|0;var Dr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Dr>>>26)|0,Dr&=67108863,f=Math.imul(rt,St),l=Math.imul(rt,wt),l=l+Math.imul(st,St)|0,g=Math.imul(st,wt),f=f+Math.imul(at,It)|0,l=l+Math.imul(at,Ct)|0,l=l+Math.imul(it,It)|0,g=g+Math.imul(it,Ct)|0,f=f+Math.imul(nt,xt)|0,l=l+Math.imul(nt,Dt)|0,l=l+Math.imul(ot,xt)|0,g=g+Math.imul(ot,Dt)|0,f=f+Math.imul(tt,kt)|0,l=l+Math.imul(tt,vt)|0,l=l+Math.imul(et,kt)|0,g=g+Math.imul(et,vt)|0;var kr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(kr>>>26)|0,kr&=67108863,f=Math.imul(rt,It),l=Math.imul(rt,Ct),l=l+Math.imul(st,It)|0,g=Math.imul(st,Ct),f=f+Math.imul(at,xt)|0,l=l+Math.imul(at,Dt)|0,l=l+Math.imul(it,xt)|0,g=g+Math.imul(it,Dt)|0,f=f+Math.imul(nt,kt)|0,l=l+Math.imul(nt,vt)|0,l=l+Math.imul(ot,kt)|0,g=g+Math.imul(ot,vt)|0;var vr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(vr>>>26)|0,vr&=67108863,f=Math.imul(rt,xt),l=Math.imul(rt,Dt),l=l+Math.imul(st,xt)|0,g=Math.imul(st,Dt),f=f+Math.imul(at,kt)|0,l=l+Math.imul(at,vt)|0,l=l+Math.imul(it,kt)|0,g=g+Math.imul(it,vt)|0;var Ar=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Ar>>>26)|0,Ar&=67108863,f=Math.imul(rt,kt),l=Math.imul(rt,vt),l=l+Math.imul(st,kt)|0,g=Math.imul(st,vt);var Mr=(C+f|0)+((l&8191)<<13)|0;return C=(g+(l>>>13)|0)+(Mr>>>26)|0,Mr&=67108863,T[0]=mr,T[1]=pr,T[2]=dr,T[3]=fr,T[4]=hr,T[5]=gr,T[6]=yr,T[7]=br,T[8]=Tr,T[9]=Sr,T[10]=wr,T[11]=Ir,T[12]=Cr,T[13]=xr,T[14]=Dr,T[15]=kr,T[16]=vr,T[17]=Ar,T[18]=Mr,C!==0&&(T[19]=C,m.length++),m};Math.imul||(U=L);function q(y,r,u){u.negative=r.negative^y.negative,u.length=y.length+r.length;for(var m=0,d=0,h=0;h<u.length-1;h++){var T=d;d=0;for(var C=m&67108863,f=Math.min(h,r.length-1),l=Math.max(0,h-y.length+1);l<=f;l++){var g=h-l,v=y.words[g]|0,O=r.words[l]|0,P=v*O,B=P&67108863;T=T+(P/67108864|0)|0,B=B+C|0,C=B&67108863,T=T+(B>>>26)|0,d+=T>>>26,T&=67108863}u.words[h]=C,m=T,T=d}return m!==0?u.words[h]=m:u.length--,u._strip()}function Mt(y,r,u){return q(y,r,u)}o.prototype.mulTo=function(r,u){var m,d=this.length+r.length;return this.length===10&&r.length===10?m=U(this,r,u):d<63?m=L(this,r,u):d<1024?m=q(this,r,u):m=Mt(this,r,u),m};function W(y,r){this.x=y,this.y=r}W.prototype.makeRBT=function(r){for(var u=new Array(r),m=o.prototype._countBits(r)-1,d=0;d<r;d++)u[d]=this.revBin(d,m,r);return u},W.prototype.revBin=function(r,u,m){if(r===0||r===m-1)return r;for(var d=0,h=0;h<u;h++)d|=(r&1)<<u-h-1,r>>=1;return d},W.prototype.permute=function(r,u,m,d,h,T){for(var C=0;C<T;C++)d[C]=u[r[C]],h[C]=m[r[C]]},W.prototype.transform=function(r,u,m,d,h,T){this.permute(T,r,u,m,d,h);for(var C=1;C<h;C<<=1)for(var f=C<<1,l=Math.cos(2*Math.PI/f),g=Math.sin(2*Math.PI/f),v=0;v<h;v+=f)for(var O=l,P=g,B=0;B<C;B++){var _=m[v+B],F=d[v+B],ie=m[v+B+C],K=d[v+B+C],$=O*ie-P*K;K=O*K+P*ie,ie=$,m[v+B]=_+ie,d[v+B]=F+K,m[v+B+C]=_-ie,d[v+B+C]=F-K,B!==f&&($=l*O-g*P,P=l*P+g*O,O=$)}},W.prototype.guessLen13b=function(r,u){var m=Math.max(u,r)|1,d=m&1,h=0;for(m=m/2|0;m;m=m>>>1)h++;return 1<<h+1+d},W.prototype.conjugate=function(r,u,m){if(!(m<=1))for(var d=0;d<m/2;d++){var h=r[d];r[d]=r[m-d-1],r[m-d-1]=h,h=u[d],u[d]=-u[m-d-1],u[m-d-1]=-h}},W.prototype.normalize13b=function(r,u){for(var m=0,d=0;d<u/2;d++){var h=Math.round(r[2*d+1]/u)*8192+Math.round(r[2*d]/u)+m;r[d]=h&67108863,h<67108864?m=0:m=h/67108864|0}return r},W.prototype.convert13b=function(r,u,m,d){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<d;++T)m[T]=0;t(h===0),t((h&-8192)===0)},W.prototype.stub=function(r){for(var u=new Array(r),m=0;m<r;m++)u[m]=0;return u},W.prototype.mulp=function(r,u,m){var d=2*this.guessLen13b(r.length,u.length),h=this.makeRBT(d),T=this.stub(d),C=new Array(d),f=new Array(d),l=new Array(d),g=new Array(d),v=new Array(d),O=new Array(d),P=m.words;P.length=d,this.convert13b(r.words,r.length,C,d),this.convert13b(u.words,u.length,g,d),this.transform(C,T,f,l,d,h),this.transform(g,T,v,O,d,h);for(var B=0;B<d;B++){var _=f[B]*v[B]-l[B]*O[B];l[B]=f[B]*O[B]+l[B]*v[B],f[B]=_}return this.conjugate(f,l,d),this.transform(f,l,P,T,d,h),this.conjugate(P,T,d),this.normalize13b(P,d),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),Mt(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,d=0;d<this.length;d++){var h=(this.words[d]|0)*r,T=(h&67108863)+(m&67108863);m>>=26,m+=h/67108864|0,m+=T>>>26,this.words[d]=T&67108863}return m!==0&&(this.words[d]=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=M(r);if(u.length===0)return new o(1);for(var m=this,d=0;d<u.length&&u[d]===0;d++,m=m.sqr());if(++d<u.length)for(var h=m.sqr();d<u.length;d++,h=h.sqr())u[d]!==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,d=67108863>>>26-u<<26-u,h;if(u!==0){var T=0;for(h=0;h<this.length;h++){var C=this.words[h]&d,f=(this.words[h]|0)-C<<u;this.words[h]=f|T,T=C>>>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 d;u?d=(u-u%26)/26:d=0;var h=r%26,T=Math.min((r-h)/26,this.length),C=67108863^67108863>>>h<<h,f=m;if(d-=T,d=Math.max(0,d),f){for(var l=0;l<T;l++)f.words[l]=this.words[l];f.length=T}if(T!==0)if(this.length>T)for(this.length-=T,l=0;l<this.length;l++)this.words[l]=this.words[l+T];else this.words[0]=0,this.length=1;var g=0;for(l=this.length-1;l>=0&&(g!==0||l>=d);l--){var v=this.words[l]|0;this.words[l]=g<<26-h|v>>>h,g=v&C}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,d=1<<u;if(this.length<=m)return!1;var h=this.words[m];return!!(h&d)},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 d=67108863^67108863>>>u<<u;this.words[this.length-1]&=d}return this.length===0&&(this.words[0]=0,this.length=1),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 d=r.length+m,h;this._expand(d);var T,C=0;for(h=0;h<r.length;h++){T=(this.words[h+m]|0)+C;var f=(r.words[h]|0)*u;T-=f&67108863,C=(T>>26)-(f/67108864|0),this.words[h+m]=T&67108863}for(;h<this.length-m;h++)T=(this.words[h+m]|0)+C,C=T>>26,this.words[h+m]=T&67108863;if(C===0)return this._strip();for(t(C===-1),C=0,h=0;h<this.length;h++)T=-(this.words[h]|0)+C,C=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,d=this.clone(),h=r,T=h.words[h.length-1]|0,C=this._countBits(T);m=26-C,m!==0&&(h=h.ushln(m),d.iushln(m),T=h.words[h.length-1]|0);var f=d.length-h.length,l;if(u!=="mod"){l=new o(null),l.length=f+1,l.words=new Array(l.length);for(var g=0;g<l.length;g++)l.words[g]=0}var v=d.clone()._ishlnsubmul(h,1,f);v.negative===0&&(d=v,l&&(l.words[f]=1));for(var O=f-1;O>=0;O--){var P=(d.words[h.length+O]|0)*67108864+(d.words[h.length+O-1]|0);for(P=Math.min(P/T|0,67108863),d._ishlnsubmul(h,P,O);d.negative!==0;)P--,d.negative=0,d._ishlnsubmul(h,1,O),d.isZero()||(d.negative^=1);l&&(l.words[O]=P)}return l&&l._strip(),d._strip(),u!=="div"&&m!==0&&d.iushrn(m),{div:l||null,mod:d}},o.prototype.divmod=function(r,u,m){if(t(!r.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var d,h,T;return this.negative!==0&&r.negative===0?(T=this.neg().divmod(r,u),u!=="mod"&&(d=T.div.neg()),u!=="div"&&(h=T.mod.neg(),m&&h.negative!==0&&h.iadd(r)),{div:d,mod:h}):this.negative===0&&r.negative!==0?(T=this.divmod(r.neg(),u),u!=="mod"&&(d=T.div.neg()),{div:d,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,d=r.ushrn(1),h=r.andln(1),T=m.cmp(d);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,d=0,h=this.length-1;h>=0;h--)d=(m*d+(this.words[h]|0))%r;return u?-d:d},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,d=this.length-1;d>=0;d--){var h=(this.words[d]|0)+m*67108864;this.words[d]=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 d=new o(1),h=new o(0),T=new o(0),C=new o(1),f=0;u.isEven()&&m.isEven();)u.iushrn(1),m.iushrn(1),++f;for(var l=m.clone(),g=u.clone();!u.isZero();){for(var v=0,O=1;(u.words[0]&O)===0&&v<26;++v,O<<=1);if(v>0)for(u.iushrn(v);v-- >0;)(d.isOdd()||h.isOdd())&&(d.iadd(l),h.isub(g)),d.iushrn(1),h.iushrn(1);for(var P=0,B=1;(m.words[0]&B)===0&&P<26;++P,B<<=1);if(P>0)for(m.iushrn(P);P-- >0;)(T.isOdd()||C.isOdd())&&(T.iadd(l),C.isub(g)),T.iushrn(1),C.iushrn(1);u.cmp(m)>=0?(u.isub(m),d.isub(T),h.isub(C)):(m.isub(u),T.isub(d),C.isub(h))}return{a:T,b:C,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 d=new o(1),h=new o(0),T=m.clone();u.cmpn(1)>0&&m.cmpn(1)>0;){for(var C=0,f=1;(u.words[0]&f)===0&&C<26;++C,f<<=1);if(C>0)for(u.iushrn(C);C-- >0;)d.isOdd()&&d.iadd(T),d.iushrn(1);for(var l=0,g=1;(m.words[0]&g)===0&&l<26;++l,g<<=1);if(l>0)for(m.iushrn(l);l-- >0;)h.isOdd()&&h.iadd(T),h.iushrn(1);u.cmp(m)>=0?(u.isub(m),d.isub(h)):(m.isub(u),h.isub(d))}var v;return u.cmpn(1)===0?v=d: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 d=0;u.isEven()&&m.isEven();d++)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(d)},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,d=1<<u;if(this.length<=m)return this._expand(m+1),this.words[m]|=d,this;for(var h=d,T=m;h!==0&&T<this.length;T++){var C=this.words[T]|0;C+=h,h=C>>>26,C&=67108863,this.words[T]=C}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 d=this.words[0]|0;m=d===r?0:d<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 d=this.words[m]|0,h=r.words[m]|0;if(d!==h){d<h?u=-1:d>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 H(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 Ie={k256:null,p224:null,p192:null,p25519:null};function Rt(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()}Rt.prototype._tmp=function(){var r=new o(null);return r.words=new Array(Math.ceil(this.n/13)),r},Rt.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 d=m<this.n?-1:u.ucmp(this.p);return d===0?(u.words[0]=0,u.length=1):d>0?u.isub(this.p):u.strip!==void 0?u.strip():u._strip(),u},Rt.prototype.split=function(r,u){r.iushrn(this.n,0,u)},Rt.prototype.imulK=function(r){return r.imul(this.k)};function Ce(){Rt.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}n(Ce,Rt),Ce.prototype.split=function(r,u){for(var m=4194303,d=Math.min(r.length,9),h=0;h<d;h++)u.words[h]=r.words[h];if(u.length=d,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 C=r.words[h]|0;r.words[h-10]=(C&m)<<4|T>>>22,T=C}T>>>=22,r.words[h-10]=T,T===0&&r.length>10?r.length-=10:r.length-=9},Ce.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 d=r.words[m]|0;u+=d*977,r.words[m]=u&67108863,u=d*64+(u/67108864|0)}return r.words[r.length-1]===0&&(r.length--,r.words[r.length-1]===0&&r.length--),r};function Tn(){Rt.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(Tn,Rt);function Sn(){Rt.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n(Sn,Rt);function Ke(){Rt.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n(Ke,Rt),Ke.prototype.imulK=function(r){for(var u=0,m=0;m<r.length;m++){var d=(r.words[m]|0)*19+u,h=d&67108863;d>>>=26,r.words[m]=h,u=d}return u!==0&&(r.words[r.length++]=u),r},o._prime=function(r){if(Ie[r])return Ie[r];var u;if(r==="k256")u=new Ce;else if(r==="p224")u=new Tn;else if(r==="p192")u=new Sn;else if(r==="p25519")u=new Ke;else throw new Error("Unknown prime "+r);return Ie[r]=u,u};function H(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}H.prototype._verify1=function(r){t(r.negative===0,"red works only with positives"),t(r.red,"red works only with red numbers")},H.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")},H.prototype.imod=function(r){return this.prime?this.prime.ireduce(r)._forceRed(this):(b(r,r.umod(this.m)._forceRed(this)),r)},H.prototype.neg=function(r){return r.isZero()?r.clone():this.m.sub(r)._forceRed(this)},H.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)},H.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},H.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)},H.prototype.isub=function(r,u){this._verify2(r,u);var m=r.isub(u);return m.cmpn(0)<0&&m.iadd(this.m),m},H.prototype.shl=function(r,u){return this._verify1(r),this.imod(r.ushln(u))},H.prototype.imul=function(r,u){return this._verify2(r,u),this.imod(r.imul(u))},H.prototype.mul=function(r,u){return this._verify2(r,u),this.imod(r.mul(u))},H.prototype.isqr=function(r){return this.imul(r,r.clone())},H.prototype.sqr=function(r){return this.mul(r,r)},H.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 d=this.m.subn(1),h=0;!d.isZero()&&d.andln(1)===0;)h++,d.iushrn(1);t(!d.isZero());var T=new o(1).toRed(this),C=T.redNeg(),f=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new o(2*l*l).toRed(this);this.pow(l,f).cmp(C)!==0;)l.redIAdd(C);for(var g=this.pow(l,d),v=this.pow(r,d.addn(1).iushrn(1)),O=this.pow(r,d),P=h;O.cmp(T)!==0;){for(var B=O,_=0;B.cmp(T)!==0;_++)B=B.redSqr();t(_<P);var F=this.pow(g,new o(1).iushln(P-_-1));v=v.redMul(F),g=F.redSqr(),O=O.redMul(g),P=_}return v},H.prototype.invm=function(r){var u=r._invmp(this.m);return u.negative!==0?(u.negative=0,this.imod(u).redNeg()):this.imod(u)},H.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,d=new Array(1<<m);d[0]=new o(1).toRed(this),d[1]=r;for(var h=2;h<d.length;h++)d[h]=this.mul(d[h-1],r);var T=d[0],C=0,f=0,l=u.bitLength()%26;for(l===0&&(l=26),h=u.length-1;h>=0;h--){for(var g=u.words[h],v=l-1;v>=0;v--){var O=g>>v&1;if(T!==d[0]&&(T=this.sqr(T)),O===0&&C===0){f=0;continue}C<<=1,C|=O,f++,!(f!==m&&(h!==0||v!==0))&&(T=this.mul(T,d[C]),f=0,C=0)}l=26}return T},H.prototype.convertTo=function(r){var u=r.umod(this.m);return u===r?u.clone():u},H.prototype.convertFrom=function(r){var u=r.clone();return u.red=null,u},o.mont=function(r){return new fe(r)};function fe(y){H.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,H),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),d=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(d).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),d=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(d).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 bs>"u"||bs,Ll)});import{TransactionType as Ou}from"@msafe/sui3-utils";import{coinsList as wu,poolIdPoolNameMap as Iu,poolInfo as js,singleAssetPoolCoinMap as Cu}from"@alphafi/alphafi-sdk";import{TransactionType as Ve}from"@msafe/sui3-utils";import{bcs as wn,fromBase64 as In}from"@mysten/bcs";var Cn=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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=Iu[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&&js[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&js[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=wn.u64().parse(In(t)):t.length===24?n=wn.u128().parse(In(t)):t.length===44?n=wn.u256().parse(In(t)):n=wn.u64().parse(In(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:Ve.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}=Cu[e],{expo:s}=wu[i];n=Math.floor(Number(n)/10**(9-s)).toString()}return{txType:Ve.Other,type:"depositSingleAsset",intentionData:{poolName:e,amount:n}}}decodeWithdraw(e){let t=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",t),{txType:Ve.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:Ve.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:t}}}decodeClaimReward(){return{txType:Ve.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as Du}from"@alphafi/alphafi-sdk";import xu from"sort-keys-recursive";var w=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(xu(this.data))}};var xn=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t;return await Du(n.address)}static fromData(t){return new a(t)}};import{depositDoubleAssetTxb as ku}from"@alphafi/alphafi-sdk";var Dn=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i,isAmountA:s}=this.data;return await ku(o,n.address,i,s)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new a(t)}};import{depositSingleAssetTxb as vu}from"@alphafi/alphafi-sdk";var kn=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i}=this.data;return await vu(o,n.address,i)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new a(t)}};import{withdrawTxb as Au}from"@alphafi/alphafi-sdk";var vn=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:i}=this.data;return await Au(i,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};import{withdrawAlphaTxb as Mu}from"@alphafi/alphafi-sdk";var An=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:i}=this.data;return await Mu(i,o,n.address)}static fromData(t){return console.log("WithdrawAlphaIntention.fromData",t),new a(t)}};var Mn=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 c=new Cn(t,i).decode();return{txType:Ou.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{account:t}=e;console.log("AlphaFi build transaction type",e.txSubType);let n;switch(e.txSubType){case"depositSingleAsset":n=kn.fromData(e.intentionData);break;case"depositDoubleAsset":n=Dn.fromData(e.intentionData);break;case"withdraw":n=vn.fromData(e.intentionData);break;case"withdrawAlpha":n=An.fromData(e.intentionData);break;case"claimReward":n=xn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return n.build({account:t})}};import{TransactionType as Zu}from"@msafe/sui3-utils";import{TransactionType as jt}from"@msafe/sui3-utils";import{bcs as Pr}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as Rr}from"bucket-protocol-sdk";var On=class{constructor(e){this.transaction=e}transaction;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(Rr,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Rr,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(Rr,"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 c=this.getMoveCallCommand("high_top_up").MoveCall;[e]=c.typeArguments;let p=c.arguments[1];p.$kind==="Input"&&(t=this.getPureInputU64(p.Input));let b=c.arguments[3];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}else if(this.getMoveCallCommand("high_borrow")){let c=this.getMoveCallCommand("high_borrow").MoveCall;[e]=c.typeArguments;let p=c.arguments[4];p.$kind==="Input"&&(t=this.getPureInputU64(p.Input));let b=c.arguments[5];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let c=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[e]=c.typeArguments;let p=c.arguments[5];p.$kind==="Input"&&(t=this.getPureInputU64(p.Input));let b=c.arguments[6];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}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 c=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[e]=c.typeArguments;let p=c.arguments[4];p.$kind==="Input"&&(n=this.getPureInputU64(p.Input));let b=c.arguments[5];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([i]=I)}let S=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];S.$kind==="Input"&&(t=this.getPureInputU64(S.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let c=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[e]=c.typeArguments;let p=c.arguments[5];p.$kind==="Input"&&(n=this.getPureInputU64(p.Input));let b=c.arguments[6];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([i]=I)}let S=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];S.$kind==="Input"&&(t=this.getPureInputU64(S.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 c=i.arguments[5];if(c.$kind==="Input"){let p=this.getPureAddresses(c.Input);p.length===1&&([n]=p)}}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 c=i.arguments[4];if(c.$kind==="Input"){let p=this.getPureAddresses(c.Input);p.length===1&&([n]=p)}}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 p=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];p.$kind==="Input"&&(e=this.getPureInputU64(p.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let c=0;c<o.length;c++){let p=o[c];n.push("")}else{let c=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let p=0;p<c.length;p++){let S=c[p].MoveCall.arguments[2];if(S.$kind==="Input"){let{objectId:I}=this.inputs[S.Input].UnresolvedObject;n.push(I)}}}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 Pr.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return Pr.vector(Pr.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as Eu}from"@msafe/sui3-utils";import{Transaction as Ru}from"@mysten/sui/transactions";import{buildPsmTx as Bu}from"bucket-protocol-sdk";import{BucketClient as Pu}from"bucket-protocol-sdk";var Bt=(a,e)=>{let t=a==="sui:mainnet"?"mainnet":"testnet";return new Pu(t,e.address)};var Us=async(a,e,t)=>{let{coinType:n,amount:o,buckToCoin:i}=a,s=new Ru,c=Bt(t,e);return await Bu(c,s,n,o,i,e.address),s};var Pn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Eu.Other;txSubType="psm";async build(t){let{account:n,network:o}=t;return await Us(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as ju}from"@msafe/sui3-utils";import{Transaction as Rn}from"@mysten/sui/transactions";import{buildBorrowTx as Nu,buildCloseTx as Wu,buildRepayTx as _u,buildWithdrawTx as Lu}from"bucket-protocol-sdk";var qs=async(a,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:i,insertionPlace:s,strapId:c}=a,p=new Rn,b=Bt(t,e);return await Nu(b,p,n,o,i,e.address,s,c),p},Fs=async(a,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:i,strapId:s}=a,c=new Rn,p=Bt(t,e);return await Lu(p,c,n,o,e.address,i,s),c},Ks=async(a,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:i,isSurplus:s,insertionPlace:c,strapId:p}=a,b=new Rn,S=Bt(t,e);return await _u(S,b,n,o,i,e.address,s,c,p),b},Vs=async(a,e,t)=>{let{collateralType:n,recipient:o,strapId:i}=a,s=new Rn,c=Bt(t,e);return await Wu(c,s,n,o,i),s};var Bn=class a extends w{constructor(t){super(t);this.data=t}data;txType=ju.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await qs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Uu}from"@msafe/sui3-utils";var En=class a extends w{constructor(t){super(t);this.data=t}data;txType=Uu.Other;txSubType="repay";async build(t){let{account:n,network:o}=t;return await Ks(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as qu}from"@msafe/sui3-utils";var Nn=class a extends w{constructor(t){super(t);this.data=t}data;txType=qu.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await Fs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Fu}from"@msafe/sui3-utils";var Wn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Fu.Other;txSubType="close";async build(t){let{account:n,network:o}=t;return await Vs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Fn}from"@msafe/sui3-utils";import{Transaction as _n}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as Ku,buildSBUCKDepositTx as Vu,buildSBUCKUnstakeTx as $u,buildSBUCKWithdrawTx as Hu}from"bucket-protocol-sdk";var $s=async(a,e,t)=>{let{coinType:n,amount:o,isStake:i}=a,s=new _n,c=Bt(t,e);return await Vu(c,s,n,o,e.address,i),s},Hs=async(a,e,t)=>{let{stakeProofs:n,amount:o,isStake:i,toBuck:s}=a,c=new _n,p=Bt(t,e);return await $u(p,c,n,o,e.address,i,s),c},Gs=async(a,e,t)=>{let{amount:n}=a,o=new _n,i=Bt(t,e);return await Hu(i,o,n,e.address),o},Xs=async(a,e,t)=>{let{stakeProofs:n}=a,o=new _n,i=Bt(t,e);return await Ku(i,o,n,e.address),o};var Ln=class a extends w{constructor(t){super(t);this.data=t}data;txType=Fn.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await $s(this.data,n,o)}static fromData(t){return new a(t)}},jn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Fn.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await Hs(this.data,n,o)}static fromData(t){return new a(t)}},Un=class a extends w{constructor(t){super(t);this.data=t}data;txType=Fn.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await Gs(this.data,n,o)}static fromData(t){return new a(t)}},qn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Fn.Other;txSubType="sbuck-claim";async build(t){let{account:n,network:o}=t;return await Xs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Er}from"@msafe/sui3-utils";import{Transaction as Br}from"@mysten/sui/transactions";import{buildTankClaimTx as Gu,buildTankDepositTx as Xu,buildTankWithdrawTx as zu}from"bucket-protocol-sdk";var zs=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Br,s=Bt(t,e);return await Xu(s,i,n,o,e.address),i},Qs=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Br,s=Bt(t,e);return await zu(s,i,n,o,e.address),i},Ys=async(a,e,t)=>{let{coinType:n}=a,o=new Br,i=Bt(t,e);return await Gu(i,o,n,e.address),o};import{Transaction as Qu}from"@mysten/sui/transactions";import{buildLockedClaimTx as Yu}from"bucket-protocol-sdk";var Js=async(a,e,t)=>{let{coinType:n,proofCount:o}=a,i=new Qu,s=Bt(t,e);return await Yu(s,i,n,o,e.address),i};var Kn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Er.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await zs(this.data,n,o)}static fromData(t){return new a(t)}},Vn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Er.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await Qs(this.data,n,o)}static fromData(t){return new a(t)}},$n=class a extends w{constructor(t){super(t);this.data=t}data;txType=Er.Other;txSubType="tank-claim";async build(t){let{account:n,network:o}=t;return await Ys(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ju}from"@msafe/sui3-utils";var Hn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Ju.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await Js(this.data,n,o)}static fromData(t){return new a(t)}};var Gn=class{application="bucket";supportSDK="@mysten/sui";async deserialize(e){console.log("Bucket helper deserialize input: ",e);let{transaction:t}=e,o=new On(t).decode();return{txType:Zu.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=Pn.fromData(e.intentionData);break;case"borrow":i=Bn.fromData(e.intentionData);break;case"withdraw":i=Nn.fromData(e.intentionData);break;case"repay":i=En.fromData(e.intentionData);break;case"close":i=Wn.fromData(e.intentionData);break;case"tank-deposit":i=Kn.fromData(e.intentionData);break;case"tank-withdraw":i=Vn.fromData(e.intentionData);break;case"tank-claim":i=$n.fromData(e.intentionData);break;case"sbuck-deposit":i=Ln.fromData(e.intentionData);break;case"sbuck-unstake":i=jn.fromData(e.intentionData);break;case"sbuck-withdraw":i=Un.fromData(e.intentionData);break;case"sbuck-claim":i=qn.fromData(e.intentionData);break;case"lock-claim":i=Hn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Pm}from"@msafe/sui3-utils";import{TransactionType as em}from"@msafe/sui3-utils";import{SuiClient as Nr,getFullnodeUrl as Zs}from"@mysten/sui/client";var Xt=async(a,e)=>{let{CetusClmmSDK:t}=await import("@cetusprotocol/sui-clmm-sdk"),n=t.createSDK({env:"mainnet",sui_client:new Nr({url:Zs("mainnet")})});return n.setSenderAddress(e.address),n},Ut=async(a,e)=>{let{CetusFarmsSDK:t}=await import("@cetusprotocol/farms-sdk"),n=t.createSDK({env:"mainnet",sui_client:new Nr({url:Zs("mainnet")})});return n.setSenderAddress(e.address),n},tm="https://api-sui.cetus.zone/router_v2/find_routes",tc=async(a,e)=>{let{AggregatorClient:t,Env:n}=await import("@cetusprotocol/aggregator-sdk"),o=new Nr({url:"https://fullnode.mainnet.sui.io/"});return new t({endpoint:tm,signer:e.address,client:o,env:n.Mainnet})},$e=async(a,e)=>{let{CetusVaultsSDK:t}=await import("@cetusprotocol/vaults-sdk"),n=t.createSDK({env:"mainnet"});return n.setSenderAddress(e.address),n},xe=async(a,e)=>{let{CetusXcetusSDK:t}=await import("@cetusprotocol/xcetus-sdk"),n=t.createSDK({env:"mainnet"});return n.setSenderAddress(e.address),n};var ec=async(a,e,t)=>await(await Xt(t,e)).Pool.createPoolPayload(a),nc=async(a,e,t)=>await(await Xt(t,e)).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),oc=async(a,e,t)=>await(await Xt(t,e)).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),ac=async(a,e,t)=>await(await Xt(t,e)).Position.closePositionPayload(a),ic=async(a,e,t)=>await(await Xt(t,e)).Position.removeLiquidityPayload(a),rc=async(a,e,t)=>await(await Xt(t,e)).Rewarder.collectRewarderPayload(a);var Xn=class a extends w{constructor(t){super(t);this.data=t}data;txType=em.Other;txSubType="OpenAndAddLiquidity";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 nm}from"@msafe/sui3-utils";var zn=class a extends w{constructor(t){super(t);this.data=t}data;txType=nm.Other;txSubType="ClaimFeeAndMining";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 om}from"@msafe/sui3-utils";var Qn=class a extends w{constructor(t){super(t);this.data=t}data;txType=om.Other;txSubType="CreatePool";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 am}from"@msafe/sui3-utils";var Yn=class a extends w{constructor(t){super(t);this.data=t}data;txType=am.Other;txSubType="DecreaseLiquidity";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 im}from"@msafe/sui3-utils";var sc=async(a,e,t)=>await(await Ut(t,e)).Farms.openPositionAddLiquidityStakePayload(a),cc=async(a,e,t)=>await(await Ut(t,e)).Farms.addLiquidityFixCoinPayload(a),lc=async(a,e,t)=>await(await Ut(t,e)).Farms.removeLiquidityPayload(a);var uc=async(a,e,t)=>await(await Ut(t,e)).Farms.removeLiquidityPayload(a),mc=async(a,e,t)=>await(await Ut(t,e)).Farms.claimFeeAndClmmReward(a),pc=async(a,e,t)=>await(await Ut(t,e)).Farms.harvestPayload(a),dc=async(a,e,t)=>{let n=await Ut(t,e),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},fc=async(a,e,t)=>await(await Ut(t,e)).Farms.depositPayload(a),hc=async(a,e,t)=>await(await Ut(t,e)).Farms.withdrawPayload(a);var Jn=class a extends w{constructor(t){super(t);this.data=t}data;txType=im.Other;txSubType="FarmingOpenAndAddLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await sc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as rm}from"@msafe/sui3-utils";var Zn=class a extends w{constructor(t){super(t);this.data=t}data;txType=rm.Other;txSubType="FarmingBatchHarvest";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)}};import{TransactionType as sm}from"@msafe/sui3-utils";var to=class a extends w{constructor(t){super(t);this.data=t}data;txType=sm.Other;txSubType="FarmingClaimFeeAndReward";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 cm}from"@msafe/sui3-utils";var eo=class a extends w{constructor(t){super(t);this.data=t}data;txType=cm.Other;txSubType="FarmingDecreaseLiquidity";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 lm}from"@msafe/sui3-utils";var no=class a extends w{constructor(t){super(t);this.data=t}data;txType=lm.Other;txSubType="FarmingHarvest";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 um}from"@msafe/sui3-utils";var oo=class a extends w{constructor(t){super(t);this.data=t}data;txType=um.Other;txSubType="FarmingIncreaseLiquidity";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 mm}from"@msafe/sui3-utils";var ao=class a extends w{constructor(t){super(t);this.data=t}data;txType=mm.Other;txSubType="FarmingRemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await uc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as pm}from"@msafe/sui3-utils";var io=class a extends w{constructor(t){super(t);this.data=t}data;txType=pm.Other;txSubType="FarmingStake";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 dm}from"@msafe/sui3-utils";var ro=class a extends w{constructor(t){super(t);this.data=t}data;txType=dm.Other;txSubType="FarmingUnstake";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 fm}from"@msafe/sui3-utils";var so=class a extends w{constructor(t){super(t);this.data=t}data;txType=fm.Other;txSubType="IncreaseLiquidity";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 bm}from"@msafe/sui3-utils";var co=async()=>{let{Transaction:a}=await import("@mysten/sui/transactions");return new a},hm=async(a,e,t)=>{let n=await $e(t,e),o=await co();return o.setSender(e.address),n.Vest.buildRedeemPayload(a.params,o),o},gm=async(a,e)=>{let{default:t,vaults_mainnet:n}=await import("haedal-vault-sdk"),o=new t(n);o.senderAddress=e.address;let i=await co();return i.setSender(e.address),await o?.Vest.buildRedeemPayload(a.params,i),i},gc=async(a,e,t)=>{let n=await Xt(t,e),o=await co();return n?.Vest.buildRedeemPayload(a.params,o),o},ym=async(a,e,t)=>{let n=await Xt(t,e),o=await Ut(t,e),i=await co(),s=await o.Farms.withdrawReturnPayload(a.withdrawParams,i);return n.Vest.buildRedeemPayload(a.redeemParms.map(c=>({...c,clmm_position_id:s})),i),o.Farms.depositPayload({...a.depositParams,clmm_position_id:s},i),i},yc=async(a,e,t)=>a.type==="clmm"?gc(a,e,t):a.type==="farms"?ym(a,e,t):a.type==="vaults"?hm(a,e,t):a.type==="haedalVaults"?gm(a,e):gc(a,e,t);var lo=class a extends w{constructor(t){super(t);this.data=t}data;txType=bm.Other;txSubType="PosVestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await yc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Tm}from"@msafe/sui3-utils";var uo=class a extends w{constructor(t){super(t);this.data=t}data;txType=Tm.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await ac(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as wm}from"@msafe/sui3-utils";import{Transaction as Sm}from"@mysten/sui/transactions";var bc=async(a,e,t)=>{let{restituteMsafeFastRouterSwapParams:n}=await import("@cetusprotocol/aggregator-sdk"),o=await tc(t,e),i=new Sm;return await o.fastRouterSwap({...a,router:n(a.router),txb:i}),i};var mo=class a extends w{constructor(t){super(t);this.data=t}data;txType=wm.Other;txSubType="AggregatorSwap";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await bc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Im}from"@msafe/sui3-utils";import{Transaction as Tc}from"@mysten/sui/transactions";var Sc=async(a,e,t)=>{let n=await $e(t,e),o=new Tc;return o.setSender(e.address),await n.Vaults.deposit(a,o),o},wc=async(a,e,t)=>{let n=await $e(t,e),o=new Tc;return await n.Vaults.withdraw(a,o),o};var po=class a extends w{constructor(t){super(t);this.data=t}data;txType=Im.Other;txSubType="AddVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Sc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Cm}from"@msafe/sui3-utils";var fo=class a extends w{constructor(t){super(t);this.data=t}data;txType=Cm.Other;txSubType="RemoveVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await wc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Dm}from"@msafe/sui3-utils";import{Transaction as xm}from"@mysten/sui/transactions";var Ic={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},Cc=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,c=new xm;return i.forEach(p=>{c.moveCall({target:`${Ic.published_at}::router::redeem`,typeArguments:[Ic.cetus_coin_type],arguments:[c.object(n),c.object(o),c.pure(p),c.object(s)]})}),c};var ho=class a extends w{constructor(t){super(t);this.data=t}data;txType=Dm.Other;txSubType="VestingRedeem";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 km}from"@msafe/sui3-utils";var xc=async(a,e,t)=>await(await xe(t,e)).XCetusModule.convertPayload(a),Dc=async(a,e,t)=>await(await xe(t,e)).XCetusModule.redeemLockPayload(a),kc=async(a,e,t)=>await(await xe(t,e)).XCetusModule.redeemDividendV3Payload(a.veNftId,a.rewardList),vc=async(a,e,t)=>await(await xe(t,e)).XCetusModule.cancelRedeemPayload(a),Ac=async(a,e,t)=>await(await xe(t,e)).XCetusModule.redeemPayload(a);var go=class a extends w{constructor(t){super(t);this.data=t}data;txType=km.Other;txSubType="xCETUSCancelRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await vc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as vm}from"@msafe/sui3-utils";var yo=class a extends w{constructor(t){super(t);this.data=t}data;txType=vm.Other;txSubType="xCETUSClaimStakingRwewards";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await kc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Am}from"@msafe/sui3-utils";var bo=class a extends w{constructor(t){super(t);this.data=t}data;txType=Am.Other;txSubType="xCETUSConvert";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await xc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Mm}from"@msafe/sui3-utils";var To=class a extends w{constructor(t){super(t);this.data=t}data;txType=Mm.Other;txSubType="xCETUSRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Ac(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Om}from"@msafe/sui3-utils";var So=class a extends w{constructor(t){super(t);this.data=t}data;txType=Om.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 wo=class{application="cetus";supportSDK="@mysten/sui";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{txbParams:t,action:n}=e;return{txType:Pm.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=Xn.fromData(e.intentionData);break;case"IncreaseLiquidity":i=so.fromData(e.intentionData);break;case"DecreaseLiquidity":i=Yn.fromData(e.intentionData);break;case"RemoveLiquidity":i=uo.fromData(e.intentionData);break;case"ClaimFeeAndMining":i=zn.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":i=Jn.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":i=oo.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":i=eo.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":i=ao.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":i=to.fromData(e.intentionData);break;case"FarmingHarvest":i=no.fromData(e.intentionData);break;case"FarmingBatchHarvest":i=Zn.fromData(e.intentionData);break;case"FarmingStake":i=io.fromData(e.intentionData);break;case"FarmingUnstake":i=ro.fromData(e.intentionData);break;case"xCETUSConvert":i=bo.fromData(e.intentionData);break;case"xCETUSRedeemLock":i=So.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":i=yo.fromData(e.intentionData);break;case"xCETUSCancelRedeem":i=go.fromData(e.intentionData);break;case"xCETUSRedeem":i=To.fromData(e.intentionData);break;case"VestingRedeem":i=ho.fromData(e.intentionData);break;case"AggregatorSwap":i=mo.fromData(e.intentionData);break;case"AddVaultsPosition":i=po.fromData(e.intentionData);break;case"RemoveVaultsPosition":i=fo.fromData(e.intentionData);break;case"PosVestingRedeem":i=lo.fromData(e.intentionData);break;case"CreatePool":i=Qn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Mp}from"@msafe/sui3-utils";import Rm from"sort-keys-recursive";var zt=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Rm(this.data))}};import{getFullnodeUrl as Io}from"@mysten/sui.js/client";var Wr={};Ls(Wr,{contractId:()=>Nm,default:()=>Um,feeObjId:()=>Lm,roleObjId:()=>Wm,status:()=>Em,transaction:()=>Bm,upgradeCapObjId:()=>jm,vaultObjId:()=>_m});var Bm="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",Em="success",Nm="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Wm="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",_m="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Lm="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",jm="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Um={transaction:Bm,status:Em,contractId:Nm,roleObjId:Wm,vaultObjId:_m,feeObjId:Lm,upgradeCapObjId:jm};var _r={};Ls(_r,{contractId:()=>Km,default:()=>Xm,feeObjId:()=>Hm,roleObjId:()=>Vm,status:()=>Fm,transaction:()=>qm,upgradeCapObjId:()=>Gm,vaultObjId:()=>$m});var qm="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Fm="success",Km="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Vm="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",$m="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Hm="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",Gm="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Xm={transaction:qm,status:Fm,contractId:Km,roleObjId:Vm,vaultObjId:$m,feeObjId:Hm,upgradeCapObjId:Gm};var zm=Io("testnet"),Qm=Io("testnet"),Ym=Io("mainnet"),Jm=Io("mainnet"),Zm="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",tp="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",ep="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",np="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",Mc=Wr,Oc=_r,op=new Map([["dev",{env:"dev",rpc:{url:zm},backend:{url:Zm},contract:Mc}],["stg",{env:"stg",rpc:{url:Qm},backend:{url:tp},contract:Mc}],["prev",{env:"prev",rpc:{url:Ym},backend:{url:ep},contract:Oc}],["prod",{env:"prod",rpc:{url:Jm},backend:{url:np},contract:Oc}]]);function Pc(a,e){let t=op.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 ip}from"@mysten/sui.js/client";var j=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 Co=class extends j{constructor(){super(11,"Backend is not specified")}};var xo=class extends j{constructor(){super(1,"Wallet not connected")}};import ke,{AxiosError as ap}from"axios";var De=class extends j{constructor(e,t){super(10,e,{context:t})}};var Do=class a{constructor(e){this.apiURL=e}apiURL;static parseResponseData(e){if(e instanceof ap)throw new De(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new De(e.data.code)}throw new De(e.status.toString())}async getIncomingStreams(e,t){let n=await ke.post(`${this.apiURL}/stream`,{recipient:e,...t});return a.parseResponseData(n)}async getOutgoingStreams(e,t){let n=await ke.post(`${this.apiURL}/stream`,{sender:e,...t});return a.parseResponseData(n)}async getStreamHistory(e){let t=await ke.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 ke.post(`${this.apiURL}/stream-info`,{address:e});return a.parseResponseData(t)}async getAllRecipients(e,t){let n=await ke.post(`${this.apiURL}/stream-info`,{sender:e,status:t});return a.parseResponseData(n)}async getAllSenders(e,t){let n=await ke.post(`${this.apiURL}/stream-info`,{recipient:e,status:t});return a.parseResponseData(n)}};var ve=class a{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new ip({url:e.rpc.url}),e.backend&&(this._backend=new Do(e.backend.url))}static new(e,t){let n=Pc(e,t);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new Co;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 xo;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as kp,normalizeStructTag as vp,normalizeSuiAddress as el}from"@mysten/sui.js/utils";import{TransactionBlock as Po}from"@mysten/sui.js/transactions";import{TransactionBlock as Uc}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as qc,normalizeStructTag as lp}from"@mysten/sui.js/utils";var Lr=50n,ko=10000n,Rc=25n,jr=100000000n;var Qt=class{constructor(e){this.object=e}object;moveArg(e){return e.object(this.object)}},He=class{constructor(e){this.objects=e}objects;moveArgs(e){return e.makeMoveVec({objects:this.objects.map(t=>e.object(t))})}},ce=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)}})}result;moveArg(){return this.result}};import{Buffer as Bc}from"buffer";import{normalizeSuiAddress as rp}from"@mysten/sui.js/utils";var Ge=class extends j{constructor(e,t){super(3,e,{context:t})}};var vo=class{constructor(e){this.results=e}results;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 Ge("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return rp(Bc.from(n).toString("hex"))}getU64(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="u64")throw new Ge("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return Bc.from(n).readBigInt64LE()}};import{bcs as Nc}from"@mysten/sui.js/bcs";var G=class extends j{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var Wc={groupId:"string",name:"string"},sp=64;function _c(a){return Lc(a),Nc.ser(Wc,a).toString("base64")}function Xe(a){let e=Nc.de(Wc,a,"base64");return Lc(e),e}function Lc(a){if(!Ec(a.name))throw new G("Invalid metadata: Name contains unknown character");if(!Ec(a.groupId))throw new G("Invalid metadata: Group ID contains unknown character");if(a.name.length>sp)throw new G("Invalid metadata: Name exceed max length 64")}function Ec(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as Ao}from"@mysten/sui.js/utils";function Mo(a,e){return Ao(a)===Ao(e)}function le(a,e){return Ao(a)===Ao(e)}var Oo="txn.gas";import{nanoid as cp}from"nanoid";function jc(){return cp()}var he=class a{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}globals;feeContract;streamContract;static convertCreateStreamInfoToInternal(e){return{metadata:_c({name:e.name,groupId:jc()}),coinType:lp(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 Uc,n=this.calculateFeesInternal(e),o=this.getCreateStreamCoinRequests(e,n),i=await this.wallet.requestCoins(o),s=await this.addMergeCoins(t,i[0]),c;o.length>1?c=await this.addMergeCoins(t,i[1]):c=s;for(let p=0;p<e.recipients.length;p++){let b=e.recipients[p],S=this.amountForRecipient(b,e.numberEpoch),I=this.getStreamFeeLocal(S),[x]=t.splitCoins(s,[t.pure(S+I,"u64")]),[D]=t.splitCoins(c,[t.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(t,{paymentCoin:new ce(x),flatFeeCoin:new ce(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:Lr,denominator:ko},claimFeePercent:{numerator:Rc,denominator:ko},flatFeePerStream:jr}}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===Oo?n=e.gas:n=e.object(t.primaryCoin),n}getCreateStreamCoinRequests(e,t){let n=e.coinType;return Mo(n,qc)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:qc,amount:t.flatFeeAmount}]}calculateFeesInternal(e){let t=e.recipients.reduce((o,i)=>{let s=this.amountForRecipient(i,e.numberEpoch),c=this.getStreamFeeLocal(s);return{totalAmount:o.totalAmount+s,streamFeeAmount:o.streamFeeAmount+c}},{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 jr}getStreamFeeLocal(e){return e*Lr/ko}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new Uc,e),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:t});return new vo(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Kc}from"@mysten/sui.js/transactions";var Fc="0x0000000000000000000000000000000000000000000000000000000000000006";var Ae=class{constructor(e,t,n){this.moduleName=e;this.config=t;this.globals=n}moduleName;config;globals;addContractCall(e,t){let n=`${this.config.contractId}::${this.moduleName}::${t.method}`;return e.add(Kc.MoveCall({target:n,arguments:t.arguments.map(o=>o instanceof He?o.moveArgs(e):o instanceof Qt?o.moveArg(e):o instanceof ce?o.moveArg():e.pure(o)),typeArguments:t.typeArgs})),e}addTransactionBlock(e,t,n=[],o=[]){e.add(Kc.MoveCall({target:t,arguments:n.map(i=>i instanceof He?i.moveArgs(e):i instanceof Qt?i.moveArg(e):i instanceof ce?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(Fc)}};var Me=class a extends Ae{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}config;globals;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 Yt=class a extends Ae{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}config;globals;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),c=this.makeObject(n.flatFeeCoin),p=this.clockObject();return this.addContractCall(t,{method:a.MethodName.create_stream,arguments:[o,i,s,c,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,p],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(),c=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream_by_proxy,arguments:[o,i,s,c],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 Oe=class{constructor(e){this.globals=e;let t=e.envConfig.contract;this.feeContract=new Me(t,e),this.streamContract=new Yt(t,e)}globals;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 Po;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new Po;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new Po;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new Po;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as Ur,SUI_TYPE_ARG as up}from"@mysten/sui.js/utils";import{Duration as Vc}from"luxon";var Ro=class extends j{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var mp=1e3,Bo=class{constructor(e){this.globals=e;this.coinMetaHelper=new qr(e.suiClient),this.createStreamHelper=new Oe(e).createStreamHelper()}globals;coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new Ro(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 G("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 G("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 G("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus(Vc.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:Vc.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:Ur(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:Ur(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 G("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new G("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<mp)throw new G("Interval shall be at least 1 second","interval",e.interval)}},qr=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}suiClient;coinMetaReg;async getCoinMeta(e){let t=Ur(e||up);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 Gc,normalizeSuiAddress as jo}from"@mysten/sui.js/utils";import{DateTime as Xc}from"luxon";import{TransactionBlock as _o}from"@mysten/sui.js/transactions";import{normalizeStructTag as Hc,parseStructTag as fp}from"@mysten/sui.js/utils";import{DateTime as hp}from"luxon";var Eo=class extends j{constructor(){super(7,"Connected wallet is not creator")}};var ze=class extends j{constructor(){super(8,"Connected wallet is not recipient")}};var Qe=class extends j{constructor(e,t){super(6,e,{context:t})}};var Ot=class extends j{constructor(e,t={}){super(0,e,t)}};var No=class extends j{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as pp,Duration as dp}from"luxon";var $c=(1n<<64n)-1n,Wo=1e3;function Fr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Wo);return pp.fromMillis(t*Wo)}function Kr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Wo);return dp.fromMillis(t*Wo)}var ue=class a{constructor(e,t,n){this.globals=e;this.streamId=t;this.rawData=n;this.streamContract=new Yt(e.envConfig.contract,e)}globals;streamId;rawData;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 Ot("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 Eo;let e=new _o;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new ze;let e=new _o;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new ze;let t=new _o;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new _o;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 Hc(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 Kr(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return Xe(e).groupId}get name(){let{metadata:e}=this.rawData.config;return Xe(e).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return Fr(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,t=e.epochInterval*e.totalEpoch;return Kr(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:Fr((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===$c?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=hp.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 No(e):new Qe(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data.content;if(n.dataType!=="moveObject")throw new Qe("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=fp(n.type),i=Hc(o[0]),s=n.fields,c=s.config.fields,p=s.status.fields;return{coinType:i,autoClaim:s.auto_claim,balance:BigInt(s.balance.fields.balance),config:{amountPerEpoch:BigInt(c.amount_per_epoch),cancelable:c.cancelable,cliff:BigInt(c.cliff),creator:c.creator,epochInterval:BigInt(c.epoch_interval),metadata:c.metadata,recipient:c.recipient,timeStart:BigInt(c.time_start),totalEpoch:BigInt(c.total_epoch)},status:{status:p.status,epochCanceled:BigInt(p.epoch_canceled),epochClaimed:BigInt(p.epoch_claimed)}}}};var Pe=class extends j{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function $r(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 Vr=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}requester;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)}},Re=class{constructor(e){this.requester=e;this.pager=new Vr(e),this.curData=[],this.cursor=0}requester;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 gp=25;async function Gr(a,e,t){let n=new Ye(e),o=new Je(a,n,t);return await $r(o)}var Ye=class{constructor(e){this.ids=e;this.cursor=-1}ids;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]}},Je=class extends Re{constructor(t,n,o){super(new Hr(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}suiClient;idIter;options},Hr=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||gp,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}suiClient;stringIter;options;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 Lo=class a{constructor(e,t){this.globals=e;this.streams=t;if(t.length===0)throw new Pe("stream size 0");let n=t.map(i=>i.groupId);if(new Set(n).size!==1)throw new G("Stream does not have same group ID")}globals;streams;type="StreamGroup";static async new(e,t){let n=await Gr(e.suiClient,t);return n.forEach(o=>{if(!o)throw new Ot("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=>{yp(n,i)||(o=!1)}),o}async refresh(){let e=await Gr(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)=>ue.fromObjectData(e,t[s],i)).filter(i=>!!i);if(new Set(o.map(i=>i.groupId)).size!==1)throw new Pe("Not same group ID");if(!this.checkStreamGroup(o))throw new Pe("Not same stream settings");return o}};function yp(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}it;pageSize;static async newIncoming(e){let t=await Uo.newIncoming(e);return new a(t,e.pageSize)}static async newOutgoing(e){let t=await Uo.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}},Uo=class a{constructor(e){this.requester=e}requester;cachedNext;static async newIncoming(e){let t=await qo.newIncomingQuery(e);return new a(t)}static async newOutgoing(e){let t=await qo.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 Ot("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new Ot("No more results");return e}},qo=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 Ye(n.flat().map(s=>s.streamId));this.objectIter=new Je(e.suiClient,i)}globals;recipient;groupRefs;query;current=0;objectIter;static async newIncomingQuery(e){let t=Ip(e.query),n=await e.globals.walletAddress(),i=(await e.globals.backend.getIncomingStreams(n,t)).filter(c=>jo(c.recipient)===jo(n)),s=zc(i);return new a(e.globals,n,s,e.query)}static async newOutgoingQuery(e){let t=Cp(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),i=zc(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 Sp(this.globals,e[0].streamId,this.objectIter);return this.current++,Qc(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await wp(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,Tp(t,this.query)?t:this.doNextRequest()}throw new Ot("Stream group with no stream")}};function zc(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)=>Xc.fromISO(n[0].createDate).toMillis()-Xc.fromISO(t[0].createDate).toMillis())}function Qc(a,e){if(e===void 0)return!0;let t=bp(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 bp(a,e){return e===void 0?!0:Array.isArray(e)?e.includes(a.progress.status):a.progress.status===e}function Tp(a,e){if(!e)return!0;let t=!1;return a.streams.forEach(n=>{Qc(n,e)&&(t=!0)}),t}async function Sp(a,e,t){let n=await Yc(t,e);return ue.fromObjectData(a,e,n)}async function wp(a,e,t){let n=[];for(;n.length<e.length;){let o=await Yc(t,e[n.length]);n.push(o)}return Lo.newFromObjectResponse(a,e,n)}async function Yc(a,e){if(!await a.hasNext())throw new Ot("object iterator has been consumed");let t=await a.next();if(!t||t.error||t.data===void 0||t.data===null)throw new Ot("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new Ot("stream id not aligned");return t}function Ip(a){return{status:Xr(a?.status),coinType:Jc(a?.coinType),sender:Zc(a?.sender)}}function Cp(a){return{status:Xr(a?.status),coinType:Jc(a?.coinType),recipient:Zc(a?.recipient)}}function Xr(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((e,t)=>{let n=Xr(t);return!e||e===n?n:"all"},void 0):xp(a)}function xp(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new G("Unknown stream filtered status")}}function Jc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Gc(e)):void 0:Gc(a)}function Zc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>jo(e)):void 0:jo(a)}var Fo=class extends j{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}coinType;requestAmount;gotAmount};var Dp=25;async function tl(a,e,t,n="0x2::sui::SUI",o=Dp){let i=new zr(a,e,n,o),s=BigInt(0),c=[];for(;await i.hasNext()&&s<t;){let p=await i.next();p&&(c.push(p),s+=BigInt(p.balance))}if(s<t)throw new Fo(n,t,s);return c}var zr=class extends Re{constructor(t,n,o,i){super(new Qr(t,n,o,i));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=i}suiClient;owner;coinType;reqPageSize},Qr=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new Ot("Invalid reqPageSize")}suiClient;owner;coinType;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 Yr=class{constructor(e){this.msafe=e}msafe;get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},Ko=class{constructor(e){this.account=e}account;async address(){return this.account.address}},Jr=class{constructor(e,t){this.singleWallet=e;this.suiClient=t}singleWallet;suiClient;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(Mo(e.coinType,kp))return{primaryCoin:Oo};if(e.amount<=0)throw new G("Invalid coin request","coinAmount",e.amount);let t=await tl(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new Ot("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(n=>n.coinObjectId)}}},Vo=class{globals;helper;constructor(e,t){this.globals=ve.new(e,t),this.helper=new Bo(this.globals)}connectSingleWallet(e){let t=new Jr(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new Yr(e);this.globals.connectWallet(t)}async createStream(e){return this.builder().createStreams(e)}async getStream(e){return ue.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=>vp(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>el(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>el(o))}get wallet(){return this.globals.wallet}builder(){return new Oe(this.globals)}};var Ft=class extends zt{application="mpay";getClient(e,t){let n=new Vo(e==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new Ko(t)),n}};var tn=class extends Ft{constructor(t){super(t);this.data=t}data;txType=Mp.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 Op}from"@msafe/sui3-utils";var en=class extends Ft{constructor(t){super(t);this.data=t}data;txType=Op.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 Pp}from"@msafe/sui3-utils";var nn=class extends Ft{constructor(t){super(t);this.data=t}data;txType=Pp.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 Rp}from"@msafe/sui3-utils";var on=class extends Ft{constructor(t){super(t);this.data=t}data;txType=Rp.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o}=t;return this.getClient(n,o).createStream(this.data)}};import{bcs as nl}from"@mysten/sui.js/bcs";import{normalizeStructTag as Bp,normalizeSuiAddress as an}from"@mysten/sui.js/utils";var Be=class a{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;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 an(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 nl.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 an(e.value.Object.ImmOrOwned.objectId)}return an(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return an(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return an(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 nl.de(t,new Uint8Array(n))}typeArg(e){return Bp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};var $o=class{constructor(e,t){this.globals=e;this.txb=t}globals;txb;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"&&le(t.target,this.contract.createStreamTarget));if(e.length===0)throw new Ot("No create stream transactions");return e.map(t=>new Be(t,this.txb))}getCreationInfoFromMoveCall(e){let t=e.decodeInputString(4),{name:n,groupId:o}=Xe(t),i=e.decodeInputAddress(5),s=e.decodeInputU64(6),c=e.decodeInputU64(7),p=e.decodeInputU64(8),b=e.decodeInputU64(9),S=e.decodeInputU64(10),I=e.decodeInputBool(11),x=e.typeArg(0);return{name:n,groupId:o,recipient:i,timeStart:s,cliff:c,epochInterval:p,totalEpoch:b,amountPerEpoch:S,cancelable:I,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 G("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 Yt(this.globals.envConfig.contract,this.globals)}get feeContract(){return new Me(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 Ho=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new Yt(e.envConfig.contract,e)}globals;txb;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"&&le(t.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&le(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&le(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&le(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&le(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new $o(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 Be(e,this.txb)}};import{TransactionType as Ep}from"@msafe/sui3-utils";var rn=class extends Ft{constructor(t){super(t);this.data=t}data;txType=Ep.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 Go=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(e){let{network:t,transactionBlock:n}=e,o=ve.new(t==="sui:mainnet"?"prod":"dev"),s=new Ho(o,n).decode(),c;switch(s.type){case"CreateStream":c=new on(s.info);break;case"SetAutoClaim":c=new rn({streamId:s.streamId,enabled:s.enabled});break;case"Claim":c=new nn({streamId:s.streamId});break;case"ClaimByProxy":c=new en({streamId:s.streamId});break;case"Cancel":c=new tn({streamId:s.streamId});break;default:throw new Error(`Unknown transaction type: ${s}`)}return{txType:c.txType,txSubType:c.txSubType,intentionData:c.data}}async build(e){let{intentionData:t}=e,n;switch(e.txSubType){case"CreateStream":n=new on(t);break;case"Claim":n=new nn(t);break;case"ClaimByProxy":n=new en(t);break;case"SetAutoClaim":n=new rn(t);break;case"Cancel":n=new tn(t);break;default:throw new Error("not implemented")}return n.build({...e})}};import{TransactionDefaultApplication as Lp,TransactionSubTypes as ol}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Wp}from"@msafe/sui3-utils";import Np from"sort-keys-recursive";var Ee=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Np(this.data))}};var Xo=class a extends Ee{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiGrpcClient:n,account:o}=t;return Wp(n,this.data,o.address)}static fromData(t){return new a(t)}};import{buildObjectTransferTxb as _p}from"@msafe/sui3-utils";var zo=class a extends Ee{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiGrpcClient:n,account:o}=t;return _p(n,this.data,o.address)}static fromData(t){return new a(t)}};var Qo=class{application="msafe-core";supportSDK="@mysten/sui-v2";constructor(){this.application=Lp}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(e){let{account:t,network:n,suiGrpcClient:o}=e,i;switch(e.txSubType){case ol.assets.coin.send:i=Xo.fromData(e.intentionData);break;case ol.assets.object.send:i=zo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiGrpcClient:o,account:t,network:n})}};import{TransactionType as dl}from"@msafe/sui3-utils";var al=!1,sn={ProtocolPackage:"0x1e4a13a0494d5facdbe8473e74127b838c2d446ecec0ce262e2eddafa77259cb",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 Zr(){if(!al)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&&(sn.ProtocolPackage=e),t&&(sn.borrowFee=t),n&&(sn.borrowFeeAddress=n),o&&(sn.pool=o),al=!0}catch(a){console.error(a.message)}}var $t=sn;import{TransactionType as ye}from"@msafe/sui3-utils";import{normalizeStructTag as Up,normalizeSuiAddress as cn}from"@mysten/sui/utils";import{bcs as il}from"@mysten/sui.js/bcs";var Yo=class{constructor(e){this.txb=e}txb;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 Jo(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 Jo(e,this.txb)}},Jo=class a{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;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 cn(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 il.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 cn(e.value.Object.ImmOrOwned.objectId)}return cn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return cn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return cn(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 il.de(t,new Uint8Array(n))}typeArg(e){return Up(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{Transaction as rl}from"@mysten/sui/transactions";import{depositCoinPTB as qp,withdrawCoinPTB as Fp,repayCoinPTB as Kp,borrowCoinPTB as Vp,claimLendingRewardsPTB as sl,getUserAvailableLendingRewards as cl}from"@naviprotocol/lending";async function Ne(a,e,t,n){return await qp(a,e,t,{amount:n}),a}async function ll(a,e,t,n){let[o]=await Fp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function ul(a,e,t,n){let[o]=await Vp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function ts(a,e,t,n){return await Kp(a,e,t,{amount:n}),a}async function ml(a,e){let t=new rl,n=await cl(e,{client:a});return await sl(t,n),t}async function pl(a,e){let t=new rl,n=await cl(e,{client:a});return await sl(t,n,{customCoinReceive:{type:"depositNAVI",depositNAVI:{fallbackReceiveAddress:e}}}),t}var Zo=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await ml(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};var ta=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward and supply",n),await pl(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Hp}from"@mysten/sui/transactions";import{getPool as $p}from"@naviprotocol/lending";async function Jt(a){return $p(a)}var ea=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Hp;console.log("build",this.data);let s=await Jt(n);return await ul(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Gp}from"@mysten/sui/transactions";async function We(a,e,t){let n=await a.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,n),n}var na=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,c=new Gp;console.log("build",this.data);let p=await Jt(i);if(i===0){let[x]=c.splitCoins(c.gas,[s]);return await Ne(c,p,x,s)}let b=await We(n,o.address,p.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${p.suiCoinType} Token`);let S=b.data[0].coinObjectId;if(b.data.length>=2){let x=1;for(;x<b.data.length;)c.mergeCoins(S,[b.data[x].coinObjectId]),x++}return await Ne(c,p,c.object(S),s)}static fromData(t){return new a(t)}};import{Transaction as Xp}from"@mysten/sui/transactions";var oa=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,c=new Xp;console.log("build",this.data);let p=await Jt(i);if(i===0){let[I]=c.splitCoins(c.gas,[s]);return ts(c,p,I,s)}let b=await We(n,o.address,p.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${p.suiCoinType} Token`);let S=b.data[0].coinObjectId;if(b.data.length>=2){let I=1;for(;I<b.data.length;)c.mergeCoins(S,[b.data[I].coinObjectId]),I++}return ts(c,p,c.object(S),s)}static fromData(t){return new a(t)}};import{Transaction as zp}from"@mysten/sui/transactions";var aa=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new zp;console.log("build",this.data);let s=await Jt(n);return await ll(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Qp}from"@mysten/sui/transactions";var ia=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:i}=this.data,s=new Qp;console.log("build",this.data);for(let c=0;c<i.length;c++){let{assetId:p,amount:b}=i[c],S=await Jt(p);if(p===0){let[D]=s.splitCoins(s.gas,[b]);await Ne(s,S,D,b);continue}let I=await We(n,o.address,S.suiCoinType);if(!I.data[0])throw new Error(`Insufficient balance for ${S.suiCoinType} Token`);let x=I.data[0].coinObjectId;if(I.data.length>=2){let D=1;for(;D<I.data.length;)s.mergeCoins(x,[I.data[D].coinObjectId]),D++}await Ne(s,S,s.object(x),b)}return s}static fromData(t){return new a(t)}};import{Transaction as Yp}from"@mysten/sui/transactions";var ra=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return console.log("build",this.data),Yp.from(this.data.content)}static fromData(t){return new a(t)}};var sa=class{application="navi";supportSDK="@mysten/sui";async deserialize(e){if(await Zr(),e.appContext?.content)return{txType:dl.Other,txSubType:"PlainTransaction",intentionData:{content:e.appContext.content,scene:e.appContext.scene||"unknown"}};let{transaction:t}=e,o=new Yo(t).decode();return{txType:dl.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await Zr(),e.txSubType){case"EntryDeposit":o=na.fromData(e.intentionData);break;case"EntryBorrow":o=ea.fromData(e.intentionData);break;case"EntryRepay":o=oa.fromData(e.intentionData);break;case"EntryWithdraw":o=aa.fromData(e.intentionData);break;case"EntryMultiDeposit":o=ia.fromData(e.intentionData);break;case"ClaimReward":o=Zo.fromData(e.intentionData);break;case"EntryClaimAndDeposit":o=ta.fromData(e.intentionData);break;case"PlainTransaction":o=ra.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionSubTypes as Jp,TransactionType as fl}from"@msafe/sui3-utils";import{fromHex as Zp}from"@mysten/bcs";import{Transaction as td}from"@mysten/sui/transactions";import ed from"sort-keys-recursive";var hl="msafe-plain-tx",gl=Jp.others.plain,es=class a{constructor(e){this.data=e}data;application=hl;txType=fl.Other;txSubType=gl;serialize(){return JSON.stringify(ed(this.data))}async build(e){return td.from(Zp(this.data.content))}static fromData(e){return new a(e)}},ca=class{application;supportSDK="@mysten/sui";constructor(){this.application=hl}async deserialize(e){let{content:t}=e.appContext;return{txType:fl.Other,txSubType:gl,intentionData:{content:t}}}async build(e){let{suiClient:t,network:n,account:o}=e;return es.fromData(e.intentionData).build({suiClient:t,network:n,account:o})}};import{SuiClient as yl}from"@mysten/sui/client";import{Transaction as ln}from"@mysten/sui/transactions";import{SuiClient as ma}from"@mysten/sui.js/client";import{RequestManager as id,HTTPTransport as rd,Client as sd}from"@open-rpc/client-js";var nd={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},ns=class extends Error{},la=class extends ns{code;type;constructor(e,t){super(e),this.code=t,this.type=nd[t]??"ServerError"}};function od(a){let e=new URL(a);return e.protocol=e.protocol.replace("http","ws"),e.toString()}var ad={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},ua=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={...ad,...t},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=od(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 la(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 os(e);return this.#i.add(t),await t.subscribe(this),()=>t.unsubscribe(this)}},os=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 ee=class{rpcClient;websocketClient;constructor({url:e,websocket:{url:t,...n}={},rpc:o}){let i=new rd(o?.url??e,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new sd(new id([i])),this.websocketClient=new ua(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()}};import{getFullnodeUrl as cd}from"@mysten/sui/client";import{SuiGrpcClient as ld}from"@mysten/sui/grpc";var ud={"sui:mainnet":"mainnet","sui:testnet":"testnet","sui:devnet":"devnet","sui:localnet":"localnet"};function md(a){return Object.assign(a,{getObject(e){return a.core.getObject(e)},async listCoins(e){let t=await a.core.getCoins({address:e.owner,coinType:e.coinType,cursor:e.cursor??void 0});return{objects:t.objects.map(n=>({coinType:e.coinType??"",objectId:n.id,version:n.version,digest:n.digest,balance:n.balance??"0"})),hasNextPage:t.hasNextPage,cursor:t.cursor}}})}function as(a,e){let t=ud[a],n=new ld({network:t,baseUrl:e??cd(t)});return md(n)}var pd="0x2::sui::SUI",cs=1e8,pa=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;case"@mysten/sui-v2":t.addGrpcHelper(o);break;default:throw new Error(`${o.application}: ${o.supportSDK} SDK not supported`)}}return t}addLegacyHelper(e){this.apps.set(e.application,new ss(e))}addHelper(e){this.apps.set(e.application,new is(e))}addGrpcHelper(e){this.apps.set(e.application,new rs(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}},is=class{constructor(e){this.helper=e}helper;async deserialize(e){let t=new yl({transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=new ma({transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),i=ln.from(o);return this.helper.deserialize({...e,suiClient:t,transaction:i})}async build(e){let t=new yl({transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<cs)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 ln.from(i)}},rs=class{constructor(e){this.helper=e}helper;async deserialize(e){let t=as(e.network,e.clientUrl),n=new ma({transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),i=ln.from(o);return this.helper.deserialize({...e,suiGrpcClient:t,transaction:i})}async build(e){let t=as(e.network,e.clientUrl),{balance:n}=await t.core.getBalance({address:e.account.address,coinType:pd});if(Number(n.balance)<cs)throw new Error("Insufficient gas fee");let o=await this.helper.build({...e,suiGrpcClient:t});o.setSender(e.account.address);let i=await o.build({client:t});return ln.from(i)}},ss=class{constructor(e){this.helper=e}helper;async deserialize(e){let t=new ma({transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})});return this.helper.deserialize({...e,transactionBlock:e.transactionBlock,suiClient:t})}async build(e){let t=new ma({transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<cs)throw new Error("Insufficient gas fee");let i=await(await this.helper.build({...e,suiClient:t})).build({client:t});return ln.from(i)}};import{TransactionType as Id}from"@msafe/sui3-utils";import{getFullnodeUrl as Cd}from"@mysten/sui/client";import{Scallop as xd}from"@scallop-io/sui-scallop-sdk";import{TransactionType as Et}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as Il}from"@scallop-io/sui-scallop-sdk";import{parseStructTag as dd}from"@mysten/sui/utils";var me=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}`))}transaction;scallopClient;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}=dd(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,c)=>(i[s]=c,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 ls}from"@mysten/sui/bcs";import{normalizeStructTag as fd,normalizeSuiAddress as un}from"@mysten/sui/utils";var us=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 c=`${i.MoveCall.package}::${i.MoveCall.module}::${i.MoveCall.function}`,p=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;return c===p?(o.push(s),!0):!1}return!1}),this.cmdIdx=o[n]}moveCall;transaction;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 un(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"&&t.kind!=="Result")throw new Error("not nested or result 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=ls[t];return ls[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 un(e.value.Object.ImmOrOwned.objectId)}return un(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return un(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return un(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 ls.U64.parse(new Uint8Array(t))}typeArg(e){return fd(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},N=us;var ms=class{constructor(e,t){this.splitCoin=e;this.txb=t}splitCoin;txb;getAmountInput(){return this.splitCoin.amounts.map(e=>{if(e.kind==="Input")return Number(N.getPureInputValue(e,"U64"))}).filter(e=>e!==void 0)}},Wt=ms;import{normalizeStructTag as bl,SUI_CLOCK_OBJECT_ID as Tl,SUI_TYPE_ARG as hd}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`},_e={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},Kt={unstakeObligation:(a,e,t)=>a.moveCall(`${_e.id}::user::unstake`,[_e.incentivePools,_e.incentiveAccounts,a.object(e),a.object(t),Tl],[bl(hd)]),redeem_rewards:(a,e,t,n)=>a.moveCall(`${_e.id}::user::redeem_rewards`,[_e.incentivePools,_e.incentiveAccounts,a.object(e),a.object(t),Tl],[bl(n)])};var wl=(a,e)=>{let t=[];for(let n=0;n<a.length;n+=e)t.push(a.slice(n,n+e));return t};var da=class extends me{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(`${Il}::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 N(t,this.transaction))}get helperClaimBorrowV2Reward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new N(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 N(e,this.transaction)}get helperClaimBorrowReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${Il}::user::redeem_rewards`)).map(t=>new N(t,this.transaction))}get helperMint(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::mint::mint`));return new N(e,this.transaction)}get helperUnstakes(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new N(t,this.transaction))}get helperRedeems(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new N(t,this.transaction))}get helperRedeem(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`));return new N(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 N(e,this.transaction)}get helperStake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::stake`));return new N(e,this.transaction)}get helperUnstake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`));return new N(e,this.transaction)}get helperDepositCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new N(e,this.transaction)}get helperWithdrawCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new N(e,this.transaction)}get helperBorrow(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow`));return new N(e,this.transaction)}get helperBorrowWithReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new N(e,this.transaction)}get helperRepay(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::repay::repay`));return new N(e,this.transaction)}decodeMigrateScoin(){return{txType:Et.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:Et.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:Et.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Wt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Et.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 Wt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Et.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLendingScoin(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),t=this.helperBurnScoin.getNestedInputParam(1),n=new Wt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Et.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 Wt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:Et.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:Et.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:Et.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:Et.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:Et.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 Wt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:Et.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 Wt(n,this.transaction).getAmountInput().reduce((s,c)=>s+c,0),i=this.helperRepay.decodeSharedObjectId(1);return{txType:Et.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 Wt(i,this.transaction).getAmountInput().reduce((s,c)=>s+c,0)}if(this.helperStake.moveCall&&t===0){let i=this.helperStake.getNestedInputParam(2);t=new Wt(i,this.transaction).getAmountInput().reduce((s,c)=>s+c,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Et.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:Et.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 Wt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:Et.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 Wt(o,this.transaction).getAmountInput().reduce((i,s)=>i+s,0)}return{txType:Et.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),c=this.utils.parseCoinNameFromType(s);e.push({stakeMarketCoinName:c,stakeAccountId:i})}),this.helperClaimBorrowV2Reward.forEach(o=>{let i=o.decodeSharedObjectId(4),s=o.decodeOwnedObjectId(3),c=this.utils.parseCoinNameFromType(o.typeArg(0));t.push({obligationId:s,obligationKey:i,rewardCoinName:c})}),this.helperClaimBorrowReward.forEach(o=>{let i=o.decodeSharedObjectId(2),s=o.decodeOwnedObjectId(3),c=this.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:s,obligationKey:i,rewardCoinName:c})}),{txType:Et.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as ds}from"@msafe/sui3-utils";var fa=class extends me{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 N(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 N(e,this.transaction)}decodeCreateReferralLink(){return{txType:ds.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:ds.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:ds.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as ne}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as gd}from"@scallop-io/sui-scallop-sdk";var ha=class extends me{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(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`)),t=this.commands.filter(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`)),n=this.commands.filter(c=>this.filterMoveCallCommands(c,`${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(p=>p.$kind==="TransferObjects");if(e.length!==1)return!1;let{objects:t}=e[0].TransferObjects,n=t.filter(p=>p.$kind==="Input").map(({Input:p})=>p);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((p,b)=>p.$kind==="Object"&&o.has(b)).map(p=>p.Object.ImmOrOwnedObject),s=`${this.coreId.veScaObjId}::ve_sca::VeScaKey`,c=wl(i.map(({objectId:p})=>p),50);for(let p=0;p<c.length;p++){let b=c[p];if((await this.scallopClient.scallopSuiKit.queryGetObjects(b,{showType:!0})).some(I=>I.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 N(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 N(e,this.transaction)}get helperExtendStakePeriod(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new N(e,this.transaction)}get helperRedeemSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new N(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 N(e,this.transaction)}get helperOldUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${gd}::user::unstake`));return new N(e,this.transaction)}get helperUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`));return new N(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 N(e,this.transaction)}getMergeSplitVeScaHelper(e){let t=this.commands.find(n=>this.filterMoveCallCommands(n,`${this.coreId.veScaPkgId}::ve_sca::${e}`));return new N(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,c=0;return this.commands.forEach(p=>{this.filterMoveCallCommands(p,e)?(o.push({action:"unstake",helper:new N(p,this.transaction,i)}),i++):this.filterMoveCallCommands(p,t)?(o.push({action:"stake",helper:new N(p,this.transaction,s)}),s++):this.filterMoveCallCommands(p,n)&&(o.push({action:"deactivate",helper:new N(p,this.transaction,c)}),c++)}),o}decodeRedeemSca(){let e=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:ne.Other,type:"RedeemSca",intentionData:{veScaKey:e}}}decodeRenewExpiredVeSca(){let e=this.helperRenewExpired.getNestedInputParam(4),t=this.helperRenewExpired.decodeInputU64(5),n=new Wt(e,this.transaction).getAmountInput().reduce((k,M)=>k+M,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),i=!!this.helperRedeemSca.moveCall,s=[],c=[],p=[];this.helperOldUnstakeObligation.moveCall&&(s=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(c=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(p=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let b=!1,S=!1,I,x,D=[{condition:s,isOld:!0},{condition:c,isOld:!1},{condition:p,isOld:!1}];for(let k=0;k<D.length;k++)D[k].condition.length>1&&([x,I]=D[k].condition,b=!0,S=D[k].isOld);return{txType:ne.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:I,obligationKey:x,veScaKey:o,isHaveRedeem:i,isObligationLocked:b,isOldBorrowIncentive:S}}}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,c=!1,p,b,S=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:i,isOld:!1}];for(let I=0;I<S.length;I++)S[I].condition.length>1&&([b,p]=S[I].condition,s=!0,c=S[I].isOld);return{txType:ne.Other,type:"ExtendStakePeriod",intentionData:{unlockTime:e,obligationId:p,obligationKey:b,veScaKey:t,isObligationLocked:s,isOldBorrowIncentive:c}}}decodePeriodAndStakeMoreSca(){let e=this.helperStakeMoreSca.getNestedInputParam(4),t=this.helperExtendStakePeriod.decodeInputU64(4),n=new Wt(e,this.transaction).getAmountInput().reduce((D,k)=>D+k,0),o=[],i=[],s,c=[];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&&(c=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let p=!1,b=!1,S,I,x=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:c,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([I,S]=x[D].condition,p=!0,b=x[D].isOld);return{txType:ne.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:s,unlockTime:t,obligationId:S,obligationKey:I,isOldBorrowIncentive:b,isObligationLocked:p}}}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 Wt(e,this.transaction).getAmountInput().reduce((D,k)=>D+k,0),o=[],i=[],s,c=[];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&&(c=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let p=!1,b=!1,S,I,x=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:c,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([I,S]=x[D].condition,p=!0,b=x[D].isOld);return{txType:ne.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:S,obligationKey:I,veScaKey:s,isObligationLocked:p,isOldBorrowIncentive:b}}}decodeMergeVesca(){let e=this.getMergeSplitVeScaHelper("merge"),t={targetVeScaKey:e.decodeOwnedObjectId(1),sourceVeScaKey:e.decodeOwnedObjectId(2)};return{txType:ne.Other,type:"MergeVeSca",intentionData:t}}decodeSplitVesca(){let e=this.getMergeSplitVeScaHelper("split"),t={targetVeScaKey:e.decodeOwnedObjectId(1),splitAmount:e.decodeInputU64(4)};return{txType:ne.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:ne.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,c)=>s.$kind==="Object"&&o.has(c)).map(s=>s.Object.ImmOrOwnedObject);return{xType:ne.Other,type:"TransferVeScaKeys",intentionData:{veScaKeys:i}}}};import yd from"sort-keys-recursive";var A=class{constructor(e){this.data=e}data;get application(){return"msafe-core"}serialize(){return JSON.stringify(yd(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 ga=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrow({account:t,scallopClient:n}){let{coinName:o,amount:i,obligationId:s,obligationKey:c}=this.data,p=t.address;return(await this.buildTxWithRefreshObligation(n,{walletAddress:p,obligationId:s,obligationKey:c},async(S,I)=>{let x=await I.borrowQuick(+i,o,s,c);I.transferObjects([x],p)})).txBlock}async build(t){return this.borrow(t)}static fromData(t){return new a(t)}};var ya=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrowWithBoost(t,n){let{obligationId:o,obligationKey:i,veScaKey:s,amount:c,coinName:p}=this.data;return(await this.buildTxWithRefreshObligation(t,{walletAddress:n,obligationId:o,obligationKey:i,veScaKey:s},async(S,I)=>{let x=await I.borrowQuick(+c,p,o,i);I.transferObjects([x],n)})).txBlock}async build(t){return this.borrowWithBoost(t.scallopClient,t.account.address)}static fromData(t){return new a(t)}};var ba=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrowWithReferral({account:t,scallopClient:n}){let o=t.address,{obligationId:i,obligationKey:s,veScaKey:c,coinName:p,amount:b}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:i,obligationKey:s,veScaKey:c},async(I,x)=>{let D=x.claimReferralTicket(p),k=await x.borrowWithReferralQuick(+b,p,D,i,s);x.burnReferralTicket(D,p),x.transferObjects([k],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new a(t)}};import{SUI_TYPE_ARG as bd}from"@mysten/sui/utils";var Ta=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),c=Object.values(await e.query.getObligationAccounts(t)??[]),p=(()=>{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 M=e.utils.parseMarketCoinName(k.coinName);return D[M]||(D[M]=0),D[M]+=k.availableClaimCoin,D},{})})(),b={};Object.entries(o).forEach(([x,D])=>{for(let k=0;k<D.length;k++){let M=D[k];if(!p[x])continue;let L=n.claim(M.id,x);b.sui?b.sui.push(L):b.sui=[L]}});let S=(()=>{let x={};return x.sui=Object.values(p).reduce((D,k)=>D+k,0),c.forEach(D=>{Object.values(D.borrowIncentives).forEach(k=>{k&&k.rewards.forEach(M=>{x[M.coinName]||(x[M.coinName]=0),x[M.coinName]?x[M.coinName]+=M.availableClaimCoin:x[M.coinName]=M.availableClaimCoin})})}),x})();if(s.length>0&&c.length>0)for(let x=0;x<c.length;x++){let D=c[x],k=!1,M=s.find(U=>U.id===D.obligationId)?.keyId,L={};if(M){if(Object.values(D.borrowIncentives).forEach(U=>{if(U){let q=U.rewards.filter(Mt=>{let W=Mt.coinName;return Mt.availableClaimCoin>0&&!L[W]});k=q.length>0,q.forEach(Mt=>{let W=n.claimBorrowIncentive(D.obligationId,M,Mt.coinName);L[Mt.coinName]=!0,b[Mt.coinName]?b[Mt.coinName].push(W):b[Mt.coinName]=[W]})}}),S.sui>0){let U=Kt.redeem_rewards(n,M,D.obligationId,bd);b.sui?b.sui.push(U):b.sui=[U]}if(k&&await Sl(e.query,D.obligationId)){n.unstakeObligation(D.obligationId,M);let q=await e.query.getBindedVeScaKey(D.obligationId);q?n.stakeObligationWithVesca(D.obligationId,M,q):n.stakeObligation(D.obligationId,M)}}}let I=(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 I.length>0&&n.transferObjects(I,t),n.txBlock}async build(e){return this.claimIncentiveRewards(e.scallopClient,e.account.address)}static fromData(e={}){return new a(e)}};var Sa=class a extends A{constructor(t){super(t);this.data=t}data;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 wa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async migrateAndClaim({account:t,scallopClient:n}){let o=t.address,{obligationKey:i,obligationId:s,rewardCoinName:c,veScaKey:p}=this.data,b=n.builder.createTxBlock();b.setSender(o);let S=Kt.redeem_rewards(b,i,s,n.utils.parseCoinType(c));return b.transferObjects([S],o),await b.unstakeObligationQuick(s,i),p?await b.stakeObligationWithVeScaQuick(s,i,p):await b.stakeObligationQuick(s,i),b.txBlock}async build(t){return this.migrateAndClaim(t)}static fromData(t){return new a(t)}};var Ia=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return t.scallopClient.migrateAllMarketCoin(!1,!1)}static fromData(t){return new a(t)}};var Ca=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return t.scallopClient.openObligation(!1)}static fromData(t){return new a(t)}};var xa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async repay({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:c,obligationKey:p}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:c,obligationKey:p},async(S,I)=>{await I.repayQuick(+s,i,c)})).txBlock}async build(t){return this.repay(t)}static fromData(t){return new a(t)}};var Da=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async repayWithBoost({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:c,veScaKey:p}=this.data,b=n.builder.createTxBlock();b.setSender(o);let S=n.constants.whitelist.borrowing.has(i);return S&&await b.unstakeObligationQuick(c,void 0),await b.repayQuick(+s,i,c),S&&await b.stakeObligationWithVeScaQuick(c,void 0,p),b.txBlock}async build(t){return this.repayWithBoost(t)}static fromData(t){return new a(t)}};var ka=class a extends A{constructor(t){super(t);this.data=t}data;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 va=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return t.scallopClient.unstake(this.data.marketCoinName,+this.data.amount,!1)}static fromData(t){return new a(t)}};var Aa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async unstakeAndWithdraw(t,n,o){let i=t.builder.createTxBlock();i.setSender(o);let{stakeAccountId:s,amount:c,coinName:p}=this.data,b=[];for(let S=0;S<s.length;S++){let{id:I,coin:x}=s[S],D=t.utils.parseMarketCoinName(p),[k]=await i.unstakeQuick(x,D,I,!1);if(k){let M=i.withdraw(k,p);b.push(M)}}if(c>0){let S=await i.withdrawQuick(c,p);b.push(S)}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 Ma=class a extends A{constructor(t){super(t);this.data=t}data;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 Oa=class a extends A{constructor(t){super(t);this.data=t}data;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 Pa=class a extends A{constructor(t){super(t);this.data=t}data;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 Ra=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async claimRevenueReferral({account:t,scallopClient:n}){let{veScaKey:o,coins:i}=this.data,s=t.address,c=n.builder.createTxBlock();c.setSender(s);let p=i.map(b=>n.utils.parseCoinNameFromType(b));return await c.claimReferralRevenueQuick(o,p),c.txBlock}async build(t){return this.claimRevenueReferral(t)}static fromData(t){return new a(t)}};var Ba=class a extends A{constructor(t){super(t);this.data=t}data;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 Td}from"@scallop-io/sui-scallop-sdk";var Ea=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async extendPeriodAndStakeMoreSca({account:t,scallopClient:n}){let{amount:o,veScaKey:i,unlockTime:s,obligationId:c,obligationKey:p,isOldBorrowIncentive:b,isObligationLocked:S}=this.data,I=t.address,x=n.builder.createTxBlock();x.setSender(I);let D=await n.utils.selectCoins(o,Td,I),[k,M]=x.takeAmountFromCoins(D,o);return x.extendLockPeriod(i,s),x.extendLockAmount(i,k),x.transferObjects([M],I),!c||!p||(S&&(b?Kt.unstakeObligation(x,c,p):x.unstakeObligation(c,p)),x.stakeObligationWithVesca(c,p,i)),x.txBlock}async build(t){return this.extendPeriodAndStakeMoreSca(t)}static fromData(t){return new a(t)}};var Na=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async extendStakeScaLockPeriod({account:t,scallopClient:n}){let o=t.address,{veScaKey:i,unlockTime:s,obligationId:c,obligationKey:p,isObligationLocked:b,isOldBorrowIncentive:S}=this.data,I=n.builder.createTxBlock();return I.setSender(o),I.extendLockPeriod(i,s),c&&p&&(b&&(S?Kt.unstakeObligation(I,p,c):I.unstakeObligation(c,p)),I.stakeObligationWithVesca(c,p,i)),I.txBlock}async build(t){return this.extendStakeScaLockPeriod(t)}static fromData(t){return new a(t)}};var Wa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,sourceVeScaKey:s}=this.data,[c,p]=await Promise.all([n.getBindedObligationId(i),n.getBindedObligationId(s)]);c&&await t.unstakeObligationQuick(c),p&&await t.unstakeObligationQuick(p),o(t,i,s),c&&await t.stakeObligationWithVeScaQuick(c,void 0,i),p&&await t.stakeObligationWithVeScaQuick(p,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,c,p)=>{s.mergeVeSca(i.object(c),i.object(p))}),i.txBlock}static fromData(t){return new a(t)}};var _a=class a extends A{constructor(t){super(t);this.data=t}data;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 Sd}from"@scallop-io/sui-scallop-sdk";var La=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async renewExpiredStakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,unlockTime:s,veScaKey:c,isHaveRedeem:p,obligation:b,obligationKey:S,isObligationLocked:I,isOldBorrowIncentive:x}=this.data,D=n.builder.createTxBlock();if(D.setSender(o),p){let U=D.redeemSca(c);D.transferObjects([U],o)}let k=await n.builder.utils.selectCoins(i,Sd,o),[M,L]=D.takeAmountFromCoins(k,i);return D.transferObjects([L],o),D.renewExpiredVeSca(c,M,s),!b||!S||(I&&(x?Kt.unstakeObligation(D,S,b):D.unstakeObligation(b,S)),D.stakeObligationWithVesca(b,S,c)),D.txBlock}async build(t){return this.renewExpiredStakeSca(t)}static fromData(t){return new a(t)}};var ja=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,splitAmount:s}=this.data,c=await n.getBindedObligationId(i);c&&await t.unstakeObligationQuick(c),o(t,i,s.toString()),c&&await t.stakeObligationWithVeScaQuick(c,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,c,p)=>{let b=s.splitVeSca(c,p.toString());s.transferObjects([b],o)}),i.txBlock}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as wd}from"@scallop-io/sui-scallop-sdk";var Ua=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async stakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,isObligationLocked:s,isOldBorrowIncentive:c,obligationId:p,obligationKey:b,unlockTime:S,veScaKey:I}=this.data,x=n.builder.createTxBlock();x.setSender(o);let D=await n.utils.selectCoins(i,wd,o),[k,M]=x.takeAmountFromCoins(D,i),L;return I?x.extendLockAmount(I,k):L=x.lockSca(k,S),p&&b&&(s&&(c?Kt.unstakeObligation(x,b,p):x.unstakeObligation(p,b)),x.stakeObligationWithVesca(p,b,I||L)),I||x.transferObjects([L,M],o),x.txBlock}async build(t){return this.stakeSca(t)}static fromData(t){return new a(t)}};var qa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async supplyAndStake({account:t,scallopClient:n}){let o=t.address,{amount:i,coinName:s,stakeAccountId:c}=this.data,p=n.builder.createTxBlock();p.setSender(o);let b=await p.depositQuick(+i,s),S=n.utils.parseMarketCoinName(s);if(n.constants.whitelist.spool.has(S))return p.txBlock;let I=await n.query.getStakeAccounts(S,o),x=c||(I.length>0?I[0].id:void 0);if(x)await p.stakeQuick(b,S,x);else{let D=p.createStakeAccount(S);await p.stakeQuick(b,S,D),p.transferObjects([D],o)}return p.txBlock}async build(t){return this.supplyAndStake(t)}static fromData(t){return new a(t)}};var Fa=class a extends A{constructor(t){super(t);this.data=t}data;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(c=>this.handleAction(i,c)),i.txBlock}static fromData(t){return new a(t)}};var Ka=class a extends A{constructor(t){super(t);this.data=t}data;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(c=>i.objectRef(c)),i.pure.address(o)),i.txBlock}static fromData(t){return new a(t)}};var Va=class a extends A{constructor(t){super(t);this.data=t}data;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 $a=class{application="scallop";supportSDK="@mysten/sui";scallopClient;async initScallopClient(e,t){if(!this.scallopClient){let n=new xd({addressId:"695fcdc084f790c04eb068dc",walletAddress:e,suiClients:[t],fullnodeUrls:[t.transport.rpcClient.requestManager.transports[0]?.uri??Cd("mainnet")]});this.scallopClient=await n.createScallopClient()}}async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;await this.initScallopClient(o.address,n);let i=new da(t,this.scallopClient),s=new fa(t,this.scallopClient),c=new ha(t,this.scallopClient),p=i.decode()||s.decode()||await c.decode();if(!p)throw new Error("Unknown transaction type");return{txType:Id.Other,txSubType:p.type,intentionData:p.intentionData}}async build(e){let{suiClient:t,account:n,network:o,txSubType:i,intentionData:s}=e;await this.initScallopClient(n.address,t);let c;switch(i){case"SupplyLending":c=ka.fromData(s);break;case"WithdrawLending":c=Oa.fromData(s);break;case"Borrow":c=ga.fromData(s);break;case"Repay":c=xa.fromData(s);break;case"DepositCollateral":c=Sa.fromData(s);break;case"WithdrawCollateral":c=Ma.fromData(s);break;case"OpenObligation":c=Ca.fromData(s);break;case"UnstakeSpool":c=va.fromData(s);break;case"ClaimIncentiveReward":c=Ta.fromData(s);break;case"BorrowWithBoost":c=ya.fromData(s);break;case"StakeSca":c=Ua.fromData(s);break;case"ExtendStakePeriod":c=Na.fromData(s);break;case"ExtendPeriodAndStakeMore":c=Ea.fromData(s);break;case"RenewExpStakePeriod":c=La.fromData(s);break;case"WithdrawStakedSca":c=Va.fromData(s);break;case"SupplyAndStakeLending":c=qa.fromData(s);break;case"WithdrawAndUnstakeLending":c=Aa.fromData(s);break;case"RedeemSca":c=_a.fromData(s);break;case"MigrateAndClaim":c=wa.fromData(s);break;case"BorrowWithReferral":c=ba.fromData(s);break;case"CreateReferralLink":c=Ba.fromData(s);break;case"ClaimRevenueReferral":c=Ra.fromData(s);break;case"BindReferral":c=Pa.fromData(s);break;case"MigrateScoin":c=Ia.fromData(s);break;case"RepayWithBoost":c=Da.fromData(s);break;case"MergeVeSca":c=Wa.fromData(s);break;case"SplitVeSca":c=ja.fromData(s);break;case"VeScaObligationBindings":{c=Fa.fromData(s);break}case"TransferVeScaKeys":{c=Ka.fromData(s);break}default:throw new Error("not implemented")}return c.build({suiClient:t,account:n,network:o,scallopClient:this.scallopClient})}};import{TransactionType as of}from"@msafe/sui3-utils";import{TransactionType as dn}from"@msafe/sui3-utils";import{normalizeStructTag as be}from"@mysten/sui/utils";import{API_URL as Ud}from"@suilend/sui-fe";import{TransactionType as _d}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as Ld,LENDING_MARKET_TYPE as jd,SuilendClient as fs}from"@suilend/sdk";import{TransactionType as Le}from"@msafe/sui3-utils";import{fromBase64 as Cl,toHex as xl}from"@mysten/bcs";import{normalizeStructTag as mn}from"@mysten/sui/utils";import{MAX_U64 as je}from"@suilend/sui-fe";import Dl from"bignumber.js";var Ha=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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=mn(e.MintEvent.parsedJson.coin_type.name),n=e.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",t,n),{txType:Le.Other,type:"deposit",intentionData:{coinType:t,value:n}}}decodeWithdraw(){let e={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},t={RedeemEvent:this.simResult.events.find(p=>p.type.includes("lending_market::RedeemEvent"))},n=mn(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 Dl(xl(Cl(this.inputs[i].Pure.bytes)),16).toString(),c=s===je.toString();return console.log("decodeWithdraw - isMax:",c,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",je.toString()),c&&(o=je.toString()),{txType:Le.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let e={borrow_request:this.getMoveCallCommand("borrow_request")},t={BorrowEvent:this.simResult.events.find(p=>p.type.includes("lending_market::BorrowEvent"))},n=mn(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 Dl(xl(Cl(this.inputs[i].Pure.bytes)),16).toString(),c=s===je.toString();return console.log("decodeBorrow - isMax:",c,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",je.toString()),c&&(o=je.toString()),{txType:Le.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let e={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},t=mn(e.RepayEvent.parsedJson.coin_type.name),n=e.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",t,n),{txType:Le.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=mn(o.parsedJson.coin_type.name),s=o.parsedJson.liquidity_amount;t[i]=`${+(t[i]??"0")+ +s}`}return console.log("Decoder.decodeClaimRewards",t),{txType:Le.Other,type:"claim",intentionData:{value:t}}}decodeClaimAndDeposit(){return{txType:Le.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as vd}from"@mysten/sui/transactions";import kd from"sort-keys-recursive";var _t=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(kd(this.data))}};var Ga=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("BorrowIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new vd;return await i.borrowAndSendToUser(o.address,s.id,c.id,this.data.coinType,this.data.value,p),p}static fromData(t){return console.log("BorrowIntention.fromData",t),new a(t)}};import{Transaction as Rd}from"@mysten/sui/transactions";import{normalizeStructTag as Ad}from"@mysten/sui/utils";import{Side as pn}from"@suilend/sdk";import{isSendPoints as Md}from"@suilend/sui-fe";import Od from"bignumber.js";var Pd=(a,e)=>{let t={[pn.DEPOSIT]:[],[pn.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[pn.DEPOSIT,pn.BORROW].forEach(o=>{let i=o===pn.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,s=e.userRewardManagers.find(c=>c.poolRewardManagerId===i.id);s&&(t[o]=i.poolRewards.map((c,p)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(p),rewardCoinType:Ad(c.coinType.name),side:o})).filter(c=>!Md(c.rewardCoinType)&&!!s.rewards[Number(c.rewardIndex)]&&new Od(s.rewards[Number(c.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},Xa=Pd;var za=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("ClaimIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Rd;return i.claimRewardsAndSendToUser(o.address,s.id,Xa(i,c),p),p}static fromData(t){return console.log("ClaimIntention.fromData",t),new a(t)}};import{Transaction as Bd}from"@mysten/sui/transactions";var Qa=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("ClaimAndDepositIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Bd;return i.claimRewardsAndDeposit(o.address,s.id,Xa(i,c),p),p}static fromData(t){return console.log("ClaimAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Ed}from"@mysten/sui/transactions";var Ya=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;console.log("DepositIntention.build",n,o,i,s,c);let p=new Ed;return await i.depositIntoObligation(o.address,this.data.coinType,this.data.value,p,s?.id),p}static fromData(t){return console.log("DepositIntention.fromData",t),new a(t)}};import{Transaction as Nd}from"@mysten/sui/transactions";var Ja=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("RepayIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Nd;return await i.repayIntoObligation(o.address,c.id,this.data.coinType,this.data.value,p),p}static fromData(t){return console.log("RepayIntention.fromData",t),new a(t)}};import{Transaction as Wd}from"@mysten/sui/transactions";var Za=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("WithdrawIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Wd;return await i.withdrawAndSendToUser(o.address,s.id,c.id,this.data.coinType,this.data.value,p),p}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};var ti=async(a,e)=>{let t=await fs.initialize(Ld,jd,a),n=await fs.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(i=>fs.getObligation(i.obligationId,t.lendingMarket.$typeArgs,a)));return console.log("XXX getUtils - suilendClient:",t,"obligations:",o,"obligationOwnerCaps:",n),{suilendClient:t,obligationOwnerCaps:n,obligations:o}},ei=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await ti(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SuilendAppHelper.deserialize - simResult:",i,"utils:",this.utils,"suiClient:",n);let c=new Ha(t,i).decode();return{txType:_d.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await ti(i,s));let c;switch(n){case"deposit":c=Ya.fromData(o);break;case"withdraw":c=Za.fromData(o);break;case"borrow":c=Ga.fromData(o);break;case"repay":c=Ja.fromData(o);break;case"claim":c=za.fromData(o);break;case"claimAndDeposit":c=Qa.fromData(o);break;default:throw new Error("not implemented")}let p=window.localStorage.getItem("obligationId"),b=this.utils.obligations?.find(I=>I.id===p)??this.utils.obligations?.[0],S=this.utils.obligationOwnerCaps?.find(I=>I.obligationId===b?.id);return c.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,obligationOwnerCap:S,obligation:b})}};var hs=async(a,e)=>{let t=await ti(a,e),n=await fetch(`${Ud}/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(c=>[c.LIQUID_STAKING_INFO.type,c.LIQUID_STAKING_INFO]));return{...t,LIQUID_STAKING_INFO_MAP:s}};var ni=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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:dn.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:dn.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:dn.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:dn.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:dn.Other,type:"unstake",intentionData:{amount:n,inCoinType:t}}}};import{Transaction as Kd}from"@mysten/sui/transactions";import{LstClient as kl,convertLstsAndRebalanceAndSendToUser as Vd}from"@suilend/springsui-sdk";import Fd from"sort-keys-recursive";var Vt=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Fd(this.data))}};var oi=class a extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("ConvertIntention.build",n,o,i,s,c,p);let b=await kl.initialize(n,Object.values(s).find(x=>x.type===this.data.inCoinType)),S=await kl.initialize(n,Object.values(s).find(x=>x.type===this.data.outCoinType)),I=new Kd;return Vd(b,S,I,o.address,this.data.amount),I}static fromData(t){return console.log("ConvertIntention.fromData",t),new a(t)}};import{Transaction as $d}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Hd,sendObligationToUser as Gd}from"@suilend/sdk";import{LstClient as vl,convertLstsAndRebalance as Xd}from"@suilend/springsui-sdk";var ai=class a extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("ConvertAndDepositIntention.build",n,o,i,s,c,p);let b=await vl.initialize(n,Object.values(s).find(M=>M.type===this.data.inCoinType)),S=await vl.initialize(n,Object.values(s).find(M=>M.type===this.data.outCoinType)),I=new $d,{obligationOwnerCapId:x,didCreate:D}=Hd(i,I,c),k=Xd(b,S,I,o.address,this.data.amount);return i.deposit(k,this.data.outCoinType,x,I),D&&Gd(x,o.address,I),I}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new a(t)}};import{Transaction as zd}from"@mysten/sui/transactions";import{LstClient as Qd}from"@suilend/springsui-sdk";var ii=class a extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("StakeIntention.build",n,o,i,s,c,p);let b=await Qd.initialize(n,Object.values(s).find(I=>I.type===this.data.outCoinType)),S=new zd;return b.mintAmountAndRebalanceAndSendToUser(S,o.address,this.data.amount),S}static fromData(t){return console.log("StakeIntention.fromData",t),new a(t)}};import{Transaction as Yd}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Jd,sendObligationToUser as Zd}from"@suilend/sdk";import{LstClient as tf}from"@suilend/springsui-sdk";var ri=class a extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("StakeAndDepositIntention.build",n,o,i,s,c,p);let b=await tf.initialize(n,Object.values(s).find(k=>k.type===this.data.outCoinType)),S=new Yd,{obligationOwnerCapId:I,didCreate:x}=Jd(i,S,c),D=b.mintAmountAndRebalance(S,o.address,this.data.amount);return i.deposit(D,this.data.outCoinType,I,S),x&&Zd(I,o.address,S),S}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new a(t)}};import{Transaction as ef}from"@mysten/sui/transactions";import{LstClient as nf}from"@suilend/springsui-sdk";var si=class a extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("UnstakeIntention.build",n,o,i,s,c,p);let b=await nf.initialize(n,Object.values(s).find(I=>I.type===this.data.inCoinType)),S=new ef;return b.redeemAmountAndRebalanceAndSendToUser(S,o.address,this.data.amount),S}static fromData(t){return console.log("UnstakeIntention.fromData",t),new a(t)}};var ci=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await hs(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SpringSuiAppHelper.deserialize",i);let c=new ni(t,i).decode();return{txType:of.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await hs(i,s));let c;switch(n){case"stake":c=ii.fromData(o);break;case"stakeAndDeposit":c=ri.fromData(o);break;case"convert":c=oi.fromData(o);break;case"convertAndDeposit":c=ai.fromData(o);break;case"unstake":c=si.fromData(o);break;default:throw new Error("not implemented")}return c.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 cf}from"@msafe/sui3-utils";import{TransactionType as Al}from"@msafe/sui3-utils";var li=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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:Al.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:Al.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as rf}from"@alphafi/stsui-sdk";var ui=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},c=await new rf(i).mint(o,n.address);return c.setGasBudget(1e8),c}static fromData(t){return console.log("MintIntention.fromData",t),new a(t)}};import{LST as sf}from"@alphafi/stsui-sdk";var mi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},c=await new sf(i).redeem(o,n.address);return c.setGasBudget(1e8),c}static fromData(t){return console.log("RedeemIntention.fromData",t),new a(t)}};var pi=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 li(t,o).decode();return{txType:cf.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=ui.fromData(e.intentionData);break;case"redeem":n=mi.fromData(e.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:t})}};import{TransactionType as Of}from"@msafe/sui3-utils";import{TurbosSdk as Pf}from"turbos-clmm-sdk";import{TransactionType as Lt}from"@msafe/sui3-utils";import{fromBase64 as Ue}from"@mysten/bcs";import{bcs as qe}from"@mysten/sui/bcs";import{BN as uf}from"turbos-clmm-sdk";var Ht={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},Gt={PackageId:"0xdee9"};var mf=(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}`)}},di=class{constructor(e,t,n){this.txb=e;this.turbosSdk=t;this.config=n}txb;turbosSdk;config;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(`${Gt.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${Gt.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=mf(t,n,this.swap1Layer,this.swap2Layer),i=o.map((D,k)=>{let M=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(k)),L=this.helper.decodeInputU128(this.helper.getInputsIndex(4+k+t)),U=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new uf(L.toString()));return{pool:M,a2b:D,nextTickIndex:U}}),s=o[0]||t===1?e.MoveCall.typeArguments[0]:e.MoveCall.typeArguments[1],c=t===1?e.MoveCall.typeArguments[4]:o[0]?e.MoveCall.typeArguments[1]:e.MoveCall.typeArguments[0],p=this.helper.decodeInputAddress(this.helper.getInputsIndex(6+2*t)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(7+2*t)),S=this.helper.decodeInputBool(this.helper.getInputsIndex(5+2*t)),I=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:c,address:p,amountA:S?I:x,amountB:S?x:I,amountSpecifiedIsInput:S,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)),c=this.helper.decodeInputU32(this.helper.getInputsIndex(6)),p=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:p?-c:c,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)),c=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:c}}}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),c=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:c}}}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 c=s.decodeInputU64(s.getInputsIndex(4)),p=s.decodeInputU64(s.getInputsIndex(5));o[c]=p});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)),c=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(5)),p=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 S=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(3))||0,I=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:(c/(100-t)*100).toFixed(0),slippage:t,address:e,collectAmountA:S,collectAmountB:I,rewardAmounts:b,deadline:p}}}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),c=this.decreaseLiquidityHelper.decodeInputU64(6),p=this.collectRewardHelper.map(I=>I.decodeInputU64(5)),b=this.collectFeeHelper.decodeInputU64(3)||0,S=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:S,rewardAmounts:p,deadline:c}}}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 pe(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 pe(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 pe(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 pe(e,this.txb)}get swapExactBaseForQuoteHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Gt.PackageId}::clob_v2::swap_exact_base_for_quote`:!1);return new pe(e,this.txb)}get swapExactQuoteForBaseHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Gt.PackageId}::clob_v2::swap_exact_quote_for_base`:!1);return new pe(e,this.txb)}},pe=class{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;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(qe.u128().parse(Uint8Array.from(Ue(this.inputs[e].Pure.bytes))))}decodeInputU64(e){return Number(qe.u64().parse(Uint8Array.from(Ue(this.inputs[e].Pure.bytes))))}decodeInputU32(e){return Number(qe.u32().parse(Uint8Array.from(Ue(this.inputs[e].Pure.bytes))))}decodeInputU8(e){return Number(qe.u8().parse(Uint8Array.from(Ue(this.inputs[e].Pure.bytes))))}decodeInputAddress(e){return qe.Address.parse(Uint8Array.from(Ue(this.inputs[e].Pure.bytes)))}decodeInputBool(e){return qe.bool().parse(Uint8Array.from(Ue(this.inputs[e].Pure.bytes)))}shortTypeArg(e){return this.moveCall.MoveCall.typeArguments[e]}txArg(e){return this.moveCall.MoveCall.arguments[e]}};import{TurbosSdk as pf}from"turbos-clmm-sdk";var fi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new pf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,tickLower:b,tickUpper:S,deadline:I,txb:x}=this.data;return n.pool.addLiquidity({pool:o,slippage:p,address:i,amountA:s,amountB:c,tickLower:b,tickUpper:S,deadline:I,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as df}from"turbos-clmm-sdk";var hi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new df(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 ff}from"turbos-clmm-sdk";var gi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new ff(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,collectAmountA:c,collectAmountB:p,deadline:b,txb:S}=this.data;return n.pool.collectFee({pool:o,address:i,collectAmountA:c,collectAmountB:p,nft:s,deadline:b,txb:S})}static fromData(t){return new a(t)}};import{TurbosSdk as hf}from"turbos-clmm-sdk";var yi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new hf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,rewardAmounts:c,deadline:p,txb:b}=this.data;return n.pool.collectReward({pool:o,address:i,rewardAmounts:c,nft:s,deadline:p,txb:b})}static fromData(t){return new a(t)}};import{TurbosSdk as gf}from"turbos-clmm-sdk";var bi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new gf(t.network.replace("sui:",""),t.suiClient),{fee:o,address:i,tickLower:s,tickUpper:c,sqrtPrice:p,slippage:b,coinTypeA:S,coinTypeB:I,amountA:x,amountB:D,deadline:k,txb:M}=this.data;return n.pool.createPool({fee:o,amountA:x,amountB:D,address:i,tickLower:s,tickUpper:c,sqrtPrice:p,slippage:b,coinTypeA:S,coinTypeB:I,deadline:k,txb:M})}static fromData(t){return new a(t)}};import{TurbosSdk as yf}from"turbos-clmm-sdk";var Ti=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new yf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,nft:b,decreaseLiquidity:S,deadline:I,txb:x}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:p,address:i,amountA:s,amountB:c,nft:b,decreaseLiquidity:S,deadline:I,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as bf}from"turbos-clmm-sdk";var Si=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new bf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,nft:b,decreaseLiquidity:S,deadline:I}=this.data,{txb:x,coinA:D,coinB:k}=await n.pool.decreaseLiquidityWithReturn({pool:o,slippage:p,address:i,amountA:s,amountB:c,nft:b,decreaseLiquidity:S,deadline:I});return x.transferObjects([D,k],this.data.address),x}static fromData(t){return new a(t)}};import{TurbosSdk as Tf}from"turbos-clmm-sdk";var wi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Tf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,nft:b,deadline:S,txb:I}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:p,address:i,amountA:s,amountB:c,nft:b,deadline:S,txb:I})}static fromData(t){return new a(t)}};import{Transaction as Sf}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as wf}from"@mysten/sui/utils";var Ii=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Sf;return n.moveCall({target:`${Ht.PackageId}::claim::claim`,typeArguments:[Ht.turbosCoinType],arguments:[n.object(Ht.Claim),n.object(wf)]}),n}static fromData(t){return new a(t)}};import{Transaction as If}from"@mysten/sui/transactions";var Ci=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new If;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 Cf}from"@mysten/sui/transactions";import{TurbosSdk as xf}from"turbos-clmm-sdk";var xi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new xf(t.network.replace("sui:",""),t.suiClient),o=new Cf;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 Df}from"turbos-clmm-sdk";var Di=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Df(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 kf}from"turbos-clmm-sdk";var ki=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new kf(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:i,coinTypeB:s,address:c,amountA:p,amountB:b,slippage:S,amountSpecifiedIsInput:I,deadline:x,txb:D}=this.data;return n.trade.swap({routes:o,coinTypeA:i,coinTypeB:s,address:c,amountA:p,amountB:b,amountSpecifiedIsInput:I,slippage:S,deadline:x,txb:D})}static fromData(t){return new a(t)}};import{TurbosSdk as Af}from"turbos-clmm-sdk";import{Transaction as Ml}from"@mysten/sui/transactions";import{normalizeSuiObjectId as Ol}from"@mysten/sui/utils";import{unstable_getObjectId as vf}from"turbos-clmm-sdk";var fn=class{constructor(e){this.turbosSdk=e}turbosSdk;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=[],c=0;return o.sort((p,b)=>Number(b.balance)-Number(p.balance)).some(p=>c>=n?!0:(c+=Number(p.balance),s.push(p),!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:`${Gt.PackageId}::custodian_v2::AccountCap`}});return t.data[0]?.data?vf(t.data[0].data):void 0}createAccount(e){let[t]=e.moveCall({typeArguments:[],target:`${Gt.PackageId}::clob_v2::create_account`,arguments:[]});return t}zero(e,t){return t.moveCall({typeArguments:[e],target:"0x2::coin::zero",arguments:[]})}};var Pl=89,Rl=1e6,Bl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,c=new Ml,p=new fn(s),b=await p.getCoinsData(i,t,o),[S,I]=p.splitAndMergeCoin(b,o,c);if(!S)throw new Error(`Not enough balance: ${t}`);let x=await p.IsAccountCap(i),D=x?c.object(x):p.createAccount(c),[k,M,L]=c.moveCall({typeArguments:[e,t],target:`${Gt.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[c.object(String(n)),c.pure.u64(Pl),D,c.pure.u64(o),c.object(Ol("0x6")),S]});return I&&c.transferObjects([I],c.pure.address(i)),c.transferObjects([k],c.pure.address(i)),c.transferObjects([M],c.pure.address(i)),x||c.transferObjects([D],c.pure.address(i)),c.setSenderIfNotSet(i),c.setGasBudget(Rl),c},El=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,c=new Ml,p=new fn(s),b=await p.getCoinsData(i,e,o),[S,I]=p.splitAndMergeCoin(b,o,c);if(!S)throw new Error(`Not enough balance: ${e}`);let x=await p.IsAccountCap(i),D=x?c.object(x):p.createAccount(c),k=p.zero(t,c),[M,L,U]=c.moveCall({typeArguments:[e,t],target:`${Gt.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[c.object(String(n)),c.pure.u64(Pl),D,c.pure.u64(o),S,k,c.object(Ol("0x6"))]});return I&&c.transferObjects([I],c.pure.address(i)),c.transferObjects([M],c.pure.address(i)),c.transferObjects([L],c.pure.address(i)),x||c.transferObjects([D],c.pure.address(i)),c.setSenderIfNotSet(i),c.setGasBudget(Rl),c};var vi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Af(t.network.replace("sui:",""),t.suiClient);return await El({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};import{TurbosSdk as Mf}from"turbos-clmm-sdk";var Ai=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Mf(t.network.replace("sui:",""),t.suiClient);return await Bl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};var Mi=class{application="turbos";supportSDK="@mysten/sui";async deserialize(e){console.log(e,"input");let t=new Pf(e.network.replace("sui:","")),n=await t.contract.getConfig(),{transaction:o,account:i}=e,c=await new di(o,t,n).decode(i.address);return{txType:Of.Other,txSubType:c.type,intentionData:c.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=bi.fromData(e.intentionData);break;case"AddLiquidity":i=fi.fromData(e.intentionData);break;case"IncreaseLiquidity":i=wi.fromData(e.intentionData);break;case"DecreaseLiquidity":i=Ti.fromData(e.intentionData);break;case"DecreaseLiquidityWithReturn":i=Si.fromData(e.intentionData);break;case"RemoveLiquidity":i=xi.fromData(e.intentionData);break;case"removeLiquidityWithReturn":i=Di.fromData(e.intentionData);break;case"CollectFee":i=gi.fromData(e.intentionData);break;case"CollectReward":i=yi.fromData(e.intentionData);break;case"Burn":i=hi.fromData(e.intentionData);break;case"Swap":i=ki.fromData(e.intentionData);break;case"PrixJoin":i=Ci.fromData(e.intentionData);break;case"PrixClaim":i=Ii.fromData(e.intentionData);break;case"SwapExactBaseForQuote":i=vi.fromData(e.intentionData);break;case"SwapExactQuoteForBase":i=Ai.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Lf}from"@msafe/sui3-utils";import{TransactionType as gs}from"@msafe/sui3-utils";import{bcs as Nl}from"@mysten/sui.js/bcs";import{normalizeStructTag as Ef,normalizeSuiAddress as hn}from"@mysten/sui.js/utils";var Rf={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},At=Rf;var Oi=class{constructor(e){this.txb=e}txb;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(`${At.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${At.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${At.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:gs.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:gs.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:gs.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(At.packageId));return new ys(e,this.txb)}},ys=class a{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;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 hn(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 Nl.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 hn(e.value.Object.ImmOrOwned.objectId)}return hn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return hn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return hn(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 Nl.de(t,new Uint8Array(n))}typeArg(e){return Ef(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as Nf}from"@mysten/sui.js/transactions";var Pi=class a extends zt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(t);let n=new Nf,{ticketId:o}=this.data;return n.moveCall({target:`${At.packageId}::native_pool::burn_ticket`,arguments:[n.object(At.poolObjectId),n.object(At.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Wf}from"@mysten/sui.js/transactions";var Ri=class a extends zt{constructor(t){super(t);this.data=t}data;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:`${At.packageId}::native_pool::stake`,arguments:[n.object(At.poolObjectId),n.object(At.metadataObjectId),n.object(At.systemStateObjectId),i]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as _f}from"@mysten/sui.js/transactions";var Bi=class a extends zt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(t);let n=new _f,{amount:o}=this.data,i=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[s,...c]=i.filter(S=>S.coinType.split("::")[0]===At.certType.split("::")[0]),p=n.object(s.coinObjectId);c.length&&n.mergeCoins(p,c.map(S=>n.object(S.coinObjectId)));let b=n.splitCoins(n.object(s.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${At.packageId}::native_pool::unstake`,arguments:[n.object(At.poolObjectId),n.object(At.metadataObjectId),n.object(At.systemStateObjectId),b]}),n}static fromData(t){return new a(t)}};var Ei=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(e){let{transactionBlock:t}=e,o=new Oi(t).decode();return{txType:Lf.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case"Stake":o=Ri.fromData(e.intentionData);break;case"UnStake":o=Bi.fromData(e.intentionData);break;case"ClaimTicket":o=Pi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionType as Zf}from"@msafe/sui3-utils";import{asIntN as Wl}from"@cetusprotocol/common-sdk";import{TransactionType as de}from"@msafe/sui3-utils";import{fromBase64 as gn}from"@mysten/bcs";import{bcs as yn}from"@mysten/sui/bcs";var Ni=class{constructor(e,t){this.transaction=e;this.appContext=t}transaction;appContext;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:de.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,1)),lowerTick:Number(Wl(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(Wl(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:de.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:de.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:de.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:de.Other,type:"CollectRewards",intentionData:{pool:e[0].pool,position:e[0].position,collectRewardTokens:e.map(t=>t.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:de.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let e=this.getFeeCallData();return{txType:de.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:de.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(yn.u32().parse(Uint8Array.from(gn(this.inputs[e].Pure.bytes))))}getU64(e){return yn.u64().parse(Uint8Array.from(gn(this.inputs[e].Pure.bytes)))}getU128(e){return yn.u128().parse(Uint8Array.from(gn(this.inputs[e].Pure.bytes)))}getBoolean(e){return yn.bool().parse(Uint8Array.from(gn(this.inputs[e].Pure.bytes)))}getAddress(e){return yn.Address.parse(Uint8Array.from(gn(this.inputs[e].Pure.bytes)))}getTypeArguments(e){return e.MoveCall.typeArguments||[]}getInputIndex(e,t){return e.MoveCall.arguments[t].Input}};import{TransactionType as $f}from"@msafe/sui3-utils";import{buildTx as qf,getQuote as Ff}from"@bluefin-exchange/bluefin7k-aggregator-sdk";import{BN as Te,ClmmPoolUtil as Kf}from"@firefly-exchange/library-sui";import{Decimal as Vf}from"turbos-clmm-sdk";import{SuiClient as jf}from"@firefly-exchange/library-sui";import{OnChainCalls as Uf}from"@firefly-exchange/library-sui/spot";var _l={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x67b34b728c4e28e704dcfecf7c5cf55c7fc593b6c65c20d1836d97c209c1928a"}},ae=(a,e)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let t=new jf({url:_l.rpc});return new Uf(t,_l.objects,{address:e.address,isUIWallet:!1})};var Pt=class{static async OpenPosition(e,t,n){let o=ae(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=ae(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=ae(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=ae(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=ae(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=ae(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=ae(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=ae(n,t),i=await Ff({tokenIn:e.tokenIn.address,tokenOut:e.tokenOut.address,amountIn:new Vf(e.amountIn).mul(10**e.tokenIn.decimals).toString()}),s=await qf({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{...Kf.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 Wi=class a extends w{constructor(t){super(t);this.data=t}data;txType=$f.Other;txSubType="Aggregator7KSwap";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.aggregator7KSwap(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Hf}from"@msafe/sui3-utils";var _i=class a extends w{constructor(t){super(t);this.data=t}data;txType=Hf.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.closePosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Gf}from"@msafe/sui3-utils";var Li=class a extends w{constructor(t){super(t);this.data=t}data;txType=Gf.Other;txSubType="CollectFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Xf}from"@msafe/sui3-utils";var ji=class a extends w{constructor(t){super(t);this.data=t}data;txType=Xf.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectRewards(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as zf}from"@msafe/sui3-utils";var Ui=class a extends w{constructor(t){super(t);this.data=t}data;txType=zf.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Qf}from"@msafe/sui3-utils";var qi=class a extends w{constructor(t){super(t);this.data=t}data;txType=Qf.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.OpenPosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Yf}from"@msafe/sui3-utils";var Fi=class a extends w{constructor(t){super(t);this.data=t}data;txType=Yf.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.provideLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Jf}from"@msafe/sui3-utils";var Ki=class a extends w{constructor(t){super(t);this.data=t}data;txType=Jf.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.removeLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};var Vi=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 Ni(t,n).decode();return{txType:Zf.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=qi.fromData(e.intentionData);break;case"ProvideLiquidity":i=Fi.fromData(e.intentionData);break;case"RemoveLiquidity":i=Ki.fromData(e.intentionData);break;case"ClosePosition":i=_i.fromData(e.intentionData);break;case"CollectFee":i=Li.fromData(e.intentionData);break;case"CollectRewards":i=ji.fromData(e.intentionData);break;case"CollectRewardsAndFee":i=Ui.fromData(e.intentionData);break;case"Aggregator7KSwap":i=Wi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Lh}from"@msafe/sui3-utils";import{MmtSDK as ch}from"@mmt-finance/clmm-sdk";import{Transaction as lh}from"@mysten/sui/transactions";var R=Tu(jl());import{convertI32ToSigned as Ts,TickMath as Fl}from"@mmt-finance/clmm-sdk/dist/utils/math/tickMath";import ah from"bignumber.js";var th="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Nt=a=>a!=="0x2::sui::SUI"?a:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",eh=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},nh=(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")},oh=(a,e,t,n)=>{if(a===th){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=nh(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 Ul(a,e,t,n,o){let i=await eh({suiClient:a.rpcClient,address:e,type:t});return oh(Nt(t),i.map(c=>({balance:BigInt(c.balance),objectId:c.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 ql({sdk:a,address:e,positionId:t,pool:n,txb:o,targetCoinType:i,slippage:s}){let c={objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType},p=n.rewarders.map(S=>S.coinType);p.length>0&&(console.log("claimRewardsAsTargetCoin input",{pool:c,positionId:t,rewarderCoinTypes:p,targetCoinType:i,slippage:s,toAddress:e}),await a.Pool.claimRewardsAs({txb:o,pool:c,positionId:t,rewarderCoinTypes:p,targetCoinType:i,slippage:s,toAddress:e}));let b=await a.Pool.getAllPools();return await a.Pool.claimFeeAs({txb:o,pool:c,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 ih(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 rh(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 Kl=(a,e,t)=>{let n=Ts(t?a+a%(e??1):a-a%(e??1));return n>0?new R.default(ih(n)):new R.default(rh(n))};function Vl(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 Zt({address:a,coinType:e,coinAmount:t,coinDecimals:n,tx:o,mmt:i}){let s=Vl(t,n),c;return Number(t)?c=await Ul(i,a,Nt(e),s,o):[c]=o.moveCall({target:"0x2::coin::zero",typeArguments:[e],arguments:[]}),c}function $l({mmt:a,tx:e,poolModel:t,selectedLowTick:n,selectedHighTick:o}){let i=Kl(Ts(n),t.tickSpacing),s=Kl(Ts(o),t.tickSpacing);return a.Position.openPosition(e,t,i.toString(),s.toString())}var sh=(a,e)=>{let n=1e4-Math.floor(e*100);return a*BigInt(n)/BigInt(1e4)};function $i(a,e,t){let n=Vl(a,e);return Number(a)===0?BigInt(0):sh(n,t)}async function we({poolId:a,currentSqrtPrice:e,tokenX:t,tokenY:n,slippagePercentage:o,isTokenX:i,suiClient:s}){let p=(await s.getObject({id:a,options:{showContent:!0}}))?.data?.content?.fields?.sqrt_price??e,b=Fl.sqrtPriceX64ToPrice(new R.default(p?.toString()),t.decimals,n.decimals),S=i?(100-o)/100:(100+o)/100,I=Fl.priceToSqrtPriceX64(b.mul(S),t.decimals,n.decimals);return BigInt(I.toString())}var Hl=async(a,e,t,n,o,i,s,c,p,b)=>{let S=await Zt({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),I=await Zt({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=$l({mmt:a,tx:e,poolModel:x,selectedLowTick:c,selectedHighTick:p}),k=$i(n,i.tokenX.decimals,b),M=$i(o,i.tokenY.decimals,b);a.Pool.addLiquidity(e,x,D,S,I,k,M,t),e.transferObjects([D],e.pure.address(t))},Gl=async(a,e,t,n,o,i,s,c,p,b,S)=>{try{let I=await Zt({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:Nt(s.tokenX.coinType),tokenYType:Nt(s.tokenY.coinType),tickSpacing:s.tickSpacing},D=$l({mmt:a,tx:e,poolModel:x,selectedLowTick:c,selectedHighTick:p}),k=await we({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:I,isXtoY:i,limitSqrtPrice:k,slippagePercentage:S,transferToAddress:n,useMvr:!0}),e.transferObjects([D],e.pure.address(n))}catch(I){console.error(I)}},Xl=async(a,e,t,n,o,i,s,c)=>{let p=await Zt({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),b=await Zt({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),S={objectId:i.poolId,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},I=$i(n,i.tokenX.decimals,c),x=$i(o,i.tokenY.decimals,c);a.Pool.addLiquidity(e,S,s,p,b,I,x,t)},zl=async(a,e,t,n,o,i,s,c,p)=>{try{let b=await Zt({mmt:a,address:t,coinType:o?i.tokenX.coinType:i.tokenY.coinType,coinAmount:n,coinDecimals:o?i.tokenX.decimals:i.tokenY.decimals,tx:e}),S={objectId:i.poolId,tokenXType:i.tokenX.coinType,tokenYType:i.tokenY.coinType,tickSpacing:i.tickSpacing},I=await we({suiClient:a.rpcClient,poolId:i.poolId,currentSqrtPrice:i.currentSqrtPrice,tokenX:i.tokenX,tokenY:i.tokenY,slippagePercentage:c,isTokenX:o});await a.Pool.addLiquiditySingleSidedV2({txb:e,pool:S,position:s,inputCoin:b,isXtoY:o,limitSqrtPrice:I,slippagePercentage:p,transferToAddress:t})}catch(b){throw console.error(b),b}},Ql=(a,e)=>BigInt(e===100?a:new ah(a).multipliedBy(e/100).toFixed(0)),Yl=async(a,e,t,n,o,i)=>{let s=Ql(t.liquidity,o),c=n.tokenX.coinType,p=n.tokenY.coinType,b={objectId:n?.poolId,tokenXType:c,tokenYType:p};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:c})=>{let p=Ql(t.liquidity,o),b=Nt(n.tokenX.coinType),S=Nt(n.tokenY.coinType),I=Nt(s)===S,x={objectId:n?.poolId,tokenXType:b,tokenYType:S},{removeLpCoinA:D,removeLpCoinB:k}=a.Pool.removeLiquidity(i,x,t.objectId,p,BigInt(0),BigInt(0)),M=await we({suiClient:a.rpcClient,poolId:n.poolId,currentSqrtPrice:n.currentSqrtPrice,tokenX:n.tokenX,tokenY:n.tokenY,isTokenX:I,slippagePercentage:c}),L=I?D:k,U=i.moveCall({target:"0x2::coin::value",arguments:[L],typeArguments:[I?b:S]});i.transferObjects([I?k:D],e),a.Pool.swapV2({txb:i,transferToAddress:e,pool:x,limitSqrtPrice:M,amount:U,inputCoin:L,isXtoY:I}),Se(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)};var Hi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=ch.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:c,selectedLowTick:p,selectedHighTick:b,slippage:S}=n,I=new lh;return await Hl(t,I,o,i,s,c,c.poolId,p,b,S),I}static fromData(t){return new a(t)}};import{MmtSDK as uh}from"@mmt-finance/clmm-sdk";import{Transaction as mh}from"@mysten/sui/transactions";var Gi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=uh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:c,selectedLowTick:p,selectedHighTick:b,swapSlippage:S,addLiquiditySlippage:I}=n,x=new mh;return await Gl(t,x,t.rpcClient,o,i,s,c,p,b,S,I),x}static fromData(t){return new a(t)}};import{MmtSDK as ph}from"@mmt-finance/clmm-sdk";import{VeMMT as dh}from"@mmt-finance/ve-sdk-v1";import{Transaction as fh}from"@mysten/sui/transactions";var Fe="0x35169bc93e1fddfcf3a82a9eae726d349689ed59e4b065369af8789fe59f8608::mmt::MMT";var bn=async a=>{let e=await a.getSyncEpochInfo();if(!e)throw new Error("Failed to sync epoch");return e},Zl=async(a,e,t,n,o,i,s,c)=>{let p=Number(n);if(!n||Number.isNaN(p)||p<=0)throw new Error(`Bond Failed: Invalid amount: ${n}. Amount must be greater than 0`);if(!i&&!s)throw new Error("Bond Failed: Failed to calculate unbond date");if(typeof s!="number"&&!i)throw new Error("Bond Failed: Invalid unbond date");let b=await Zt({mmt:a,tx:c,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals});if(!b)throw new Error(`Bond Failed: Failed to get coin object for ${t.coinType}, amount: ${n}`);let S=await bn(e);await e.syncOrAdvanceEpoch(c,S.currentEpoch,S.syncedEpoch);let I=c.getData().commands.length;i?await e.createMaxBond(c,b,o):await e.createBond(c,b,BigInt(s),o);let D=c.getData().commands.length;if(D===0)throw new Error(`Bond Failed: Transaction has no commands. enableAutoMaxBond: ${i}, unbondAt: ${s}, amount: ${n}`);if(D===I)throw new Error(`Bond Failed: No new commands were added by bond operation. Commands before: ${I}, after: ${D}`)},tu=async(a,e,t,n,o,i,s,c)=>{let p=await bn(a);if(await a.syncOrAdvanceEpoch(c,p.currentEpoch,p.syncedEpoch),await a.claimReward(c,t,e),o)i||await a.setNormal(c,t);else if(i)await a.setMaxBond(c,t);else{if(typeof s!="number")throw new Error("Extend Failed: Failed to calculate unbond date");if(s<n)throw new Error("Extend Failed: New duration cannot be less than current duration");await a.extend(c,t,s)}},eu=async(a,e,t,n,o)=>{let i=await bn(a);await a.syncOrAdvanceEpoch(o,i.currentEpoch,i.syncedEpoch),await a.claimReward(o,t,e),await n.reduce(async(s,c)=>{await s,await a.claimReward(o,c,e),await a.merge(o,t,c)},Promise.resolve())},nu=async(a,e,t,n)=>{let o=await bn(a);await a.syncOrAdvanceEpoch(n,o.currentEpoch,o.syncedEpoch),await a.claimReward(n,t,e),await a.unbond(n,t,e)},ou=async(a,e,t,n)=>{if(t.length>0&&t.some(o=>o.userRewardAmount>0)){let o=await bn(a);await a.syncOrAdvanceEpoch(n,o.currentEpoch,o.syncedEpoch),await t.reduce(async(i,s)=>{await i,s.userRewardAmount>0&&await a.claimReward(n,s.veId,e)},Promise.resolve())}},au=async(a,e,t,n,o,i,s,c,p)=>{let b=Nt(i),S=[];for(let q of n)if(q.userRewardAmount>0){let Mt=await e.buildClaimRewardCoin(o,q.veId);S.push(Mt)}let I=[];for(let q of S)Array.isArray(q)?I.push(...q):I.push(q);if(I.length===0)return;if(i===Nt(Fe)){o.transferObjects(I,o.pure.address(t));return}let x=c?.[i]?.[Fe];if(!x||x.length===0)throw new Error(`No swap route found from ${Fe} to ${i}`);let[D,...k]=I;k.length>0&&o.mergeCoins(D,k);let M=D,L=o.moveCall({target:"0x2::coin::value",arguments:[M],typeArguments:[Fe]}),U=Nt(Fe);for(let q=0;q<x.length;q++){let Mt=x[q],W=p.find(H=>H.poolId===Mt);if(!W)throw new Error(`Pool ${Mt} not found`);let Rt=Nt(W.tokenXType||W.tokenX?.coinType||"")===U,Ce={objectId:W.poolId,tokenXType:W.tokenXType||W.tokenX?.coinType||"",tokenYType:W.tokenYType||W.tokenY?.coinType||""},Tn=await we({suiClient:a.rpcClient,poolId:W.poolId,currentSqrtPrice:W.currentSqrtPrice,tokenX:W.tokenX,tokenY:W.tokenY,slippagePercentage:s,isTokenX:Rt}),{outputCoin:Sn,leftoverCoin:Ke}=a.Pool.swapV2({txb:o,pool:Ce,amount:L,inputCoin:M,isXtoY:Rt,limitSqrtPrice:Tn});if(o.transferObjects([Ke],o.pure.address(t)),M=Sn,U=Rt?Nt(W.tokenYType||W.tokenY?.coinType||""):Nt(W.tokenXType||W.tokenX?.coinType||""),U===i){o.transferObjects([M],o.pure.address(t));return}L=o.moveCall({target:"0x2::coin::value",arguments:[M],typeArguments:[U]})}o.transferObjects([M],o.pure.address(t))};var Xi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=ph.NEW({network:"mainnet"}),o=new dh(t.suiClient,"mainnet"),{params:i}=this.data,{address:s,positions:c,pools:p,veMMTs:b}=i,S=new fh;for(let I of c){let x=p.find(D=>D.poolId===I.poolId);x&&Se(n,s,I,x,S)}return await ou(o,s,b,S),S}static fromData(t){return new a(t)}};import{MmtSDK as hh}from"@mmt-finance/clmm-sdk";import{VeMMT as gh}from"@mmt-finance/ve-sdk-v1";import{Transaction as yh}from"@mysten/sui/transactions";var zi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=hh.NEW({network:"mainnet"}),o=new gh(t.suiClient,"mainnet"),{params:i}=this.data,{claimVeMMTParams:s}=i,{address:c,veMMTs:p,targetCoinType:b,slippage:S,claimRoutes:I,pools:x}=s,D=new yh;return await Promise.all(i.claimParams.map(k=>ql({...k,sdk:n,txb:D}))),await au(n,o,c,p,D,b,S,I,x),D}static fromData(t){return new a(t)}};import{MmtSDK as bh}from"@mmt-finance/clmm-sdk";import{Transaction as Th}from"@mysten/sui/transactions";var Qi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=bh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,position:i,pool:s}=n,c=new Th;return Se(t,o,i,s,c),c}static fromData(t){return new a(t)}};import{MmtSDK as Sh}from"@mmt-finance/clmm-sdk";import{Transaction as wh}from"@mysten/sui/transactions";var Yi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=Sh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:c,positionObjectId:p,slippage:b}=n,S=new wh;return await Xl(t,S,o,i,s,c,p,b),S}static fromData(t){return new a(t)}};import{MmtSDK as Ih}from"@mmt-finance/clmm-sdk";import{Transaction as Ch}from"@mysten/sui/transactions";var Ji=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=Ih.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:c,positionObjectId:p,swapSlippage:b,addLiquiditySlippage:S}=n,I=new Ch;return await zl(t,I,o,i,s,c,p,b,S),I}static fromData(t){return new a(t)}};import{MmtSDK as xh}from"@mmt-finance/clmm-sdk";import{Transaction as Dh}from"@mysten/sui/transactions";var Zi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=xh.NEW({network:"mainnet"}),{params:n}=this.data,{pool:o,position:i,address:s,withdrawPercentage:c,zapOutOn:p,targetCoinType:b,slippage:S}=n,I=new Dh;return p?await Jl({sdk:t,address:s,position:i,pool:o,withdrawPercentage:c,txb:I,targetCoinType:b,slippage:S}):await Yl(t,s,i,o,c,I),I}static fromData(t){return new a(t)}};import{Transaction as iu}from"@mysten/sui/transactions";import{LstClient as ru}from"@suilend/springsui-sdk";var Ss={id:"0x0431232199873db77a92aa645cd43521437e9cc5c6fff07fd03edb88afe0b25a",type:"0x2b6602099970374cf58a2a1b9d96f005fccceb81e92eb059873baf420eb6c717::x_sui::X_SUI",weightHookId:"0x9e35c13dbb0bc437e8ad5a95ec463622f58763e060552ae8d100db77f4904601"},su=async(a,e,t)=>{let n=await ru.initialize(a,Ss),o=new iu,[i]=o.splitCoins(o.gas,[BigInt(t)]),s=n.mint(o,i);return o.transferObjects([s],e),o},cu=async(a,e,t)=>{let n=await ru.initialize(a,Ss),o=await a.getCoins({owner:e,coinType:Ss.type,limit:1e3});if(o.data.length===0)throw new Error("No lst coins found");let i=new iu,s=o.data[0];o.data.length>1&&i.mergeCoins(s.coinObjectId,o.data.slice(1).map(b=>b.coinObjectId));let[c]=i.splitCoins(s.coinObjectId,[BigInt(t)]),p=n.redeem(i,c);return i.transferObjects([p],e),i};var tr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await su(t.suiClient,o,i)}static fromData(t){return new a(t)}};import{MmtSDK as vh}from"@mmt-finance/clmm-sdk";import{Transaction as Ah}from"@mysten/sui/transactions";import{mappedMmtV3Pool as kh}from"@mmt-finance/clmm-sdk/dist/utils/poolUtils";var lu=async(a,e,t,n,o,i,s)=>{let c=await Zt({mmt:a,tx:i,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals}),p=i.moveCall({target:"0x2::coin::value",typeArguments:[t.coinType],arguments:[c]}),b=t.coinType;for(let S=0;S<e.length;S+=1){let{poolId:I,tokenX:x,tokenY:D,isStable:k,currentSqrtPrice:M}=e[S],{id:L,isReverse:U}=kh[I]||{id:I,isReverse:!1},q=Nt(x.coinType)===Nt(b);q=U?!q:q;let Mt=U?D.coinType:x.coinType,W=U?x.coinType:D.coinType,Ie=await we({poolId:L,tokenX:x,tokenY:D,slippagePercentage:s,isTokenX:q,suiClient:a.rpcClient,currentSqrtPrice:M}),Rt=a.Pool.swap(i,{objectId:L,tokenXType:Mt,tokenYType:W,isStable:k},p,c,q,void 0,Ie,!1);i.transferObjects([c],i.pure.address(o)),c=Rt,b=q?W:Mt,p=i.moveCall({target:"0x2::coin::value",typeArguments:[b],arguments:[c]})}i.transferObjects([c],i.pure.address(o))};var er=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=vh.NEW({network:"mainnet"}),{params:n}=this.data,{route:o,tokenIn:i,amountIn:s,address:c,slippage:p}=n,b=new Ah;return await lu(t,o,i,s,c,b,p),b}static fromData(t){return new a(t)}};var nr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await cu(t.suiClient,o,i)}static fromData(t){return new a(t)}};import{MmtSDK as Mh}from"@mmt-finance/clmm-sdk";import{VeMMT as Oh}from"@mmt-finance/ve-sdk-v1";import{Transaction as Ph}from"@mysten/sui/transactions";var or=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Mh.NEW({network:"mainnet"}),o=new Oh(t.suiClient,"mainnet"),{params:i}=this.data,{token:s,amount:c,address:p,enableAutoMaxBond:b,unbondAt:S}=i,I=new Ph;return await Zl(n,o,s,c,p,b,S,I),I}static fromData(t){return new a(t)}};import{VeMMT as Rh}from"@mmt-finance/ve-sdk-v1";import{Transaction as Bh}from"@mysten/sui/transactions";var ar=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Rh(t.suiClient,"mainnet"),{params:o}=this.data,{address:i,veId:s,currentUnbondAt:c,isCurrentlyMaxBond:p,enableAutoMaxBond:b,unbondAt:S}=o,I=new Bh;return await tu(n,i,s,c,p,b,S,I),I}static fromData(t){return new a(t)}};import{VeMMT as Eh}from"@mmt-finance/ve-sdk-v1";import{Transaction as Nh}from"@mysten/sui/transactions";var ir=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Eh(t.suiClient,"mainnet"),{params:o}=this.data,{address:i,veId:s,selectedVeMMTIds:c}=o,p=new Nh;return await eu(n,i,s,c,p),p}static fromData(t){return new a(t)}};import{VeMMT as Wh}from"@mmt-finance/ve-sdk-v1";import{Transaction as _h}from"@mysten/sui/transactions";var rr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Wh(t.suiClient,"mainnet"),{params:o}=this.data,{address:i,veId:s}=o,c=new _h;return await nu(n,i,s,c),c}static fromData(t){return new a(t)}};var sr=class{application="mmt-dex";supportSDK="@mysten/sui";async deserialize(e){let{appContext:t}=e;return{txType:Lh.Other,txSubType:t.action,intentionData:t}}async build(e){let t;switch(e.txSubType){case"Swap":t=er.fromData(e.intentionData);break;case"AddLiquidity":t=Hi.fromData(e.intentionData);break;case"AddLiquiditySingleSide":t=Gi.fromData(e.intentionData);break;case"ClaimRewards":t=Qi.fromData(e.intentionData);break;case"ClaimAllRewards":t=Xi.fromData(e.intentionData);break;case"ClaimRewardsAs":t=zi.fromData(e.intentionData);break;case"RemoveLiquidity":t=Zi.fromData(e.intentionData);break;case"StakeXSui":t=tr.fromData(e.intentionData);break;case"UnstakeXSui":t=nr.fromData(e.intentionData);break;case"ManageLiquidity":t=Yi.fromData(e.intentionData);break;case"ManageLiquiditySingleSide":t=Ji.fromData(e.intentionData);break;case"Bond":t=or.fromData(e.intentionData);break;case"Extend":t=ar.fromData(e.intentionData);break;case"Merge":t=ir.fromData(e.intentionData);break;case"Unbond":t=rr.fromData(e.intentionData);break;default:throw new Error(`not implemented ${e.txSubType}`)}return t.build({suiClient:e.suiClient})}};import{TransactionType as uu}from"@msafe/sui3-utils";import{Transaction as jh}from"@mysten/sui/transactions";import{Vaults as Uh}from"@nemoprotocol/vaults-sdk";var cr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,i=Uh.createSDK({client:n}),s=new jh;return await i.deposit(this.data,o.address,s),s}static fromData(t){return new a(t)}};import{Transaction as qh}from"@mysten/sui/transactions";import{Vaults as Fh}from"@nemoprotocol/vaults-sdk";var lr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,i=Fh.createSDK({client:n}),s=new qh;return await i.withdraw(this.data,o.address,s),s}static fromData(t){return new a(t)}};var ur=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:uu.Other,txSubType:"VaultDeposit",intentionData:e.appContext};if(n)return{txType:uu.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=cr.fromData(e.intentionData);break;case"VaultWithdraw":o=lr.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};var J4=pa.fromHelpers([new Qo,new sa,new Go,new ca,new wo,new Mi,new sr,new $a,new Ei,new Gn,new ei,new ci,new Mn,new Vi,new pi,new ur]);export{J4 as appHelpers};
|
|
1
|
+
var lu=Object.create;var Rr=Object.defineProperty;var uu=Object.getOwnPropertyDescriptor;var mu=Object.getOwnPropertyNames;var pu=Object.getPrototypeOf,du=Object.prototype.hasOwnProperty;var fu=(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 hu=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),Us=(a,e)=>{for(var t in e)Rr(a,t,{get:e[t],enumerable:!0})},gu=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of mu(e))!du.call(a,o)&&o!==t&&Rr(a,o,{get:()=>e[o],enumerable:!(n=uu(e,o))||n.enumerable});return a};var yu=(a,e,t)=>(t=a!=null?lu(pu(a)):{},gu(e||!a||!a.__esModule?Rr(t,"default",{value:a,enumerable:!0}):t,a));var Ll=hu((_l,Ss)=>{"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=fu("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 d=0;r[0]==="-"&&(d++,this.negative=1),d<r.length&&(u===16?this._parseHex(r,d,m):(this._parseBase(r,u,d),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 d=0;d<this.length;d++)this.words[d]=0;var h,T,C=0;if(m==="be")for(d=r.length-1,h=0;d>=0;d-=3)T=r[d]|r[d-1]<<8|r[d-2]<<16,this.words[h]|=T<<C&67108863,this.words[h+1]=T>>>26-C&67108863,C+=24,C>=26&&(C-=26,h++);else if(m==="le")for(d=0,h=0;d<r.length;d+=3)T=r[d]|r[d+1]<<8|r[d+2]<<16,this.words[h]|=T<<C&67108863,this.words[h+1]=T>>>26-C&67108863,C+=24,C>=26&&(C-=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 c(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 d=0;d<this.length;d++)this.words[d]=0;var h=0,T=0,C;if(m==="be")for(d=r.length-1;d>=u;d-=2)C=c(r,u,d)<<h,this.words[T]|=C&67108863,h>=18?(h-=18,T+=1,this.words[T]|=C>>>26):h+=8;else{var f=r.length-u;for(d=f%2===0?u+1:u;d<r.length;d+=2)C=c(r,u,d)<<h,this.words[T]|=C&67108863,h>=18?(h-=18,T+=1,this.words[T]|=C>>>26):h+=8}this._strip()};function p(y,r,u,m){for(var d=0,h=0,T=Math.min(y.length,u),C=r;C<T;C++){var f=y.charCodeAt(C)-48;d*=m,f>=49?h=f-49+10:f>=17?h=f-17+10:h=f,t(f>=0&&h<m,"Invalid character"),d+=h}return d}o.prototype._parseBase=function(r,u,m){this.words=[0],this.length=1;for(var d=0,h=1;h<=67108863;h*=u)d++;d--,h=h/u|0;for(var T=r.length-m,C=T%d,f=Math.min(T,T-C)+m,l=0,g=m;g<f;g+=d)l=p(r,g,g+d,u),this.imuln(h),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(C!==0){var v=1;for(l=p(r,g,r.length,u),g=0;g<C;g++)v*=u;this.imuln(v),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}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")]=S}catch{o.prototype.inspect=S}else o.prototype.inspect=S;function S(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var I=["","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 d=0,h=0,T=0;T<this.length;T++){var C=this.words[T],f=((C<<d|h)&16777215).toString(16);h=C>>>24-d&16777215,d+=2,d>=26&&(d-=26,T--),h!==0||T!==this.length-1?m=I[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 l=x[r],g=D[r];m="";var v=this.clone();for(v.negative=0;!v.isZero();){var O=v.modrn(g).toString(r);v=v.idivn(g),v.isZero()?m=O+m:m=I[l-O.length]+O+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 d=this.byteLength(),h=m||Math.max(1,d);t(d<=h,"byte array longer than desired length"),t(h>0,"Requested array length <= 0");var T=k(r,h),C=u==="le"?"LE":"BE";return this["_toArrayLike"+C](T,d),T},o.prototype._toArrayLikeLE=function(r,u){for(var m=0,d=0,h=0,T=0;h<this.length;h++){var C=this.words[h]<<T|d;r[m++]=C&255,m<r.length&&(r[m++]=C>>8&255),m<r.length&&(r[m++]=C>>16&255),T===6?(m<r.length&&(r[m++]=C>>24&255),d=0,T=0):(d=C>>>24,T+=2)}if(m<r.length)for(r[m++]=d;m<r.length;)r[m++]=0},o.prototype._toArrayLikeBE=function(r,u){for(var m=r.length-1,d=0,h=0,T=0;h<this.length;h++){var C=this.words[h]<<T|d;r[m--]=C&255,m>=0&&(r[m--]=C>>8&255),m>=0&&(r[m--]=C>>16&255),T===6?(m>=0&&(r[m--]=C>>24&255),d=0,T=0):(d=C>>>24,T+=2)}if(m>=0)for(r[m--]=d;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 M(y){for(var r=new Array(y.bitLength()),u=0;u<r.length;u++){var m=u/26|0,d=u%26;r[u]=y.words[m]>>>d&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 d=0;d<m.length;d++)this.words[d]=u.words[d]^m.words[d];if(this!==u)for(;d<u.length;d++)this.words[d]=u.words[d];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 d=0;d<u;d++)this.words[d]=~this.words[d]&67108863;return m>0&&(this.words[d]=~this.words[d]&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,d=r%26;return this._expand(m+1),u?this.words[m]=this.words[m]|1<<d:this.words[m]=this.words[m]&~(1<<d),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,d;this.length>r.length?(m=this,d=r):(m=r,d=this);for(var h=0,T=0;T<d.length;T++)u=(m.words[T]|0)+(d.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 d,h;m>0?(d=this,h=r):(d=r,h=this);for(var T=0,C=0;C<h.length;C++)u=(d.words[C]|0)-(h.words[C]|0)+T,T=u>>26,this.words[C]=u&67108863;for(;T!==0&&C<d.length;C++)u=(d.words[C]|0)+T,T=u>>26,this.words[C]=u&67108863;if(T===0&&C<d.length&&d!==this)for(;C<d.length;C++)this.words[C]=d.words[C];return this.length=Math.max(this.length,C),d!==this&&(this.negative=1),this._strip()},o.prototype.sub=function(r){return this.clone().isub(r)};function L(y,r,u){u.negative=r.negative^y.negative;var m=y.length+r.length|0;u.length=m,m=m-1|0;var d=y.words[0]|0,h=r.words[0]|0,T=d*h,C=T&67108863,f=T/67108864|0;u.words[0]=C;for(var l=1;l<m;l++){for(var g=f>>>26,v=f&67108863,O=Math.min(l,r.length-1),P=Math.max(0,l-y.length+1);P<=O;P++){var B=l-P|0;d=y.words[B]|0,h=r.words[P]|0,T=d*h+v,g+=T/67108864|0,v=T&67108863}u.words[l]=v|0,f=g|0}return f!==0?u.words[l]=f|0:u.length--,u._strip()}var U=function(r,u,m){var d=r.words,h=u.words,T=m.words,C=0,f,l,g,v=d[0]|0,O=v&8191,P=v>>>13,B=d[1]|0,_=B&8191,F=B>>>13,ie=d[2]|0,K=ie&8191,$=ie>>>13,Cs=d[3]|0,X=Cs&8191,z=Cs>>>13,xs=d[4]|0,Q=xs&8191,J=xs>>>13,Ds=d[5]|0,Y=Ds&8191,Z=Ds>>>13,ks=d[6]|0,tt=ks&8191,et=ks>>>13,vs=d[7]|0,nt=vs&8191,ot=vs>>>13,As=d[8]|0,at=As&8191,it=As>>>13,Ms=d[9]|0,rt=Ms&8191,st=Ms>>>13,Os=h[0]|0,ct=Os&8191,lt=Os>>>13,Ps=h[1]|0,ut=Ps&8191,mt=Ps>>>13,Rs=h[2]|0,pt=Rs&8191,dt=Rs>>>13,Bs=h[3]|0,ft=Bs&8191,ht=Bs>>>13,Es=h[4]|0,gt=Es&8191,yt=Es>>>13,Ns=h[5]|0,bt=Ns&8191,Tt=Ns>>>13,Ws=h[6]|0,St=Ws&8191,wt=Ws>>>13,_s=h[7]|0,It=_s&8191,Ct=_s>>>13,Ls=h[8]|0,xt=Ls&8191,Dt=Ls>>>13,js=h[9]|0,kt=js&8191,vt=js>>>13;m.negative=r.negative^u.negative,m.length=19,f=Math.imul(O,ct),l=Math.imul(O,lt),l=l+Math.imul(P,ct)|0,g=Math.imul(P,lt);var dr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(dr>>>26)|0,dr&=67108863,f=Math.imul(_,ct),l=Math.imul(_,lt),l=l+Math.imul(F,ct)|0,g=Math.imul(F,lt),f=f+Math.imul(O,ut)|0,l=l+Math.imul(O,mt)|0,l=l+Math.imul(P,ut)|0,g=g+Math.imul(P,mt)|0;var fr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(fr>>>26)|0,fr&=67108863,f=Math.imul(K,ct),l=Math.imul(K,lt),l=l+Math.imul($,ct)|0,g=Math.imul($,lt),f=f+Math.imul(_,ut)|0,l=l+Math.imul(_,mt)|0,l=l+Math.imul(F,ut)|0,g=g+Math.imul(F,mt)|0,f=f+Math.imul(O,pt)|0,l=l+Math.imul(O,dt)|0,l=l+Math.imul(P,pt)|0,g=g+Math.imul(P,dt)|0;var hr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(hr>>>26)|0,hr&=67108863,f=Math.imul(X,ct),l=Math.imul(X,lt),l=l+Math.imul(z,ct)|0,g=Math.imul(z,lt),f=f+Math.imul(K,ut)|0,l=l+Math.imul(K,mt)|0,l=l+Math.imul($,ut)|0,g=g+Math.imul($,mt)|0,f=f+Math.imul(_,pt)|0,l=l+Math.imul(_,dt)|0,l=l+Math.imul(F,pt)|0,g=g+Math.imul(F,dt)|0,f=f+Math.imul(O,ft)|0,l=l+Math.imul(O,ht)|0,l=l+Math.imul(P,ft)|0,g=g+Math.imul(P,ht)|0;var gr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(gr>>>26)|0,gr&=67108863,f=Math.imul(Q,ct),l=Math.imul(Q,lt),l=l+Math.imul(J,ct)|0,g=Math.imul(J,lt),f=f+Math.imul(X,ut)|0,l=l+Math.imul(X,mt)|0,l=l+Math.imul(z,ut)|0,g=g+Math.imul(z,mt)|0,f=f+Math.imul(K,pt)|0,l=l+Math.imul(K,dt)|0,l=l+Math.imul($,pt)|0,g=g+Math.imul($,dt)|0,f=f+Math.imul(_,ft)|0,l=l+Math.imul(_,ht)|0,l=l+Math.imul(F,ft)|0,g=g+Math.imul(F,ht)|0,f=f+Math.imul(O,gt)|0,l=l+Math.imul(O,yt)|0,l=l+Math.imul(P,gt)|0,g=g+Math.imul(P,yt)|0;var yr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(yr>>>26)|0,yr&=67108863,f=Math.imul(Y,ct),l=Math.imul(Y,lt),l=l+Math.imul(Z,ct)|0,g=Math.imul(Z,lt),f=f+Math.imul(Q,ut)|0,l=l+Math.imul(Q,mt)|0,l=l+Math.imul(J,ut)|0,g=g+Math.imul(J,mt)|0,f=f+Math.imul(X,pt)|0,l=l+Math.imul(X,dt)|0,l=l+Math.imul(z,pt)|0,g=g+Math.imul(z,dt)|0,f=f+Math.imul(K,ft)|0,l=l+Math.imul(K,ht)|0,l=l+Math.imul($,ft)|0,g=g+Math.imul($,ht)|0,f=f+Math.imul(_,gt)|0,l=l+Math.imul(_,yt)|0,l=l+Math.imul(F,gt)|0,g=g+Math.imul(F,yt)|0,f=f+Math.imul(O,bt)|0,l=l+Math.imul(O,Tt)|0,l=l+Math.imul(P,bt)|0,g=g+Math.imul(P,Tt)|0;var br=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(br>>>26)|0,br&=67108863,f=Math.imul(tt,ct),l=Math.imul(tt,lt),l=l+Math.imul(et,ct)|0,g=Math.imul(et,lt),f=f+Math.imul(Y,ut)|0,l=l+Math.imul(Y,mt)|0,l=l+Math.imul(Z,ut)|0,g=g+Math.imul(Z,mt)|0,f=f+Math.imul(Q,pt)|0,l=l+Math.imul(Q,dt)|0,l=l+Math.imul(J,pt)|0,g=g+Math.imul(J,dt)|0,f=f+Math.imul(X,ft)|0,l=l+Math.imul(X,ht)|0,l=l+Math.imul(z,ft)|0,g=g+Math.imul(z,ht)|0,f=f+Math.imul(K,gt)|0,l=l+Math.imul(K,yt)|0,l=l+Math.imul($,gt)|0,g=g+Math.imul($,yt)|0,f=f+Math.imul(_,bt)|0,l=l+Math.imul(_,Tt)|0,l=l+Math.imul(F,bt)|0,g=g+Math.imul(F,Tt)|0,f=f+Math.imul(O,St)|0,l=l+Math.imul(O,wt)|0,l=l+Math.imul(P,St)|0,g=g+Math.imul(P,wt)|0;var Tr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Tr>>>26)|0,Tr&=67108863,f=Math.imul(nt,ct),l=Math.imul(nt,lt),l=l+Math.imul(ot,ct)|0,g=Math.imul(ot,lt),f=f+Math.imul(tt,ut)|0,l=l+Math.imul(tt,mt)|0,l=l+Math.imul(et,ut)|0,g=g+Math.imul(et,mt)|0,f=f+Math.imul(Y,pt)|0,l=l+Math.imul(Y,dt)|0,l=l+Math.imul(Z,pt)|0,g=g+Math.imul(Z,dt)|0,f=f+Math.imul(Q,ft)|0,l=l+Math.imul(Q,ht)|0,l=l+Math.imul(J,ft)|0,g=g+Math.imul(J,ht)|0,f=f+Math.imul(X,gt)|0,l=l+Math.imul(X,yt)|0,l=l+Math.imul(z,gt)|0,g=g+Math.imul(z,yt)|0,f=f+Math.imul(K,bt)|0,l=l+Math.imul(K,Tt)|0,l=l+Math.imul($,bt)|0,g=g+Math.imul($,Tt)|0,f=f+Math.imul(_,St)|0,l=l+Math.imul(_,wt)|0,l=l+Math.imul(F,St)|0,g=g+Math.imul(F,wt)|0,f=f+Math.imul(O,It)|0,l=l+Math.imul(O,Ct)|0,l=l+Math.imul(P,It)|0,g=g+Math.imul(P,Ct)|0;var Sr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Sr>>>26)|0,Sr&=67108863,f=Math.imul(at,ct),l=Math.imul(at,lt),l=l+Math.imul(it,ct)|0,g=Math.imul(it,lt),f=f+Math.imul(nt,ut)|0,l=l+Math.imul(nt,mt)|0,l=l+Math.imul(ot,ut)|0,g=g+Math.imul(ot,mt)|0,f=f+Math.imul(tt,pt)|0,l=l+Math.imul(tt,dt)|0,l=l+Math.imul(et,pt)|0,g=g+Math.imul(et,dt)|0,f=f+Math.imul(Y,ft)|0,l=l+Math.imul(Y,ht)|0,l=l+Math.imul(Z,ft)|0,g=g+Math.imul(Z,ht)|0,f=f+Math.imul(Q,gt)|0,l=l+Math.imul(Q,yt)|0,l=l+Math.imul(J,gt)|0,g=g+Math.imul(J,yt)|0,f=f+Math.imul(X,bt)|0,l=l+Math.imul(X,Tt)|0,l=l+Math.imul(z,bt)|0,g=g+Math.imul(z,Tt)|0,f=f+Math.imul(K,St)|0,l=l+Math.imul(K,wt)|0,l=l+Math.imul($,St)|0,g=g+Math.imul($,wt)|0,f=f+Math.imul(_,It)|0,l=l+Math.imul(_,Ct)|0,l=l+Math.imul(F,It)|0,g=g+Math.imul(F,Ct)|0,f=f+Math.imul(O,xt)|0,l=l+Math.imul(O,Dt)|0,l=l+Math.imul(P,xt)|0,g=g+Math.imul(P,Dt)|0;var wr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(wr>>>26)|0,wr&=67108863,f=Math.imul(rt,ct),l=Math.imul(rt,lt),l=l+Math.imul(st,ct)|0,g=Math.imul(st,lt),f=f+Math.imul(at,ut)|0,l=l+Math.imul(at,mt)|0,l=l+Math.imul(it,ut)|0,g=g+Math.imul(it,mt)|0,f=f+Math.imul(nt,pt)|0,l=l+Math.imul(nt,dt)|0,l=l+Math.imul(ot,pt)|0,g=g+Math.imul(ot,dt)|0,f=f+Math.imul(tt,ft)|0,l=l+Math.imul(tt,ht)|0,l=l+Math.imul(et,ft)|0,g=g+Math.imul(et,ht)|0,f=f+Math.imul(Y,gt)|0,l=l+Math.imul(Y,yt)|0,l=l+Math.imul(Z,gt)|0,g=g+Math.imul(Z,yt)|0,f=f+Math.imul(Q,bt)|0,l=l+Math.imul(Q,Tt)|0,l=l+Math.imul(J,bt)|0,g=g+Math.imul(J,Tt)|0,f=f+Math.imul(X,St)|0,l=l+Math.imul(X,wt)|0,l=l+Math.imul(z,St)|0,g=g+Math.imul(z,wt)|0,f=f+Math.imul(K,It)|0,l=l+Math.imul(K,Ct)|0,l=l+Math.imul($,It)|0,g=g+Math.imul($,Ct)|0,f=f+Math.imul(_,xt)|0,l=l+Math.imul(_,Dt)|0,l=l+Math.imul(F,xt)|0,g=g+Math.imul(F,Dt)|0,f=f+Math.imul(O,kt)|0,l=l+Math.imul(O,vt)|0,l=l+Math.imul(P,kt)|0,g=g+Math.imul(P,vt)|0;var Ir=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Ir>>>26)|0,Ir&=67108863,f=Math.imul(rt,ut),l=Math.imul(rt,mt),l=l+Math.imul(st,ut)|0,g=Math.imul(st,mt),f=f+Math.imul(at,pt)|0,l=l+Math.imul(at,dt)|0,l=l+Math.imul(it,pt)|0,g=g+Math.imul(it,dt)|0,f=f+Math.imul(nt,ft)|0,l=l+Math.imul(nt,ht)|0,l=l+Math.imul(ot,ft)|0,g=g+Math.imul(ot,ht)|0,f=f+Math.imul(tt,gt)|0,l=l+Math.imul(tt,yt)|0,l=l+Math.imul(et,gt)|0,g=g+Math.imul(et,yt)|0,f=f+Math.imul(Y,bt)|0,l=l+Math.imul(Y,Tt)|0,l=l+Math.imul(Z,bt)|0,g=g+Math.imul(Z,Tt)|0,f=f+Math.imul(Q,St)|0,l=l+Math.imul(Q,wt)|0,l=l+Math.imul(J,St)|0,g=g+Math.imul(J,wt)|0,f=f+Math.imul(X,It)|0,l=l+Math.imul(X,Ct)|0,l=l+Math.imul(z,It)|0,g=g+Math.imul(z,Ct)|0,f=f+Math.imul(K,xt)|0,l=l+Math.imul(K,Dt)|0,l=l+Math.imul($,xt)|0,g=g+Math.imul($,Dt)|0,f=f+Math.imul(_,kt)|0,l=l+Math.imul(_,vt)|0,l=l+Math.imul(F,kt)|0,g=g+Math.imul(F,vt)|0;var Cr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Cr>>>26)|0,Cr&=67108863,f=Math.imul(rt,pt),l=Math.imul(rt,dt),l=l+Math.imul(st,pt)|0,g=Math.imul(st,dt),f=f+Math.imul(at,ft)|0,l=l+Math.imul(at,ht)|0,l=l+Math.imul(it,ft)|0,g=g+Math.imul(it,ht)|0,f=f+Math.imul(nt,gt)|0,l=l+Math.imul(nt,yt)|0,l=l+Math.imul(ot,gt)|0,g=g+Math.imul(ot,yt)|0,f=f+Math.imul(tt,bt)|0,l=l+Math.imul(tt,Tt)|0,l=l+Math.imul(et,bt)|0,g=g+Math.imul(et,Tt)|0,f=f+Math.imul(Y,St)|0,l=l+Math.imul(Y,wt)|0,l=l+Math.imul(Z,St)|0,g=g+Math.imul(Z,wt)|0,f=f+Math.imul(Q,It)|0,l=l+Math.imul(Q,Ct)|0,l=l+Math.imul(J,It)|0,g=g+Math.imul(J,Ct)|0,f=f+Math.imul(X,xt)|0,l=l+Math.imul(X,Dt)|0,l=l+Math.imul(z,xt)|0,g=g+Math.imul(z,Dt)|0,f=f+Math.imul(K,kt)|0,l=l+Math.imul(K,vt)|0,l=l+Math.imul($,kt)|0,g=g+Math.imul($,vt)|0;var xr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(xr>>>26)|0,xr&=67108863,f=Math.imul(rt,ft),l=Math.imul(rt,ht),l=l+Math.imul(st,ft)|0,g=Math.imul(st,ht),f=f+Math.imul(at,gt)|0,l=l+Math.imul(at,yt)|0,l=l+Math.imul(it,gt)|0,g=g+Math.imul(it,yt)|0,f=f+Math.imul(nt,bt)|0,l=l+Math.imul(nt,Tt)|0,l=l+Math.imul(ot,bt)|0,g=g+Math.imul(ot,Tt)|0,f=f+Math.imul(tt,St)|0,l=l+Math.imul(tt,wt)|0,l=l+Math.imul(et,St)|0,g=g+Math.imul(et,wt)|0,f=f+Math.imul(Y,It)|0,l=l+Math.imul(Y,Ct)|0,l=l+Math.imul(Z,It)|0,g=g+Math.imul(Z,Ct)|0,f=f+Math.imul(Q,xt)|0,l=l+Math.imul(Q,Dt)|0,l=l+Math.imul(J,xt)|0,g=g+Math.imul(J,Dt)|0,f=f+Math.imul(X,kt)|0,l=l+Math.imul(X,vt)|0,l=l+Math.imul(z,kt)|0,g=g+Math.imul(z,vt)|0;var Dr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Dr>>>26)|0,Dr&=67108863,f=Math.imul(rt,gt),l=Math.imul(rt,yt),l=l+Math.imul(st,gt)|0,g=Math.imul(st,yt),f=f+Math.imul(at,bt)|0,l=l+Math.imul(at,Tt)|0,l=l+Math.imul(it,bt)|0,g=g+Math.imul(it,Tt)|0,f=f+Math.imul(nt,St)|0,l=l+Math.imul(nt,wt)|0,l=l+Math.imul(ot,St)|0,g=g+Math.imul(ot,wt)|0,f=f+Math.imul(tt,It)|0,l=l+Math.imul(tt,Ct)|0,l=l+Math.imul(et,It)|0,g=g+Math.imul(et,Ct)|0,f=f+Math.imul(Y,xt)|0,l=l+Math.imul(Y,Dt)|0,l=l+Math.imul(Z,xt)|0,g=g+Math.imul(Z,Dt)|0,f=f+Math.imul(Q,kt)|0,l=l+Math.imul(Q,vt)|0,l=l+Math.imul(J,kt)|0,g=g+Math.imul(J,vt)|0;var kr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(kr>>>26)|0,kr&=67108863,f=Math.imul(rt,bt),l=Math.imul(rt,Tt),l=l+Math.imul(st,bt)|0,g=Math.imul(st,Tt),f=f+Math.imul(at,St)|0,l=l+Math.imul(at,wt)|0,l=l+Math.imul(it,St)|0,g=g+Math.imul(it,wt)|0,f=f+Math.imul(nt,It)|0,l=l+Math.imul(nt,Ct)|0,l=l+Math.imul(ot,It)|0,g=g+Math.imul(ot,Ct)|0,f=f+Math.imul(tt,xt)|0,l=l+Math.imul(tt,Dt)|0,l=l+Math.imul(et,xt)|0,g=g+Math.imul(et,Dt)|0,f=f+Math.imul(Y,kt)|0,l=l+Math.imul(Y,vt)|0,l=l+Math.imul(Z,kt)|0,g=g+Math.imul(Z,vt)|0;var vr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(vr>>>26)|0,vr&=67108863,f=Math.imul(rt,St),l=Math.imul(rt,wt),l=l+Math.imul(st,St)|0,g=Math.imul(st,wt),f=f+Math.imul(at,It)|0,l=l+Math.imul(at,Ct)|0,l=l+Math.imul(it,It)|0,g=g+Math.imul(it,Ct)|0,f=f+Math.imul(nt,xt)|0,l=l+Math.imul(nt,Dt)|0,l=l+Math.imul(ot,xt)|0,g=g+Math.imul(ot,Dt)|0,f=f+Math.imul(tt,kt)|0,l=l+Math.imul(tt,vt)|0,l=l+Math.imul(et,kt)|0,g=g+Math.imul(et,vt)|0;var Ar=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Ar>>>26)|0,Ar&=67108863,f=Math.imul(rt,It),l=Math.imul(rt,Ct),l=l+Math.imul(st,It)|0,g=Math.imul(st,Ct),f=f+Math.imul(at,xt)|0,l=l+Math.imul(at,Dt)|0,l=l+Math.imul(it,xt)|0,g=g+Math.imul(it,Dt)|0,f=f+Math.imul(nt,kt)|0,l=l+Math.imul(nt,vt)|0,l=l+Math.imul(ot,kt)|0,g=g+Math.imul(ot,vt)|0;var Mr=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Mr>>>26)|0,Mr&=67108863,f=Math.imul(rt,xt),l=Math.imul(rt,Dt),l=l+Math.imul(st,xt)|0,g=Math.imul(st,Dt),f=f+Math.imul(at,kt)|0,l=l+Math.imul(at,vt)|0,l=l+Math.imul(it,kt)|0,g=g+Math.imul(it,vt)|0;var Or=(C+f|0)+((l&8191)<<13)|0;C=(g+(l>>>13)|0)+(Or>>>26)|0,Or&=67108863,f=Math.imul(rt,kt),l=Math.imul(rt,vt),l=l+Math.imul(st,kt)|0,g=Math.imul(st,vt);var Pr=(C+f|0)+((l&8191)<<13)|0;return C=(g+(l>>>13)|0)+(Pr>>>26)|0,Pr&=67108863,T[0]=dr,T[1]=fr,T[2]=hr,T[3]=gr,T[4]=yr,T[5]=br,T[6]=Tr,T[7]=Sr,T[8]=wr,T[9]=Ir,T[10]=Cr,T[11]=xr,T[12]=Dr,T[13]=kr,T[14]=vr,T[15]=Ar,T[16]=Mr,T[17]=Or,T[18]=Pr,C!==0&&(T[19]=C,m.length++),m};Math.imul||(U=L);function q(y,r,u){u.negative=r.negative^y.negative,u.length=y.length+r.length;for(var m=0,d=0,h=0;h<u.length-1;h++){var T=d;d=0;for(var C=m&67108863,f=Math.min(h,r.length-1),l=Math.max(0,h-y.length+1);l<=f;l++){var g=h-l,v=y.words[g]|0,O=r.words[l]|0,P=v*O,B=P&67108863;T=T+(P/67108864|0)|0,B=B+C|0,C=B&67108863,T=T+(B>>>26)|0,d+=T>>>26,T&=67108863}u.words[h]=C,m=T,T=d}return m!==0?u.words[h]=m:u.length--,u._strip()}function Mt(y,r,u){return q(y,r,u)}o.prototype.mulTo=function(r,u){var m,d=this.length+r.length;return this.length===10&&r.length===10?m=U(this,r,u):d<63?m=L(this,r,u):d<1024?m=q(this,r,u):m=Mt(this,r,u),m};function W(y,r){this.x=y,this.y=r}W.prototype.makeRBT=function(r){for(var u=new Array(r),m=o.prototype._countBits(r)-1,d=0;d<r;d++)u[d]=this.revBin(d,m,r);return u},W.prototype.revBin=function(r,u,m){if(r===0||r===m-1)return r;for(var d=0,h=0;h<u;h++)d|=(r&1)<<u-h-1,r>>=1;return d},W.prototype.permute=function(r,u,m,d,h,T){for(var C=0;C<T;C++)d[C]=u[r[C]],h[C]=m[r[C]]},W.prototype.transform=function(r,u,m,d,h,T){this.permute(T,r,u,m,d,h);for(var C=1;C<h;C<<=1)for(var f=C<<1,l=Math.cos(2*Math.PI/f),g=Math.sin(2*Math.PI/f),v=0;v<h;v+=f)for(var O=l,P=g,B=0;B<C;B++){var _=m[v+B],F=d[v+B],ie=m[v+B+C],K=d[v+B+C],$=O*ie-P*K;K=O*K+P*ie,ie=$,m[v+B]=_+ie,d[v+B]=F+K,m[v+B+C]=_-ie,d[v+B+C]=F-K,B!==f&&($=l*O-g*P,P=l*P+g*O,O=$)}},W.prototype.guessLen13b=function(r,u){var m=Math.max(u,r)|1,d=m&1,h=0;for(m=m/2|0;m;m=m>>>1)h++;return 1<<h+1+d},W.prototype.conjugate=function(r,u,m){if(!(m<=1))for(var d=0;d<m/2;d++){var h=r[d];r[d]=r[m-d-1],r[m-d-1]=h,h=u[d],u[d]=-u[m-d-1],u[m-d-1]=-h}},W.prototype.normalize13b=function(r,u){for(var m=0,d=0;d<u/2;d++){var h=Math.round(r[2*d+1]/u)*8192+Math.round(r[2*d]/u)+m;r[d]=h&67108863,h<67108864?m=0:m=h/67108864|0}return r},W.prototype.convert13b=function(r,u,m,d){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<d;++T)m[T]=0;t(h===0),t((h&-8192)===0)},W.prototype.stub=function(r){for(var u=new Array(r),m=0;m<r;m++)u[m]=0;return u},W.prototype.mulp=function(r,u,m){var d=2*this.guessLen13b(r.length,u.length),h=this.makeRBT(d),T=this.stub(d),C=new Array(d),f=new Array(d),l=new Array(d),g=new Array(d),v=new Array(d),O=new Array(d),P=m.words;P.length=d,this.convert13b(r.words,r.length,C,d),this.convert13b(u.words,u.length,g,d),this.transform(C,T,f,l,d,h),this.transform(g,T,v,O,d,h);for(var B=0;B<d;B++){var _=f[B]*v[B]-l[B]*O[B];l[B]=f[B]*O[B]+l[B]*v[B],f[B]=_}return this.conjugate(f,l,d),this.transform(f,l,P,T,d,h),this.conjugate(P,T,d),this.normalize13b(P,d),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),Mt(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,d=0;d<this.length;d++){var h=(this.words[d]|0)*r,T=(h&67108863)+(m&67108863);m>>=26,m+=h/67108864|0,m+=T>>>26,this.words[d]=T&67108863}return m!==0&&(this.words[d]=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=M(r);if(u.length===0)return new o(1);for(var m=this,d=0;d<u.length&&u[d]===0;d++,m=m.sqr());if(++d<u.length)for(var h=m.sqr();d<u.length;d++,h=h.sqr())u[d]!==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,d=67108863>>>26-u<<26-u,h;if(u!==0){var T=0;for(h=0;h<this.length;h++){var C=this.words[h]&d,f=(this.words[h]|0)-C<<u;this.words[h]=f|T,T=C>>>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 d;u?d=(u-u%26)/26:d=0;var h=r%26,T=Math.min((r-h)/26,this.length),C=67108863^67108863>>>h<<h,f=m;if(d-=T,d=Math.max(0,d),f){for(var l=0;l<T;l++)f.words[l]=this.words[l];f.length=T}if(T!==0)if(this.length>T)for(this.length-=T,l=0;l<this.length;l++)this.words[l]=this.words[l+T];else this.words[0]=0,this.length=1;var g=0;for(l=this.length-1;l>=0&&(g!==0||l>=d);l--){var v=this.words[l]|0;this.words[l]=g<<26-h|v>>>h,g=v&C}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,d=1<<u;if(this.length<=m)return!1;var h=this.words[m];return!!(h&d)},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 d=67108863^67108863>>>u<<u;this.words[this.length-1]&=d}return this.length===0&&(this.words[0]=0,this.length=1),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 d=r.length+m,h;this._expand(d);var T,C=0;for(h=0;h<r.length;h++){T=(this.words[h+m]|0)+C;var f=(r.words[h]|0)*u;T-=f&67108863,C=(T>>26)-(f/67108864|0),this.words[h+m]=T&67108863}for(;h<this.length-m;h++)T=(this.words[h+m]|0)+C,C=T>>26,this.words[h+m]=T&67108863;if(C===0)return this._strip();for(t(C===-1),C=0,h=0;h<this.length;h++)T=-(this.words[h]|0)+C,C=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,d=this.clone(),h=r,T=h.words[h.length-1]|0,C=this._countBits(T);m=26-C,m!==0&&(h=h.ushln(m),d.iushln(m),T=h.words[h.length-1]|0);var f=d.length-h.length,l;if(u!=="mod"){l=new o(null),l.length=f+1,l.words=new Array(l.length);for(var g=0;g<l.length;g++)l.words[g]=0}var v=d.clone()._ishlnsubmul(h,1,f);v.negative===0&&(d=v,l&&(l.words[f]=1));for(var O=f-1;O>=0;O--){var P=(d.words[h.length+O]|0)*67108864+(d.words[h.length+O-1]|0);for(P=Math.min(P/T|0,67108863),d._ishlnsubmul(h,P,O);d.negative!==0;)P--,d.negative=0,d._ishlnsubmul(h,1,O),d.isZero()||(d.negative^=1);l&&(l.words[O]=P)}return l&&l._strip(),d._strip(),u!=="div"&&m!==0&&d.iushrn(m),{div:l||null,mod:d}},o.prototype.divmod=function(r,u,m){if(t(!r.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var d,h,T;return this.negative!==0&&r.negative===0?(T=this.neg().divmod(r,u),u!=="mod"&&(d=T.div.neg()),u!=="div"&&(h=T.mod.neg(),m&&h.negative!==0&&h.iadd(r)),{div:d,mod:h}):this.negative===0&&r.negative!==0?(T=this.divmod(r.neg(),u),u!=="mod"&&(d=T.div.neg()),{div:d,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,d=r.ushrn(1),h=r.andln(1),T=m.cmp(d);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,d=0,h=this.length-1;h>=0;h--)d=(m*d+(this.words[h]|0))%r;return u?-d:d},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,d=this.length-1;d>=0;d--){var h=(this.words[d]|0)+m*67108864;this.words[d]=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 d=new o(1),h=new o(0),T=new o(0),C=new o(1),f=0;u.isEven()&&m.isEven();)u.iushrn(1),m.iushrn(1),++f;for(var l=m.clone(),g=u.clone();!u.isZero();){for(var v=0,O=1;(u.words[0]&O)===0&&v<26;++v,O<<=1);if(v>0)for(u.iushrn(v);v-- >0;)(d.isOdd()||h.isOdd())&&(d.iadd(l),h.isub(g)),d.iushrn(1),h.iushrn(1);for(var P=0,B=1;(m.words[0]&B)===0&&P<26;++P,B<<=1);if(P>0)for(m.iushrn(P);P-- >0;)(T.isOdd()||C.isOdd())&&(T.iadd(l),C.isub(g)),T.iushrn(1),C.iushrn(1);u.cmp(m)>=0?(u.isub(m),d.isub(T),h.isub(C)):(m.isub(u),T.isub(d),C.isub(h))}return{a:T,b:C,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 d=new o(1),h=new o(0),T=m.clone();u.cmpn(1)>0&&m.cmpn(1)>0;){for(var C=0,f=1;(u.words[0]&f)===0&&C<26;++C,f<<=1);if(C>0)for(u.iushrn(C);C-- >0;)d.isOdd()&&d.iadd(T),d.iushrn(1);for(var l=0,g=1;(m.words[0]&g)===0&&l<26;++l,g<<=1);if(l>0)for(m.iushrn(l);l-- >0;)h.isOdd()&&h.iadd(T),h.iushrn(1);u.cmp(m)>=0?(u.isub(m),d.isub(h)):(m.isub(u),h.isub(d))}var v;return u.cmpn(1)===0?v=d: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 d=0;u.isEven()&&m.isEven();d++)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(d)},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,d=1<<u;if(this.length<=m)return this._expand(m+1),this.words[m]|=d,this;for(var h=d,T=m;h!==0&&T<this.length;T++){var C=this.words[T]|0;C+=h,h=C>>>26,C&=67108863,this.words[T]=C}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 d=this.words[0]|0;m=d===r?0:d<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 d=this.words[m]|0,h=r.words[m]|0;if(d!==h){d<h?u=-1:d>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 H(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 xe={k256:null,p224:null,p192:null,p25519:null};function Rt(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()}Rt.prototype._tmp=function(){var r=new o(null);return r.words=new Array(Math.ceil(this.n/13)),r},Rt.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 d=m<this.n?-1:u.ucmp(this.p);return d===0?(u.words[0]=0,u.length=1):d>0?u.isub(this.p):u.strip!==void 0?u.strip():u._strip(),u},Rt.prototype.split=function(r,u){r.iushrn(this.n,0,u)},Rt.prototype.imulK=function(r){return r.imul(this.k)};function De(){Rt.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}n(De,Rt),De.prototype.split=function(r,u){for(var m=4194303,d=Math.min(r.length,9),h=0;h<d;h++)u.words[h]=r.words[h];if(u.length=d,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 C=r.words[h]|0;r.words[h-10]=(C&m)<<4|T>>>22,T=C}T>>>=22,r.words[h-10]=T,T===0&&r.length>10?r.length-=10:r.length-=9},De.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 d=r.words[m]|0;u+=d*977,r.words[m]=u&67108863,u=d*64+(u/67108864|0)}return r.words[r.length-1]===0&&(r.length--,r.words[r.length-1]===0&&r.length--),r};function Cn(){Rt.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}n(Cn,Rt);function xn(){Rt.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}n(xn,Rt);function $e(){Rt.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}n($e,Rt),$e.prototype.imulK=function(r){for(var u=0,m=0;m<r.length;m++){var d=(r.words[m]|0)*19+u,h=d&67108863;d>>>=26,r.words[m]=h,u=d}return u!==0&&(r.words[r.length++]=u),r},o._prime=function(r){if(xe[r])return xe[r];var u;if(r==="k256")u=new De;else if(r==="p224")u=new Cn;else if(r==="p192")u=new xn;else if(r==="p25519")u=new $e;else throw new Error("Unknown prime "+r);return xe[r]=u,u};function H(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}H.prototype._verify1=function(r){t(r.negative===0,"red works only with positives"),t(r.red,"red works only with red numbers")},H.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")},H.prototype.imod=function(r){return this.prime?this.prime.ireduce(r)._forceRed(this):(b(r,r.umod(this.m)._forceRed(this)),r)},H.prototype.neg=function(r){return r.isZero()?r.clone():this.m.sub(r)._forceRed(this)},H.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)},H.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},H.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)},H.prototype.isub=function(r,u){this._verify2(r,u);var m=r.isub(u);return m.cmpn(0)<0&&m.iadd(this.m),m},H.prototype.shl=function(r,u){return this._verify1(r),this.imod(r.ushln(u))},H.prototype.imul=function(r,u){return this._verify2(r,u),this.imod(r.imul(u))},H.prototype.mul=function(r,u){return this._verify2(r,u),this.imod(r.mul(u))},H.prototype.isqr=function(r){return this.imul(r,r.clone())},H.prototype.sqr=function(r){return this.mul(r,r)},H.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 d=this.m.subn(1),h=0;!d.isZero()&&d.andln(1)===0;)h++,d.iushrn(1);t(!d.isZero());var T=new o(1).toRed(this),C=T.redNeg(),f=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new o(2*l*l).toRed(this);this.pow(l,f).cmp(C)!==0;)l.redIAdd(C);for(var g=this.pow(l,d),v=this.pow(r,d.addn(1).iushrn(1)),O=this.pow(r,d),P=h;O.cmp(T)!==0;){for(var B=O,_=0;B.cmp(T)!==0;_++)B=B.redSqr();t(_<P);var F=this.pow(g,new o(1).iushln(P-_-1));v=v.redMul(F),g=F.redSqr(),O=O.redMul(g),P=_}return v},H.prototype.invm=function(r){var u=r._invmp(this.m);return u.negative!==0?(u.negative=0,this.imod(u).redNeg()):this.imod(u)},H.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,d=new Array(1<<m);d[0]=new o(1).toRed(this),d[1]=r;for(var h=2;h<d.length;h++)d[h]=this.mul(d[h-1],r);var T=d[0],C=0,f=0,l=u.bitLength()%26;for(l===0&&(l=26),h=u.length-1;h>=0;h--){for(var g=u.words[h],v=l-1;v>=0;v--){var O=g>>v&1;if(T!==d[0]&&(T=this.sqr(T)),O===0&&C===0){f=0;continue}C<<=1,C|=O,f++,!(f!==m&&(h!==0||v!==0))&&(T=this.mul(T,d[C]),f=0,C=0)}l=26}return T},H.prototype.convertTo=function(r){var u=r.umod(this.m);return u===r?u.clone():u},H.prototype.convertFrom=function(r){var u=r.clone();return u.red=null,u},o.mont=function(r){return new fe(r)};function fe(y){H.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,H),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),d=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(d).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),d=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),h=m.isub(d).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 Ss>"u"||Ss,_l)});import{TransactionType as Au}from"@msafe/sui3-utils";import{coinsList as Tu,poolIdPoolNameMap as Su,poolInfo as qs,singleAssetPoolCoinMap as wu}from"@alphafi/alphafi-sdk";import{TransactionType as He}from"@msafe/sui3-utils";import{bcs as Dn,fromBase64 as kn}from"@mysten/bcs";var vn=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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=Su[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&&qs[t].assetTypes.length===2}isSingleAssetDepositEvent(e,t){return e.event_type===0&&qs[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=Dn.u64().parse(kn(t)):t.length===24?n=Dn.u128().parse(kn(t)):t.length===44?n=Dn.u256().parse(kn(t)):n=Dn.u64().parse(kn(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:He.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}=wu[e],{expo:s}=Tu[i];n=Math.floor(Number(n)/10**(9-s)).toString()}return{txType:He.Other,type:"depositSingleAsset",intentionData:{poolName:e,amount:n}}}decodeWithdraw(e){let t=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",t),{txType:He.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:He.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:t}}}decodeClaimReward(){return{txType:He.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as Cu}from"@alphafi/alphafi-sdk";import Iu from"sort-keys-recursive";var w=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Iu(this.data))}};var An=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t;return await Cu(n.address)}static fromData(t){return new a(t)}};import{depositDoubleAssetTxb as xu}from"@alphafi/alphafi-sdk";var Mn=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i,isAmountA:s}=this.data;return await xu(o,n.address,i,s)}static fromData(t){return console.log("DepositDoubleAssetIntention.fromData",t),new a(t)}};import{depositSingleAssetTxb as Du}from"@alphafi/alphafi-sdk";var On=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,amount:i}=this.data;return await Du(o,n.address,i)}static fromData(t){return console.log("DepositSingleAssetIntention.fromData",t),new a(t)}};import{withdrawTxb as ku}from"@alphafi/alphafi-sdk";var Pn=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{poolName:o,xTokensAmount:i}=this.data;return await ku(i,o,n.address)}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};import{withdrawAlphaTxb as vu}from"@alphafi/alphafi-sdk";var Rn=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{withdrawFromLocked:o,xTokensAmount:i}=this.data;return await vu(i,o,n.address)}static fromData(t){return console.log("WithdrawAlphaIntention.fromData",t),new a(t)}};var Bn=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 c=new vn(t,i).decode();return{txType:Au.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{account:t}=e;console.log("AlphaFi build transaction type",e.txSubType);let n;switch(e.txSubType){case"depositSingleAsset":n=On.fromData(e.intentionData);break;case"depositDoubleAsset":n=Mn.fromData(e.intentionData);break;case"withdraw":n=Pn.fromData(e.intentionData);break;case"withdrawAlpha":n=Rn.fromData(e.intentionData);break;case"claimReward":n=An.fromData(e.intentionData);break;default:throw new Error("not implemented")}return n.build({account:t})}};import{TransactionType as Ju}from"@msafe/sui3-utils";import{TransactionType as jt}from"@msafe/sui3-utils";import{bcs as Br}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as Er}from"bucket-protocol-sdk";var En=class{constructor(e){this.transaction=e}transaction;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(Er,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Er,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(Er,"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 c=this.getMoveCallCommand("high_top_up").MoveCall;[e]=c.typeArguments;let p=c.arguments[1];p.$kind==="Input"&&(t=this.getPureInputU64(p.Input));let b=c.arguments[3];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}else if(this.getMoveCallCommand("high_borrow")){let c=this.getMoveCallCommand("high_borrow").MoveCall;[e]=c.typeArguments;let p=c.arguments[4];p.$kind==="Input"&&(t=this.getPureInputU64(p.Input));let b=c.arguments[5];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let c=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[e]=c.typeArguments;let p=c.arguments[5];p.$kind==="Input"&&(t=this.getPureInputU64(p.Input));let b=c.arguments[6];if(b.$kind==="Input"){let S=this.getPureAddresses(b.Input);S.length===1&&([n]=S)}}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 c=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[e]=c.typeArguments;let p=c.arguments[4];p.$kind==="Input"&&(n=this.getPureInputU64(p.Input));let b=c.arguments[5];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([i]=I)}let S=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];S.$kind==="Input"&&(t=this.getPureInputU64(S.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let c=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[e]=c.typeArguments;let p=c.arguments[5];p.$kind==="Input"&&(n=this.getPureInputU64(p.Input));let b=c.arguments[6];if(b.$kind==="Input"){let I=this.getPureAddresses(b.Input);I.length===1&&([i]=I)}let S=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];S.$kind==="Input"&&(t=this.getPureInputU64(S.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 c=i.arguments[5];if(c.$kind==="Input"){let p=this.getPureAddresses(c.Input);p.length===1&&([n]=p)}}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 c=i.arguments[4];if(c.$kind==="Input"){let p=this.getPureAddresses(c.Input);p.length===1&&([n]=p)}}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 p=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];p.$kind==="Input"&&(e=this.getPureInputU64(p.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let c=0;c<o.length;c++){let p=o[c];n.push("")}else{let c=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let p=0;p<c.length;p++){let S=c[p].MoveCall.arguments[2];if(S.$kind==="Input"){let{objectId:I}=this.inputs[S.Input].UnresolvedObject;n.push(I)}}}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 Br.U64.fromBase64(t.Pure.bytes)}getPureAddresses(e){let t=this.inputs[e];if(t.$kind!=="Pure")throw new Error("not pure argument");return Br.vector(Br.Address).fromBase64(t.Pure.bytes)}};import{TransactionType as Ru}from"@msafe/sui3-utils";import{Transaction as Ou}from"@mysten/sui/transactions";import{buildPsmTx as Pu}from"bucket-protocol-sdk";import{BucketClient as Mu}from"bucket-protocol-sdk";var Bt=(a,e)=>{let t=a==="sui:mainnet"?"mainnet":"testnet";return new Mu(t,e.address)};var Fs=async(a,e,t)=>{let{coinType:n,amount:o,buckToCoin:i}=a,s=new Ou,c=Bt(t,e);return await Pu(c,s,n,o,i,e.address),s};var Nn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Ru.Other;txSubType="psm";async build(t){let{account:n,network:o}=t;return await Fs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as _u}from"@msafe/sui3-utils";import{Transaction as Wn}from"@mysten/sui/transactions";import{buildBorrowTx as Bu,buildCloseTx as Eu,buildRepayTx as Nu,buildWithdrawTx as Wu}from"bucket-protocol-sdk";var Ks=async(a,e,t)=>{let{collateralType:n,collateralAmount:o,borrowAmount:i,insertionPlace:s,strapId:c}=a,p=new Wn,b=Bt(t,e);return await Bu(b,p,n,o,i,e.address,s,c),p},Vs=async(a,e,t)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:i,strapId:s}=a,c=new Wn,p=Bt(t,e);return await Wu(p,c,n,o,e.address,i,s),c},$s=async(a,e,t)=>{let{collateralType:n,repayAmount:o,withdrawAmount:i,isSurplus:s,insertionPlace:c,strapId:p}=a,b=new Wn,S=Bt(t,e);return await Nu(S,b,n,o,i,e.address,s,c,p),b},Hs=async(a,e,t)=>{let{collateralType:n,recipient:o,strapId:i}=a,s=new Wn,c=Bt(t,e);return await Eu(c,s,n,o,i),s};var _n=class a extends w{constructor(t){super(t);this.data=t}data;txType=_u.Other;txSubType="borrow";async build(t){let{account:n,network:o}=t;return await Ks(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Lu}from"@msafe/sui3-utils";var Ln=class a extends w{constructor(t){super(t);this.data=t}data;txType=Lu.Other;txSubType="repay";async build(t){let{account:n,network:o}=t;return await $s(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as ju}from"@msafe/sui3-utils";var jn=class a extends w{constructor(t){super(t);this.data=t}data;txType=ju.Other;txSubType="withdraw";async build(t){let{account:n,network:o}=t;return await Vs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Uu}from"@msafe/sui3-utils";var Un=class a extends w{constructor(t){super(t);this.data=t}data;txType=Uu.Other;txSubType="close";async build(t){let{account:n,network:o}=t;return await Hs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Hn}from"@msafe/sui3-utils";import{Transaction as qn}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as qu,buildSBUCKDepositTx as Fu,buildSBUCKUnstakeTx as Ku,buildSBUCKWithdrawTx as Vu}from"bucket-protocol-sdk";var Gs=async(a,e,t)=>{let{coinType:n,amount:o,isStake:i}=a,s=new qn,c=Bt(t,e);return await Fu(c,s,n,o,e.address,i),s},Xs=async(a,e,t)=>{let{stakeProofs:n,amount:o,isStake:i,toBuck:s}=a,c=new qn,p=Bt(t,e);return await Ku(p,c,n,o,e.address,i,s),c},zs=async(a,e,t)=>{let{amount:n}=a,o=new qn,i=Bt(t,e);return await Vu(i,o,n,e.address),o},Qs=async(a,e,t)=>{let{stakeProofs:n}=a,o=new qn,i=Bt(t,e);return await qu(i,o,n,e.address),o};var Fn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Hn.Other;txSubType="sbuck-deposit";async build(t){let{account:n,network:o}=t;return await Gs(this.data,n,o)}static fromData(t){return new a(t)}},Kn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Hn.Other;txSubType="sbuck-unstake";async build(t){let{account:n,network:o}=t;return await Xs(this.data,n,o)}static fromData(t){return new a(t)}},Vn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Hn.Other;txSubType="sbuck-withdraw";async build(t){let{account:n,network:o}=t;return await zs(this.data,n,o)}static fromData(t){return new a(t)}},$n=class a extends w{constructor(t){super(t);this.data=t}data;txType=Hn.Other;txSubType="sbuck-claim";async build(t){let{account:n,network:o}=t;return await Qs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Wr}from"@msafe/sui3-utils";import{Transaction as Nr}from"@mysten/sui/transactions";import{buildTankClaimTx as $u,buildTankDepositTx as Hu,buildTankWithdrawTx as Gu}from"bucket-protocol-sdk";var Js=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Nr,s=Bt(t,e);return await Hu(s,i,n,o,e.address),i},Ys=async(a,e,t)=>{let{coinType:n,amount:o}=a,i=new Nr,s=Bt(t,e);return await Gu(s,i,n,o,e.address),i},Zs=async(a,e,t)=>{let{coinType:n}=a,o=new Nr,i=Bt(t,e);return await $u(i,o,n,e.address),o};import{Transaction as Xu}from"@mysten/sui/transactions";import{buildLockedClaimTx as zu}from"bucket-protocol-sdk";var tc=async(a,e,t)=>{let{coinType:n,proofCount:o}=a,i=new Xu,s=Bt(t,e);return await zu(s,i,n,o,e.address),i};var Gn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Wr.Other;txSubType="tank-deposit";async build(t){let{account:n,network:o}=t;return await Js(this.data,n,o)}static fromData(t){return new a(t)}},Xn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Wr.Other;txSubType="tank-withdraw";async build(t){let{account:n,network:o}=t;return await Ys(this.data,n,o)}static fromData(t){return new a(t)}},zn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Wr.Other;txSubType="tank-claim";async build(t){let{account:n,network:o}=t;return await Zs(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Qu}from"@msafe/sui3-utils";var Qn=class a extends w{constructor(t){super(t);this.data=t}data;txType=Qu.Other;txSubType="lock-claim";async build(t){let{account:n,network:o}=t;return await tc(this.data,n,o)}static fromData(t){return new a(t)}};var Jn=class{application="bucket";supportSDK="@mysten/sui";async deserialize(e){console.log("Bucket helper deserialize input: ",e);let{transaction:t}=e,o=new En(t).decode();return{txType:Ju.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=Nn.fromData(e.intentionData);break;case"borrow":i=_n.fromData(e.intentionData);break;case"withdraw":i=jn.fromData(e.intentionData);break;case"repay":i=Ln.fromData(e.intentionData);break;case"close":i=Un.fromData(e.intentionData);break;case"tank-deposit":i=Gn.fromData(e.intentionData);break;case"tank-withdraw":i=Xn.fromData(e.intentionData);break;case"tank-claim":i=zn.fromData(e.intentionData);break;case"sbuck-deposit":i=Fn.fromData(e.intentionData);break;case"sbuck-unstake":i=Kn.fromData(e.intentionData);break;case"sbuck-withdraw":i=Vn.fromData(e.intentionData);break;case"sbuck-claim":i=$n.fromData(e.intentionData);break;case"lock-claim":i=Qn.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Om}from"@msafe/sui3-utils";import{TransactionType as tm}from"@msafe/sui3-utils";import{SuiJsonRpcClient as he,isSuiJsonRpcClient as gb,JsonRpcHTTPTransport as yb,getJsonRpcFullnodeUrl as ge}from"@mysten/sui/jsonRpc";var Yu={"sui:mainnet":"mainnet","sui:testnet":"testnet","sui:devnet":"devnet","sui:localnet":"localnet"};function Ge(a){return Yu[a]}var Gt=async(a,e)=>{let{CetusClmmSDK:t}=await import("@cetusprotocol/sui-clmm-sdk"),n=t.createSDK({env:"mainnet",sui_client:new he({url:ge("mainnet"),network:"mainnet"})});return n.setSenderAddress(e.address),n},Ut=async(a,e)=>{let{CetusFarmsSDK:t}=await import("@cetusprotocol/farms-sdk"),n=t.createSDK({env:"mainnet",sui_client:new he({url:ge("mainnet"),network:"mainnet"})});return n.setSenderAddress(e.address),n},Zu="https://api-sui.cetus.zone/router_v2/find_routes",ec=async(a,e)=>{let{AggregatorClient:t,Env:n}=await import("@cetusprotocol/aggregator-sdk"),o=new he({url:"https://fullnode.mainnet.sui.io/",network:"mainnet"});return new t({endpoint:Zu,signer:e.address,client:o,env:n.Mainnet})},Xe=async(a,e)=>{let{CetusVaultsSDK:t}=await import("@cetusprotocol/vaults-sdk"),n=t.createSDK({env:"mainnet"});return n.setSenderAddress(e.address),n},ke=async(a,e)=>{let{CetusXcetusSDK:t}=await import("@cetusprotocol/xcetus-sdk"),n=t.createSDK({env:"mainnet"});return n.setSenderAddress(e.address),n};var nc=async(a,e,t)=>await(await Gt(t,e)).Pool.createPoolPayload(a),oc=async(a,e,t)=>await(await Gt(t,e)).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),ac=async(a,e,t)=>await(await Gt(t,e)).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),ic=async(a,e,t)=>await(await Gt(t,e)).Position.closePositionPayload(a),rc=async(a,e,t)=>await(await Gt(t,e)).Position.removeLiquidityPayload(a),sc=async(a,e,t)=>await(await Gt(t,e)).Rewarder.collectRewarderPayload(a);var Yn=class a extends w{constructor(t){super(t);this.data=t}data;txType=tm.Other;txSubType="OpenAndAddLiquidity";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 Zn=class a extends w{constructor(t){super(t);this.data=t}data;txType=em.Other;txSubType="ClaimFeeAndMining";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await sc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as nm}from"@msafe/sui3-utils";var to=class a extends w{constructor(t){super(t);this.data=t}data;txType=nm.Other;txSubType="CreatePool";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 om}from"@msafe/sui3-utils";var eo=class a extends w{constructor(t){super(t);this.data=t}data;txType=om.Other;txSubType="DecreaseLiquidity";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 am}from"@msafe/sui3-utils";var cc=async(a,e,t)=>await(await Ut(t,e)).Farms.openPositionAddLiquidityStakePayload(a),lc=async(a,e,t)=>await(await Ut(t,e)).Farms.addLiquidityFixCoinPayload(a),uc=async(a,e,t)=>await(await Ut(t,e)).Farms.removeLiquidityPayload(a);var mc=async(a,e,t)=>await(await Ut(t,e)).Farms.removeLiquidityPayload(a),pc=async(a,e,t)=>await(await Ut(t,e)).Farms.claimFeeAndClmmReward(a),dc=async(a,e,t)=>await(await Ut(t,e)).Farms.harvestPayload(a),fc=async(a,e,t)=>{let n=await Ut(t,e),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},hc=async(a,e,t)=>await(await Ut(t,e)).Farms.depositPayload(a),gc=async(a,e,t)=>await(await Ut(t,e)).Farms.withdrawPayload(a);var no=class a extends w{constructor(t){super(t);this.data=t}data;txType=am.Other;txSubType="FarmingOpenAndAddLiquidity";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 im}from"@msafe/sui3-utils";var oo=class a extends w{constructor(t){super(t);this.data=t}data;txType=im.Other;txSubType="FarmingBatchHarvest";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 rm}from"@msafe/sui3-utils";var ao=class a extends w{constructor(t){super(t);this.data=t}data;txType=rm.Other;txSubType="FarmingClaimFeeAndReward";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 sm}from"@msafe/sui3-utils";var io=class a extends w{constructor(t){super(t);this.data=t}data;txType=sm.Other;txSubType="FarmingDecreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await uc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as cm}from"@msafe/sui3-utils";var ro=class a extends w{constructor(t){super(t);this.data=t}data;txType=cm.Other;txSubType="FarmingHarvest";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)}};import{TransactionType as lm}from"@msafe/sui3-utils";var so=class a extends w{constructor(t){super(t);this.data=t}data;txType=lm.Other;txSubType="FarmingIncreaseLiquidity";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 um}from"@msafe/sui3-utils";var co=class a extends w{constructor(t){super(t);this.data=t}data;txType=um.Other;txSubType="FarmingRemoveLiquidity";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 mm}from"@msafe/sui3-utils";var lo=class a extends w{constructor(t){super(t);this.data=t}data;txType=mm.Other;txSubType="FarmingStake";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 pm}from"@msafe/sui3-utils";var uo=class a extends w{constructor(t){super(t);this.data=t}data;txType=pm.Other;txSubType="FarmingUnstake";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 dm}from"@msafe/sui3-utils";var mo=class a extends w{constructor(t){super(t);this.data=t}data;txType=dm.Other;txSubType="IncreaseLiquidity";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await ac(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as ym}from"@msafe/sui3-utils";var po=async()=>{let{Transaction:a}=await import("@mysten/sui/transactions");return new a},fm=async(a,e,t)=>{let n=await Xe(t,e),o=await po();return o.setSender(e.address),n.Vest.buildRedeemPayload(a.params,o),o},hm=async(a,e)=>{let{default:t,vaults_mainnet:n}=await import("haedal-vault-sdk"),o=new t(n);o.senderAddress=e.address;let i=await po();return i.setSender(e.address),await o?.Vest.buildRedeemPayload(a.params,i),i},yc=async(a,e,t)=>{let n=await Gt(t,e),o=await po();return n?.Vest.buildRedeemPayload(a.params,o),o},gm=async(a,e,t)=>{let n=await Gt(t,e),o=await Ut(t,e),i=await po(),s=await o.Farms.withdrawReturnPayload(a.withdrawParams,i);return n.Vest.buildRedeemPayload(a.redeemParms.map(c=>({...c,clmm_position_id:s})),i),o.Farms.depositPayload({...a.depositParams,clmm_position_id:s},i),i},bc=async(a,e,t)=>a.type==="clmm"?yc(a,e,t):a.type==="farms"?gm(a,e,t):a.type==="vaults"?fm(a,e,t):a.type==="haedalVaults"?hm(a,e):yc(a,e,t);var fo=class a extends w{constructor(t){super(t);this.data=t}data;txType=ym.Other;txSubType="PosVestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await bc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as bm}from"@msafe/sui3-utils";var ho=class a extends w{constructor(t){super(t);this.data=t}data;txType=bm.Other;txSubType="RemoveLiquidity";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 Sm}from"@msafe/sui3-utils";import{Transaction as Tm}from"@mysten/sui/transactions";var Tc=async(a,e,t)=>{let{restituteMsafeFastRouterSwapParams:n}=await import("@cetusprotocol/aggregator-sdk"),o=await ec(t,e),i=new Tm;return await o.fastRouterSwap({...a,router:n(a.router),txb:i}),i};var go=class a extends w{constructor(t){super(t);this.data=t}data;txType=Sm.Other;txSubType="AggregatorSwap";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 wm}from"@msafe/sui3-utils";import{Transaction as Sc}from"@mysten/sui/transactions";var wc=async(a,e,t)=>{let n=await Xe(t,e),o=new Sc;return o.setSender(e.address),await n.Vaults.deposit(a,o),o},Ic=async(a,e,t)=>{let n=await Xe(t,e),o=new Sc;return await n.Vaults.withdraw(a,o),o};var yo=class a extends w{constructor(t){super(t);this.data=t}data;txType=wm.Other;txSubType="AddVaultsPosition";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await wc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Im}from"@msafe/sui3-utils";var bo=class a extends w{constructor(t){super(t);this.data=t}data;txType=Im.Other;txSubType="RemoveVaultsPosition";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 xm}from"@msafe/sui3-utils";import{Transaction as Cm}from"@mysten/sui/transactions";var Cc={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},xc=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,c=new Cm;return i.forEach(p=>{c.moveCall({target:`${Cc.published_at}::router::redeem`,typeArguments:[Cc.cetus_coin_type],arguments:[c.object(n),c.object(o),c.pure(p),c.object(s)]})}),c};var To=class a extends w{constructor(t){super(t);this.data=t}data;txType=xm.Other;txSubType="VestingRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await xc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Dm}from"@msafe/sui3-utils";var Dc=async(a,e,t)=>await(await ke(t,e)).XCetusModule.convertPayload(a),kc=async(a,e,t)=>await(await ke(t,e)).XCetusModule.redeemLockPayload(a),vc=async(a,e,t)=>await(await ke(t,e)).XCetusModule.redeemDividendV3Payload(a.veNftId,a.rewardList),Ac=async(a,e,t)=>await(await ke(t,e)).XCetusModule.cancelRedeemPayload(a),Mc=async(a,e,t)=>await(await ke(t,e)).XCetusModule.redeemPayload(a);var So=class a extends w{constructor(t){super(t);this.data=t}data;txType=Dm.Other;txSubType="xCETUSCancelRedeem";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await Ac(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as km}from"@msafe/sui3-utils";var wo=class a extends w{constructor(t){super(t);this.data=t}data;txType=km.Other;txSubType="xCETUSClaimStakingRwewards";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await vc(i,n,o)}static fromData(t){return new a(t)}};import{TransactionType as vm}from"@msafe/sui3-utils";var Io=class a extends w{constructor(t){super(t);this.data=t}data;txType=vm.Other;txSubType="xCETUSConvert";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)}};import{TransactionType as Am}from"@msafe/sui3-utils";var Co=class a extends w{constructor(t){super(t);this.data=t}data;txType=Am.Other;txSubType="xCETUSRedeem";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 Mm}from"@msafe/sui3-utils";var xo=class a extends w{constructor(t){super(t);this.data=t}data;txType=Mm.Other;txSubType="xCETUSRedeemLock";async build(t){let{account:n,network:o}=t,{txbParams:i}=this.data;return await kc(i,n,o)}static fromData(t){return new a(t)}};var Do=class{application="cetus";supportSDK="@mysten/sui";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{txbParams:t,action:n}=e;return{txType:Om.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=Yn.fromData(e.intentionData);break;case"IncreaseLiquidity":i=mo.fromData(e.intentionData);break;case"DecreaseLiquidity":i=eo.fromData(e.intentionData);break;case"RemoveLiquidity":i=ho.fromData(e.intentionData);break;case"ClaimFeeAndMining":i=Zn.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":i=no.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":i=so.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":i=io.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":i=co.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":i=ao.fromData(e.intentionData);break;case"FarmingHarvest":i=ro.fromData(e.intentionData);break;case"FarmingBatchHarvest":i=oo.fromData(e.intentionData);break;case"FarmingStake":i=lo.fromData(e.intentionData);break;case"FarmingUnstake":i=uo.fromData(e.intentionData);break;case"xCETUSConvert":i=Io.fromData(e.intentionData);break;case"xCETUSRedeemLock":i=xo.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":i=wo.fromData(e.intentionData);break;case"xCETUSCancelRedeem":i=So.fromData(e.intentionData);break;case"xCETUSRedeem":i=Co.fromData(e.intentionData);break;case"VestingRedeem":i=To.fromData(e.intentionData);break;case"AggregatorSwap":i=go.fromData(e.intentionData);break;case"AddVaultsPosition":i=yo.fromData(e.intentionData);break;case"RemoveVaultsPosition":i=bo.fromData(e.intentionData);break;case"PosVestingRedeem":i=fo.fromData(e.intentionData);break;case"CreatePool":i=to.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Ap}from"@msafe/sui3-utils";import Pm from"sort-keys-recursive";var Xt=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Pm(this.data))}};import{getFullnodeUrl as ko}from"@mysten/sui.js/client";var _r={};Us(_r,{contractId:()=>Em,default:()=>jm,feeObjId:()=>_m,roleObjId:()=>Nm,status:()=>Bm,transaction:()=>Rm,upgradeCapObjId:()=>Lm,vaultObjId:()=>Wm});var Rm="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",Bm="success",Em="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Nm="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",Wm="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",_m="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Lm="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",jm={transaction:Rm,status:Bm,contractId:Em,roleObjId:Nm,vaultObjId:Wm,feeObjId:_m,upgradeCapObjId:Lm};var Lr={};Us(Lr,{contractId:()=>Fm,default:()=>Gm,feeObjId:()=>$m,roleObjId:()=>Km,status:()=>qm,transaction:()=>Um,upgradeCapObjId:()=>Hm,vaultObjId:()=>Vm});var Um="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",qm="success",Fm="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Km="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Vm="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",$m="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",Hm="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Gm={transaction:Um,status:qm,contractId:Fm,roleObjId:Km,vaultObjId:Vm,feeObjId:$m,upgradeCapObjId:Hm};var Xm=ko("testnet"),zm=ko("testnet"),Qm=ko("mainnet"),Jm=ko("mainnet"),Ym="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",Zm="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",tp="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",ep="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",Oc=_r,Pc=Lr,np=new Map([["dev",{env:"dev",rpc:{url:Xm},backend:{url:Ym},contract:Oc}],["stg",{env:"stg",rpc:{url:zm},backend:{url:Zm},contract:Oc}],["prev",{env:"prev",rpc:{url:Qm},backend:{url:tp},contract:Pc}],["prod",{env:"prod",rpc:{url:Jm},backend:{url:ep},contract:Pc}]]);function Rc(a,e){let t=np.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 ap}from"@mysten/sui.js/client";var j=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 vo=class extends j{constructor(){super(11,"Backend is not specified")}};var Ao=class extends j{constructor(){super(1,"Wallet not connected")}};import Ae,{AxiosError as op}from"axios";var ve=class extends j{constructor(e,t){super(10,e,{context:t})}};var Mo=class a{constructor(e){this.apiURL=e}apiURL;static parseResponseData(e){if(e instanceof op)throw new ve(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new ve(e.data.code)}throw new ve(e.status.toString())}async getIncomingStreams(e,t){let n=await Ae.post(`${this.apiURL}/stream`,{recipient:e,...t});return a.parseResponseData(n)}async getOutgoingStreams(e,t){let n=await Ae.post(`${this.apiURL}/stream`,{sender:e,...t});return a.parseResponseData(n)}async getStreamHistory(e){let t=await Ae.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 Ae.post(`${this.apiURL}/stream-info`,{address:e});return a.parseResponseData(t)}async getAllRecipients(e,t){let n=await Ae.post(`${this.apiURL}/stream-info`,{sender:e,status:t});return a.parseResponseData(n)}async getAllSenders(e,t){let n=await Ae.post(`${this.apiURL}/stream-info`,{recipient:e,status:t});return a.parseResponseData(n)}};var Me=class a{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new ap({url:e.rpc.url}),e.backend&&(this._backend=new Mo(e.backend.url))}static new(e,t){let n=Rc(e,t);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new vo;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 Ao;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as Dp,normalizeStructTag as kp,normalizeSuiAddress as nl}from"@mysten/sui.js/utils";import{TransactionBlock as No}from"@mysten/sui.js/transactions";import{TransactionBlock as qc}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as Fc,normalizeStructTag as cp}from"@mysten/sui.js/utils";var jr=50n,Oo=10000n,Bc=25n,Ur=100000000n;var zt=class{constructor(e){this.object=e}object;moveArg(e){return e.object(this.object)}},ze=class{constructor(e){this.objects=e}objects;moveArgs(e){return e.makeMoveVec({objects:this.objects.map(t=>e.object(t))})}},ce=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)}})}result;moveArg(){return this.result}};import{Buffer as Ec}from"buffer";import{normalizeSuiAddress as ip}from"@mysten/sui.js/utils";var Qe=class extends j{constructor(e,t){super(3,e,{context:t})}};var Po=class{constructor(e){this.results=e}results;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 Qe("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return ip(Ec.from(n).toString("hex"))}getU64(e=0,t=0){let[n,o]=this.getValue(e,t);if(o!=="u64")throw new Qe("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return Ec.from(n).readBigInt64LE()}};import{bcs as Wc}from"@mysten/sui.js/bcs";var G=class extends j{constructor(e,t,n){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:n}})}};var _c={groupId:"string",name:"string"},rp=64;function Lc(a){return jc(a),Wc.ser(_c,a).toString("base64")}function Je(a){let e=Wc.de(_c,a,"base64");return jc(e),e}function jc(a){if(!Nc(a.name))throw new G("Invalid metadata: Name contains unknown character");if(!Nc(a.groupId))throw new G("Invalid metadata: Group ID contains unknown character");if(a.name.length>rp)throw new G("Invalid metadata: Name exceed max length 64")}function Nc(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as Ro}from"@mysten/sui.js/utils";function Bo(a,e){return Ro(a)===Ro(e)}function le(a,e){return Ro(a)===Ro(e)}var Eo="txn.gas";import{nanoid as sp}from"nanoid";function Uc(){return sp()}var ye=class a{constructor(e,t,n){this.globals=e;this.feeContract=t;this.streamContract=n}globals;feeContract;streamContract;static convertCreateStreamInfoToInternal(e){return{metadata:Lc({name:e.name,groupId:Uc()}),coinType:cp(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 qc,n=this.calculateFeesInternal(e),o=this.getCreateStreamCoinRequests(e,n),i=await this.wallet.requestCoins(o),s=await this.addMergeCoins(t,i[0]),c;o.length>1?c=await this.addMergeCoins(t,i[1]):c=s;for(let p=0;p<e.recipients.length;p++){let b=e.recipients[p],S=this.amountForRecipient(b,e.numberEpoch),I=this.getStreamFeeLocal(S),[x]=t.splitCoins(s,[t.pure(S+I,"u64")]),[D]=t.splitCoins(c,[t.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(t,{paymentCoin:new ce(x),flatFeeCoin:new ce(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:jr,denominator:Oo},claimFeePercent:{numerator:Bc,denominator:Oo},flatFeePerStream:Ur}}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===Eo?n=e.gas:n=e.object(t.primaryCoin),n}getCreateStreamCoinRequests(e,t){let n=e.coinType;return Bo(n,Fc)?[{coinType:n,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:n,amount:t.totalAmount+t.streamFeeAmount},{coinType:Fc,amount:t.flatFeeAmount}]}calculateFeesInternal(e){let t=e.recipients.reduce((o,i)=>{let s=this.amountForRecipient(i,e.numberEpoch),c=this.getStreamFeeLocal(s);return{totalAmount:o.totalAmount+s,streamFeeAmount:o.streamFeeAmount+c}},{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 Ur}getStreamFeeLocal(e){return e*jr/Oo}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new qc,e),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:t});return new Po(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Vc}from"@mysten/sui.js/transactions";var Kc="0x0000000000000000000000000000000000000000000000000000000000000006";var Oe=class{constructor(e,t,n){this.moduleName=e;this.config=t;this.globals=n}moduleName;config;globals;addContractCall(e,t){let n=`${this.config.contractId}::${this.moduleName}::${t.method}`;return e.add(Vc.MoveCall({target:n,arguments:t.arguments.map(o=>o instanceof ze?o.moveArgs(e):o instanceof zt?o.moveArg(e):o instanceof ce?o.moveArg():e.pure(o)),typeArguments:t.typeArgs})),e}addTransactionBlock(e,t,n=[],o=[]){e.add(Vc.MoveCall({target:t,arguments:n.map(i=>i instanceof ze?i.moveArgs(e):i instanceof zt?i.moveArg(e):i instanceof ce?i.moveArg():e.pure(i)),typeArguments:o}))}makeObject(e){return typeof e=="string"?new zt(e):e}vaultObject(){return new zt(this.config.vaultObjId)}roleObject(){return new zt(this.config.roleObjId)}feeObject(){return new zt(this.config.feeObjId)}clockObject(){return new zt(Kc)}};var Pe=class a extends Oe{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}config;globals;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 Qt=class a extends Oe{constructor(t,n){super(a.ModuleName,t,n);this.config=t;this.globals=n}config;globals;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),c=this.makeObject(n.flatFeeCoin),p=this.clockObject();return this.addContractCall(t,{method:a.MethodName.create_stream,arguments:[o,i,s,c,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,p],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(),c=this.clockObject();return this.addContractCall(t,{method:a.MethodName.claim_stream_by_proxy,arguments:[o,i,s,c],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 Re=class{constructor(e){this.globals=e;let t=e.envConfig.contract;this.feeContract=new Pe(t,e),this.streamContract=new Qt(t,e)}globals;feeContract;streamContract;async createStreams(e){let t=ye.convertCreateStreamInfoToInternal(e);return this.createStreamHelper().buildCreateStreamTransactionBlock(t)}createStreamHelper(){return new ye(this.globals,this.feeContract,this.streamContract)}setAutoClaim(e,t,n){let o=new No;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:n})}claimStream(e,t){let n=new No;return this.streamContract.claimStream(n,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let n=new No;return this.streamContract.claimStreamByProxy(n,{streamId:e,coinType:t})}cancelStream(e,t){let n=new No;return this.streamContract.cancelStream(n,{streamId:e,coinType:t}),n}};import{normalizeStructTag as qr,SUI_TYPE_ARG as lp}from"@mysten/sui.js/utils";import{Duration as $c}from"luxon";var Wo=class extends j{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var up=1e3,_o=class{constructor(e){this.globals=e;this.coinMetaHelper=new Fr(e.suiClient),this.createStreamHelper=new Re(e).createStreamHelper()}globals;coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new Wo(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 G("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 G("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 G("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,n=e.timeStart.plus($c.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:n,interval:$c.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:qr(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:qr(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 G("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new G("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<up)throw new G("Interval shall be at least 1 second","interval",e.interval)}},Fr=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}suiClient;coinMetaReg;async getCoinMeta(e){let t=qr(e||lp);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 Xc,normalizeSuiAddress as Ko}from"@mysten/sui.js/utils";import{DateTime as zc}from"luxon";import{TransactionBlock as qo}from"@mysten/sui.js/transactions";import{normalizeStructTag as Gc,parseStructTag as dp}from"@mysten/sui.js/utils";import{DateTime as fp}from"luxon";var Lo=class extends j{constructor(){super(7,"Connected wallet is not creator")}};var Ye=class extends j{constructor(){super(8,"Connected wallet is not recipient")}};var Ze=class extends j{constructor(e,t){super(6,e,{context:t})}};var Ot=class extends j{constructor(e,t={}){super(0,e,t)}};var jo=class extends j{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as mp,Duration as pp}from"luxon";var Hc=(1n<<64n)-1n,Uo=1e3;function Kr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Uo);return mp.fromMillis(t*Uo)}function Vr(a){let e;typeof a=="number"?e=a:typeof a=="bigint"?e=Number(a):e=a.toMillis();let t=Math.round(e/Uo);return pp.fromMillis(t*Uo)}var ue=class a{constructor(e,t,n){this.globals=e;this.streamId=t;this.rawData=n;this.streamContract=new Qt(e.envConfig.contract,e)}globals;streamId;rawData;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 Ot("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 Lo;let e=new qo;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Ye;let e=new qo;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new Ye;let t=new qo;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new qo;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 Gc(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 Vr(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return Je(e).groupId}get name(){let{metadata:e}=this.rawData.config;return Je(e).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return Kr(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,t=e.epochInterval*e.totalEpoch;return Vr(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:Kr((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===Hc?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=fp.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 jo(e):new Ze(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let n=t.data.content;if(n.dataType!=="moveObject")throw new Ze("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=dp(n.type),i=Gc(o[0]),s=n.fields,c=s.config.fields,p=s.status.fields;return{coinType:i,autoClaim:s.auto_claim,balance:BigInt(s.balance.fields.balance),config:{amountPerEpoch:BigInt(c.amount_per_epoch),cancelable:c.cancelable,cliff:BigInt(c.cliff),creator:c.creator,epochInterval:BigInt(c.epoch_interval),metadata:c.metadata,recipient:c.recipient,timeStart:BigInt(c.time_start),totalEpoch:BigInt(c.total_epoch)},status:{status:p.status,epochCanceled:BigInt(p.epoch_canceled),epochClaimed:BigInt(p.epoch_claimed)}}}};var Be=class extends j{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};async function Hr(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 $r=class{constructor(e){this.requester=e;this.curPage=void 0,this.init=!0}requester;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)}},Ee=class{constructor(e){this.requester=e;this.pager=new $r(e),this.curData=[],this.cursor=0}requester;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 hp=25;async function Xr(a,e,t){let n=new tn(e),o=new en(a,n,t);return await Hr(o)}var tn=class{constructor(e){this.ids=e;this.cursor=-1}ids;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]}},en=class extends Ee{constructor(t,n,o){super(new Gr(t,n,o));this.suiClient=t;this.idIter=n;this.options=o}suiClient;idIter;options},Gr=class{constructor(e,t,n){this.suiClient=e;this.stringIter=t;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||hp,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}suiClient;stringIter;options;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 Fo=class a{constructor(e,t){this.globals=e;this.streams=t;if(t.length===0)throw new Be("stream size 0");let n=t.map(i=>i.groupId);if(new Set(n).size!==1)throw new G("Stream does not have same group ID")}globals;streams;type="StreamGroup";static async new(e,t){let n=await Xr(e.suiClient,t);return n.forEach(o=>{if(!o)throw new Ot("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=>{gp(n,i)||(o=!1)}),o}async refresh(){let e=await Xr(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)=>ue.fromObjectData(e,t[s],i)).filter(i=>!!i);if(new Set(o.map(i=>i.groupId)).size!==1)throw new Be("Not same group ID");if(!this.checkStreamGroup(o))throw new Be("Not same stream settings");return o}};function gp(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 nn=class a{constructor(e,t){this.it=e;this.pageSize=t}it;pageSize;static async newIncoming(e){let t=await Vo.newIncoming(e);return new a(t,e.pageSize)}static async newOutgoing(e){let t=await Vo.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}},Vo=class a{constructor(e){this.requester=e}requester;cachedNext;static async newIncoming(e){let t=await $o.newIncomingQuery(e);return new a(t)}static async newOutgoing(e){let t=await $o.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 Ot("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new Ot("No more results");return e}},$o=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 tn(n.flat().map(s=>s.streamId));this.objectIter=new en(e.suiClient,i)}globals;recipient;groupRefs;query;current=0;objectIter;static async newIncomingQuery(e){let t=wp(e.query),n=await e.globals.walletAddress(),i=(await e.globals.backend.getIncomingStreams(n,t)).filter(c=>Ko(c.recipient)===Ko(n)),s=Qc(i);return new a(e.globals,n,s,e.query)}static async newOutgoingQuery(e){let t=Ip(e.query),n=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(n,t),i=Qc(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 Tp(this.globals,e[0].streamId,this.objectIter);return this.current++,Jc(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await Sp(this.globals,e.map(n=>n.streamId),this.objectIter);return this.current++,bp(t,this.query)?t:this.doNextRequest()}throw new Ot("Stream group with no stream")}};function Qc(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)=>zc.fromISO(n[0].createDate).toMillis()-zc.fromISO(t[0].createDate).toMillis())}function Jc(a,e){if(e===void 0)return!0;let t=yp(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 yp(a,e){return e===void 0?!0:Array.isArray(e)?e.includes(a.progress.status):a.progress.status===e}function bp(a,e){if(!e)return!0;let t=!1;return a.streams.forEach(n=>{Jc(n,e)&&(t=!0)}),t}async function Tp(a,e,t){let n=await Yc(t,e);return ue.fromObjectData(a,e,n)}async function Sp(a,e,t){let n=[];for(;n.length<e.length;){let o=await Yc(t,e[n.length]);n.push(o)}return Fo.newFromObjectResponse(a,e,n)}async function Yc(a,e){if(!await a.hasNext())throw new Ot("object iterator has been consumed");let t=await a.next();if(!t||t.error||t.data===void 0||t.data===null)throw new Ot("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new Ot("stream id not aligned");return t}function wp(a){return{status:zr(a?.status),coinType:Zc(a?.coinType),sender:tl(a?.sender)}}function Ip(a){return{status:zr(a?.status),coinType:Zc(a?.coinType),recipient:tl(a?.recipient)}}function zr(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((e,t)=>{let n=zr(t);return!e||e===n?n:"all"},void 0):Cp(a)}function Cp(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new G("Unknown stream filtered status")}}function Zc(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Xc(e)):void 0:Xc(a)}function tl(a){if(a)return Array.isArray(a)?a.length!==0?a.map(e=>Ko(e)):void 0:Ko(a)}var Ho=class extends j{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}coinType;requestAmount;gotAmount};var xp=25;async function el(a,e,t,n="0x2::sui::SUI",o=xp){let i=new Qr(a,e,n,o),s=BigInt(0),c=[];for(;await i.hasNext()&&s<t;){let p=await i.next();p&&(c.push(p),s+=BigInt(p.balance))}if(s<t)throw new Ho(n,t,s);return c}var Qr=class extends Ee{constructor(t,n,o,i){super(new Jr(t,n,o,i));this.suiClient=t;this.owner=n;this.coinType=o;this.reqPageSize=i}suiClient;owner;coinType;reqPageSize},Jr=class{constructor(e,t,n,o){this.suiClient=e;this.owner=t;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new Ot("Invalid reqPageSize")}suiClient;owner;coinType;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 Yr=class{constructor(e){this.msafe=e}msafe;get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},Go=class{constructor(e){this.account=e}account;async address(){return this.account.address}},Zr=class{constructor(e,t){this.singleWallet=e;this.suiClient=t}singleWallet;suiClient;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(Bo(e.coinType,Dp))return{primaryCoin:Eo};if(e.amount<=0)throw new G("Invalid coin request","coinAmount",e.amount);let t=await el(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new Ot("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(n=>n.coinObjectId)}}},Xo=class{globals;helper;constructor(e,t){this.globals=Me.new(e,t),this.helper=new _o(this.globals)}connectSingleWallet(e){let t=new Zr(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new Yr(e);this.globals.connectWallet(t)}async createStream(e){return this.builder().createStreams(e)}async getStream(e){return ue.new(this.globals,e)}async getIncomingStreams(e,t=10){return nn.newIncoming({globals:this.globals,query:e,pageSize:t})}async getOutgoingStreams(e,t=10){return nn.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=>kp(n))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>nl(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>nl(o))}get wallet(){return this.globals.wallet}builder(){return new Re(this.globals)}};var Ft=class extends Xt{application="mpay";getClient(e,t){let n=new Xo(e==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new Go(t)),n}};var on=class extends Ft{constructor(t){super(t);this.data=t}data;txType=Ap.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 Mp}from"@msafe/sui3-utils";var an=class extends Ft{constructor(t){super(t);this.data=t}data;txType=Mp.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 Op}from"@msafe/sui3-utils";var rn=class extends Ft{constructor(t){super(t);this.data=t}data;txType=Op.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 Pp}from"@msafe/sui3-utils";var sn=class extends Ft{constructor(t){super(t);this.data=t}data;txType=Pp.Stream;txSubType="CreateStream";async build(t){let{network:n,account:o}=t;return this.getClient(n,o).createStream(this.data)}};import{bcs as ol}from"@mysten/sui.js/bcs";import{normalizeStructTag as Rp,normalizeSuiAddress as cn}from"@mysten/sui.js/utils";var Ne=class a{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;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 cn(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 ol.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 cn(e.value.Object.ImmOrOwned.objectId)}return cn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return cn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return cn(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 ol.de(t,new Uint8Array(n))}typeArg(e){return Rp(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};var zo=class{constructor(e,t){this.globals=e;this.txb=t}globals;txb;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"&&le(t.target,this.contract.createStreamTarget));if(e.length===0)throw new Ot("No create stream transactions");return e.map(t=>new Ne(t,this.txb))}getCreationInfoFromMoveCall(e){let t=e.decodeInputString(4),{name:n,groupId:o}=Je(t),i=e.decodeInputAddress(5),s=e.decodeInputU64(6),c=e.decodeInputU64(7),p=e.decodeInputU64(8),b=e.decodeInputU64(9),S=e.decodeInputU64(10),I=e.decodeInputBool(11),x=e.typeArg(0);return{name:n,groupId:o,recipient:i,timeStart:s,cliff:c,epochInterval:p,totalEpoch:b,amountPerEpoch:S,cancelable:I,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 G("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 Qt(this.globals.envConfig.contract,this.globals)}get feeContract(){return new Pe(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new ye(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 Qo=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new Qt(e.envConfig.contract,e)}globals;txb;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"&&le(t.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&le(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&le(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&le(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&le(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new zo(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 Ne(e,this.txb)}};import{TransactionType as Bp}from"@msafe/sui3-utils";var ln=class extends Ft{constructor(t){super(t);this.data=t}data;txType=Bp.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 Jo=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(e){let{network:t,transactionBlock:n}=e,o=Me.new(t==="sui:mainnet"?"prod":"dev"),s=new Qo(o,n).decode(),c;switch(s.type){case"CreateStream":c=new sn(s.info);break;case"SetAutoClaim":c=new ln({streamId:s.streamId,enabled:s.enabled});break;case"Claim":c=new rn({streamId:s.streamId});break;case"ClaimByProxy":c=new an({streamId:s.streamId});break;case"Cancel":c=new on({streamId:s.streamId});break;default:throw new Error(`Unknown transaction type: ${s}`)}return{txType:c.txType,txSubType:c.txSubType,intentionData:c.data}}async build(e){let{intentionData:t}=e,n;switch(e.txSubType){case"CreateStream":n=new sn(t);break;case"Claim":n=new rn(t);break;case"ClaimByProxy":n=new an(t);break;case"SetAutoClaim":n=new ln(t);break;case"Cancel":n=new on(t);break;default:throw new Error("not implemented")}return n.build({...e})}};import{TransactionDefaultApplication as _p,TransactionSubTypes as al}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Np}from"@msafe/sui3-utils";import Ep from"sort-keys-recursive";var We=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Ep(this.data))}};var Yo=class a extends We{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiGrpcClient:n,account:o}=t;return Np(n,this.data,o.address)}static fromData(t){return new a(t)}};import{buildObjectTransferTxb as Wp}from"@msafe/sui3-utils";var Zo=class a extends We{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiGrpcClient:n,account:o}=t;return Wp(n,this.data,o.address)}static fromData(t){return new a(t)}};var ta=class{application="msafe-core";supportSDK="@mysten/sui-v2";constructor(){this.application=_p}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(e){let{account:t,network:n,suiGrpcClient:o}=e,i;switch(e.txSubType){case al.assets.coin.send:i=Yo.fromData(e.intentionData);break;case al.assets.object.send:i=Zo.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiGrpcClient:o,account:t,network:n})}};import{TransactionType as dl}from"@msafe/sui3-utils";var il=!1,un={ProtocolPackage:"0x1e4a13a0494d5facdbe8473e74127b838c2d446ecec0ce262e2eddafa77259cb",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 ts(){if(!il)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&&(un.ProtocolPackage=e),t&&(un.borrowFee=t),n&&(un.borrowFeeAddress=n),o&&(un.pool=o),il=!0}catch(a){console.error(a.message)}}var Jt=un;import{TransactionType as Te}from"@msafe/sui3-utils";import{bcs as mn,fromBase64 as pn}from"@mysten/bcs";import{normalizeStructTag as jp,normalizeSuiAddress as es}from"@mysten/sui/utils";function ea(a){if(a.$kind!=="MoveCall")return null;let{package:e,module:t,function:n}=a.MoveCall;return`${e}::${t}::${n}`}var na=class{constructor(e){this.txb=e}txb;decode(){if(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 commands(){return this.txb.getData().commands}getMoveCallCommand(e){return this.commands.find(t=>ea(t)===e)}isClaimRewardTransaction(){return this.commands.some(e=>e.$kind==="MoveCall"&&e.MoveCall.function.includes("claim_reward"))}isEntryBorrowTransaction(){return!!this.getMoveCallCommand(`${Jt.ProtocolPackage}::incentive_v3::entry_borrow_v2`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallCommand(`${Jt.ProtocolPackage}::incentive_v3::borrow_v2`)}isEntryMultiDepositTransaction(){let e=`${Jt.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.commands.filter(o=>ea(o)===e);return this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.function.includes("claim_reward"))?!1:t.length>1}isEntryClaimAndDepositTransaction(){let e=`${Jt.ProtocolPackage}::incentive_v3::entry_deposit`,t=this.commands.filter(o=>ea(o)===e);return!!(this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.function.includes("claim_reward"))&&t.length>0)}isEntryDepositTransaction(){return!!this.getMoveCallCommand(`${Jt.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallCommand(`${Jt.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallCommand(`${Jt.ProtocolPackage}::incentive_v3::withdraw_v2`)}decodeEntryClaimAndDeposit(){return{txType:Te.Other,type:"EntryClaimAndDeposit",intentionData:{type:"entry_claim_and_deposit"}}}decodeClaimReward(){return{txType:Te.Other,type:"ClaimReward",intentionData:{type:"claim_reward"}}}decodeEntryBorrow(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:Te.Other,type:"EntryBorrow",intentionData:{amount:t,assetId:e}}}decodeEntryMultiDeposit(){let e=[],t=`${Jt.ProtocolPackage}::incentive_v3::entry_deposit`;return this.commands.forEach(n=>{if(ea(n)===t){let o=new oa(n,this.txb),i=o.decodeInputU8(3),s=o.decodeInputU64(5);e.push({assetId:i,amount:s})}}),{txType:Te.Other,type:"EntryMultiDeposit",intentionData:{list:e}}}decodeEntryDeposit(){let e=this.helper.decodeInputU8(3),t=this.helper.decodeInputU64(5);return{txType:Te.Other,type:"EntryDeposit",intentionData:{amount:t,assetId:e}}}decodeEntryRepay(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(6);return{txType:Te.Other,type:"EntryRepay",intentionData:{amount:t,assetId:e}}}decodeEntryWithdraw(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5);return{txType:Te.Other,type:"EntryWithdraw",intentionData:{amount:t,assetId:e}}}get helper(){let e=this.commands.find(t=>t.$kind==="MoveCall"&&t.MoveCall.package===Jt.ProtocolPackage);if(!e)throw new Error("MoveCall not found");return new oa(e,this.txb)}},oa=class a{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;get moveCallData(){if(this.moveCall.$kind!=="MoveCall")throw new Error("not move call command");return this.moveCall.MoveCall}get inputs(){return this.txb.getData().inputs}getInputIndex(e){let t=this.moveCallData.arguments[e];if(t.$kind!=="Input")throw new Error("not input type");return t.Input}getInputParam(e){return this.inputs[this.getInputIndex(e)]}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.getInputParam(e);return Number(mn.u64().parse(Uint8Array.from(pn(t.Pure.bytes))))}decodeInputU8(e){let t=this.getInputParam(e);return Number(mn.u8().parse(Uint8Array.from(pn(t.Pure.bytes))))}decodeInputAddress(e){let t=this.getInputParam(e);return es(mn.Address.parse(Uint8Array.from(pn(t.Pure.bytes))))}decodeInputString(e){let t=this.getInputParam(e);return mn.string().parse(Uint8Array.from(pn(t.Pure.bytes)))}decodeInputBool(e){let t=this.getInputParam(e);return mn.bool().parse(Uint8Array.from(pn(t.Pure.bytes)))}static getOwnedObjectId(e){let t=e.Object?.ImmOrOwnedObject?.objectId??e.Object?.Receiving?.objectId??e.UnresolvedObject?.objectId;if(!t)throw new Error(`not object argument: ${JSON.stringify(e)}`);return es(t)}static getSharedObjectId(e){let t=e.Object?.SharedObject?.objectId??e.UnresolvedObject?.objectId;if(!t)throw new Error(`not shared object argument: ${JSON.stringify(e)}`);return es(t)}typeArg(e){return jp(this.moveCallData.typeArguments[e])}txArg(e){return this.moveCallData.arguments[e]}};import{Transaction as rl}from"@mysten/sui/transactions";import{depositCoinPTB as Up,withdrawCoinPTB as qp,repayCoinPTB as Fp,borrowCoinPTB as Kp,claimLendingRewardsPTB as sl,getUserAvailableLendingRewards as cl}from"@naviprotocol/lending";async function _e(a,e,t,n){return await Up(a,e,t,{amount:n}),a}async function ll(a,e,t,n){let[o]=await qp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function ul(a,e,t,n){let[o]=await Kp(a,e,t);return a.transferObjects([o],a.pure.address(n)),a}async function ns(a,e,t,n){return await Fp(a,e,t,{amount:n}),a}async function ml(a,e){let t=new rl,n=await cl(e,{client:a});return await sl(t,n),t}async function pl(a,e){let t=new rl,n=await cl(e,{client:a});return await sl(t,n,{customCoinReceive:{type:"depositNAVI",depositNAVI:{fallbackReceiveAddress:e}}}),t}var aa=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward",n),await ml(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};var ia=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{type:n}=this.data;return console.log("claim reward and supply",n),await pl(t.suiClient,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as $p}from"@mysten/sui/transactions";import{getPool as Vp}from"@naviprotocol/lending";async function Yt(a){return Vp(a)}var ra=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new $p;console.log("build",this.data);let s=await Yt(n);return await ul(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as Hp}from"@mysten/sui/transactions";async function Le(a,e,t){let n=await a.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,n),n}var sa=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,c=new Hp;console.log("build",this.data);let p=await Yt(i);if(i===0){let[x]=c.splitCoins(c.gas,[s]);return await _e(c,p,x,s)}let b=await Le(n,o.address,p.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${p.suiCoinType} Token`);let S=b.data[0].coinObjectId;if(b.data.length>=2){let x=1;for(;x<b.data.length;)c.mergeCoins(S,[b.data[x].coinObjectId]),x++}return await _e(c,p,c.object(S),s)}static fromData(t){return new a(t)}};import{Transaction as Gp}from"@mysten/sui/transactions";var ca=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{assetId:i,amount:s}=this.data,c=new Gp;console.log("build",this.data);let p=await Yt(i);if(i===0){let[I]=c.splitCoins(c.gas,[s]);return ns(c,p,I,s)}let b=await Le(n,o.address,p.suiCoinType);if(!b.data[0])throw new Error(`Insufficient balance for ${p.suiCoinType} Token`);let S=b.data[0].coinObjectId;if(b.data.length>=2){let I=1;for(;I<b.data.length;)c.mergeCoins(S,[b.data[I].coinObjectId]),I++}return ns(c,p,c.object(S),s)}static fromData(t){return new a(t)}};import{Transaction as Xp}from"@mysten/sui/transactions";var la=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{assetId:n,amount:o}=this.data,i=new Xp;console.log("build",this.data);let s=await Yt(n);return await ll(i,s,o,t.account.address)}static fromData(t){return new a(t)}};import{Transaction as zp}from"@mysten/sui/transactions";var ua=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o}=t,{list:i}=this.data,s=new zp;console.log("build",this.data);for(let c=0;c<i.length;c++){let{assetId:p,amount:b}=i[c],S=await Yt(p);if(p===0){let[D]=s.splitCoins(s.gas,[b]);await _e(s,S,D,b);continue}let I=await Le(n,o.address,S.suiCoinType);if(!I.data[0])throw new Error(`Insufficient balance for ${S.suiCoinType} Token`);let x=I.data[0].coinObjectId;if(I.data.length>=2){let D=1;for(;D<I.data.length;)s.mergeCoins(x,[I.data[D].coinObjectId]),D++}await _e(s,S,s.object(x),b)}return s}static fromData(t){return new a(t)}};import{Transaction as Qp}from"@mysten/sui/transactions";var ma=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return console.log("build",this.data),Qp.from(this.data.content)}static fromData(t){return new a(t)}};var pa=class{application="navi";supportSDK="@mysten/sui";async deserialize(e){if(await ts(),e.appContext?.content)return{txType:dl.Other,txSubType:"PlainTransaction",intentionData:{content:e.appContext.content,scene:e.appContext.scene||"unknown"}};let{transaction:t}=e,o=new na(t).decode();return{txType:dl.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(await ts(),e.txSubType){case"EntryDeposit":o=sa.fromData(e.intentionData);break;case"EntryBorrow":o=ra.fromData(e.intentionData);break;case"EntryRepay":o=ca.fromData(e.intentionData);break;case"EntryWithdraw":o=la.fromData(e.intentionData);break;case"EntryMultiDeposit":o=ua.fromData(e.intentionData);break;case"ClaimReward":o=aa.fromData(e.intentionData);break;case"EntryClaimAndDeposit":o=ia.fromData(e.intentionData);break;case"PlainTransaction":o=ma.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:n})}};import{TransactionSubTypes as Jp,TransactionType as fl}from"@msafe/sui3-utils";import{fromHex as Yp}from"@mysten/bcs";import{Transaction as Zp}from"@mysten/sui/transactions";import td from"sort-keys-recursive";var hl="msafe-plain-tx",gl=Jp.others.plain,os=class a{constructor(e){this.data=e}data;application=hl;txType=fl.Other;txSubType=gl;serialize(){return JSON.stringify(td(this.data))}async build(e){return Zp.from(Yp(this.data.content))}static fromData(e){return new a(e)}},da=class{application;supportSDK="@mysten/sui";constructor(){this.application=hl}async deserialize(e){let{content:t}=e.appContext;return{txType:fl.Other,txSubType:gl,intentionData:{content:t}}}async build(e){let{suiClient:t,network:n,account:o}=e;return os.fromData(e.intentionData).build({suiClient:t,network:n,account:o})}};import{Transaction as dn}from"@mysten/sui/transactions";import{SuiClient as ga}from"@mysten/sui.js/client";import{RequestManager as ad,HTTPTransport as id,Client as rd}from"@open-rpc/client-js";var ed={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},as=class extends Error{},fa=class extends as{code;type;constructor(e,t){super(e),this.code=t,this.type=ed[t]??"ServerError"}};function nd(a){let e=new URL(a);return e.protocol=e.protocol.replace("http","ws"),e.toString()}var od={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},ha=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={...od,...t},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=nd(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 fa(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 is(e);return this.#i.add(t),await t.subscribe(this),()=>t.unsubscribe(this)}},is=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 ee=class{rpcClient;websocketClient;constructor({url:e,websocket:{url:t,...n}={},rpc:o}){let i=new id(o?.url??e,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new rd(new ad([i])),this.websocketClient=new ha(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()}};import{SuiGrpcClient as sd}from"@mysten/sui/grpc";function cd(a){return Object.assign(a,{getObject(e){return a.core.getObject(e)},async listCoins(e){let t=await a.core.listCoins({owner:e.owner,coinType:e.coinType,cursor:e.cursor??void 0});return{objects:t.objects.map(n=>({coinType:e.coinType??"",objectId:n.objectId,version:n.version,digest:n.digest,balance:n.balance??"0"})),hasNextPage:t.hasNextPage,cursor:t.cursor}}})}function rs(a,e){let t=Ge(a),n=new sd({network:t,baseUrl:e??ge(t)});return cd(n)}var ld="0x2::sui::SUI",us=1e8,ya=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;case"@mysten/sui-v2":t.addGrpcHelper(o);break;default:throw new Error(`${o.application}: ${o.supportSDK} SDK not supported`)}}return t}addLegacyHelper(e){this.apps.set(e.application,new ls(e))}addHelper(e){this.apps.set(e.application,new ss(e))}addGrpcHelper(e){this.apps.set(e.application,new cs(e))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}},ss=class{constructor(e){this.helper=e}helper;async deserialize(e){let t=new he({network:Ge(e.network),transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=new ga({transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),i=dn.from(o);return this.helper.deserialize({...e,suiClient:t,transaction:i})}async build(e){let t=new he({network:Ge(e.network),transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<us)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 dn.from(i)}},cs=class{constructor(e){this.helper=e}helper;async deserialize(e){let t=rs(e.network,e.clientUrl),n=new ga({transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})}),o=await e.transactionBlock.build({client:n}),i=dn.from(o);return this.helper.deserialize({...e,suiGrpcClient:t,transaction:i})}async build(e){let t=rs(e.network,e.clientUrl),{balance:n}=await t.core.getBalance({owner:e.account.address,coinType:ld});if(Number(n.balance)<us)throw new Error("Insufficient gas fee");let o=await this.helper.build({...e,suiGrpcClient:t});o.setSender(e.account.address);let i=await o.build({client:t});return dn.from(i)}},ls=class{constructor(e){this.helper=e}helper;async deserialize(e){let t=new ga({transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})});return this.helper.deserialize({...e,transactionBlock:e.transactionBlock,suiClient:t})}async build(e){let t=new ga({transport:new ee({url:e.clientUrl,rpc:{url:e.clientUrl}})}),n=await t.getBalance({owner:e.account.address});if(Number(n.totalBalance)<us)throw new Error("Insufficient gas fee");let i=await(await this.helper.build({...e,suiClient:t})).build({client:t});return dn.from(i)}};import{TransactionType as Td}from"@msafe/sui3-utils";import{Scallop as Sd}from"@scallop-io/sui-scallop-sdk";import{TransactionType as Et}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as wl}from"@scallop-io/sui-scallop-sdk";import{parseStructTag as ud}from"@mysten/sui/utils";var me=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}`))}transaction;scallopClient;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}=ud(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,c)=>(i[s]=c,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 ms}from"@mysten/sui/bcs";import{normalizeStructTag as md,normalizeSuiAddress as fn}from"@mysten/sui/utils";var ps=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 c=`${i.MoveCall.package}::${i.MoveCall.module}::${i.MoveCall.function}`,p=`${e.MoveCall.package}::${e.MoveCall.module}::${e.MoveCall.function}`;return c===p?(o.push(s),!0):!1}return!1}),this.cmdIdx=o[n]}moveCall;transaction;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 fn(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"&&t.kind!=="Result")throw new Error("not nested or result 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=ms[t];return ms[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 fn(e.value.Object.ImmOrOwned.objectId)}return fn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return fn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return fn(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 ms.U64.parse(new Uint8Array(t))}typeArg(e){return md(this.txBlockTransactions.typeArguments[e])}txArg(e){return this.transaction.blockData.inputs[e]}},N=ps;var ds=class{constructor(e,t){this.splitCoin=e;this.txb=t}splitCoin;txb;getAmountInput(){return this.splitCoin.amounts.map(e=>{if(e.kind==="Input")return Number(N.getPureInputValue(e,"U64"))}).filter(e=>e!==void 0)}},Wt=ds;import{normalizeStructTag as yl,SUI_CLOCK_OBJECT_ID as bl,SUI_TYPE_ARG as pd}from"@mysten/sui/utils";var Tl=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`},je={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},Kt={unstakeObligation:(a,e,t)=>a.moveCall(`${je.id}::user::unstake`,[je.incentivePools,je.incentiveAccounts,a.object(e),a.object(t),bl],[yl(pd)]),redeem_rewards:(a,e,t,n)=>a.moveCall(`${je.id}::user::redeem_rewards`,[je.incentivePools,je.incentiveAccounts,a.object(e),a.object(t),bl],[yl(n)])};var Sl=(a,e)=>{let t=[];for(let n=0;n<a.length;n+=e)t.push(a.slice(n,n+e));return t};var ba=class extends me{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(`${wl}::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 N(t,this.transaction))}get helperClaimBorrowV2Reward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new N(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 N(e,this.transaction)}get helperClaimBorrowReward(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${wl}::user::redeem_rewards`)).map(t=>new N(t,this.transaction))}get helperMint(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::mint::mint`));return new N(e,this.transaction)}get helperUnstakes(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new N(t,this.transaction))}get helperRedeems(){return this.commands.filter(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new N(t,this.transaction))}get helperRedeem(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::redeem::redeem`));return new N(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 N(e,this.transaction)}get helperStake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::stake`));return new N(e,this.transaction)}get helperUnstake(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.spoolPkg}::user::unstake`));return new N(e,this.transaction)}get helperDepositCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new N(e,this.transaction)}get helperWithdrawCollateral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new N(e,this.transaction)}get helperBorrow(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow`));return new N(e,this.transaction)}get helperBorrowWithReferral(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new N(e,this.transaction)}get helperRepay(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.protocolPkg}::repay::repay`));return new N(e,this.transaction)}decodeMigrateScoin(){return{txType:Et.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:Et.Other,type:"MigrateAndClaim",intentionData:{obligationKey:t,obligationId:n,rewardCoinName:o,veScaKey:e}}}decodeOpenObligation(){return{txType:Et.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let e=this.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),n=new Wt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Et.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 Wt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Et.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:e}}}decodeWithdrawLendingScoin(){let e=this.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),t=this.helperBurnScoin.getNestedInputParam(1),n=new Wt(t,this.transaction).getAmountInput().reduce((o,i)=>o+i,0);return{txType:Et.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 Wt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:Et.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:Et.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:Et.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:Et.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:Et.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 Wt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:Et.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 Wt(n,this.transaction).getAmountInput().reduce((s,c)=>s+c,0),i=this.helperRepay.decodeSharedObjectId(1);return{txType:Et.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 Wt(i,this.transaction).getAmountInput().reduce((s,c)=>s+c,0)}if(this.helperStake.moveCall&&t===0){let i=this.helperStake.getNestedInputParam(2);t=new Wt(i,this.transaction).getAmountInput().reduce((s,c)=>s+c,0)}let n=this.helperStake.typeArg(0),o=this.utils.parseCoinNameFromType(n);return{txType:Et.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:Et.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 Wt(t,this.transaction).getAmountInput().reduce((i,s)=>i+s,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:Et.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 Wt(o,this.transaction).getAmountInput().reduce((i,s)=>i+s,0)}return{txType:Et.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),c=this.utils.parseCoinNameFromType(s);e.push({stakeMarketCoinName:c,stakeAccountId:i})}),this.helperClaimBorrowV2Reward.forEach(o=>{let i=o.decodeSharedObjectId(4),s=o.decodeOwnedObjectId(3),c=this.utils.parseCoinNameFromType(o.typeArg(0));t.push({obligationId:s,obligationKey:i,rewardCoinName:c})}),this.helperClaimBorrowReward.forEach(o=>{let i=o.decodeSharedObjectId(2),s=o.decodeOwnedObjectId(3),c=this.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:s,obligationKey:i,rewardCoinName:c})}),{txType:Et.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:n}}}};import{TransactionType as hs}from"@msafe/sui3-utils";var Ta=class extends me{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 N(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 N(e,this.transaction)}decodeCreateReferralLink(){return{txType:hs.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let e=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),t=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:hs.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:e,coins:t}}}decodeBindReferral(){let e=this.helperBindReferral.decodePureArg(1,"Address");return{txType:hs.Other,type:"BindReferral",intentionData:{veScaKey:e}}}};import{TransactionType as ne}from"@msafe/sui3-utils";import{OLD_BORROW_INCENTIVE_PROTOCOL_ID as dd}from"@scallop-io/sui-scallop-sdk";var Sa=class extends me{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(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`)),t=this.commands.filter(c=>this.filterMoveCallCommands(c,`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca_v2`)),n=this.commands.filter(c=>this.filterMoveCallCommands(c,`${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(p=>p.$kind==="TransferObjects");if(e.length!==1)return!1;let{objects:t}=e[0].TransferObjects,n=t.filter(p=>p.$kind==="Input").map(({Input:p})=>p);if(n.length!==t.length)return!1;let o=new Set(n),i=this.inputs.filter((p,b)=>p.$kind==="Object"&&o.has(b)).map(p=>p.Object.ImmOrOwnedObject),s=`${this.coreId.veScaObjId}::ve_sca::VeScaKey`,c=Sl(i.map(({objectId:p})=>p),50);for(let p=0;p<c.length;p++){let b=c[p];if((await this.scallopClient.scallopSuiKit.queryGetObjects(b,{showType:!0})).some(I=>I.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 N(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 N(e,this.transaction)}get helperExtendStakePeriod(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new N(e,this.transaction)}get helperRedeemSca(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new N(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 N(e,this.transaction)}get helperOldUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${dd}::user::unstake`));return new N(e,this.transaction)}get helperUnstakeObligation(){let e=this.commands.find(t=>this.filterMoveCallCommands(t,`${this.coreId.borrowIncentivePkg}::user::unstake_v2`));return new N(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 N(e,this.transaction)}getMergeSplitVeScaHelper(e){let t=this.commands.find(n=>this.filterMoveCallCommands(n,`${this.coreId.veScaPkgId}::ve_sca::${e}`));return new N(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,c=0;return this.commands.forEach(p=>{this.filterMoveCallCommands(p,e)?(o.push({action:"unstake",helper:new N(p,this.transaction,i)}),i++):this.filterMoveCallCommands(p,t)?(o.push({action:"stake",helper:new N(p,this.transaction,s)}),s++):this.filterMoveCallCommands(p,n)&&(o.push({action:"deactivate",helper:new N(p,this.transaction,c)}),c++)}),o}decodeRedeemSca(){let e=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:ne.Other,type:"RedeemSca",intentionData:{veScaKey:e}}}decodeRenewExpiredVeSca(){let e=this.helperRenewExpired.getNestedInputParam(4),t=this.helperRenewExpired.decodeInputU64(5),n=new Wt(e,this.transaction).getAmountInput().reduce((k,M)=>k+M,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),i=!!this.helperRedeemSca.moveCall,s=[],c=[],p=[];this.helperOldUnstakeObligation.moveCall&&(s=[this.helperOldUnstakeObligation.decodeOwnedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(c=[this.helperUnstakeObligation.decodeOwnedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(p=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let b=!1,S=!1,I,x,D=[{condition:s,isOld:!0},{condition:c,isOld:!1},{condition:p,isOld:!1}];for(let k=0;k<D.length;k++)D[k].condition.length>1&&([x,I]=D[k].condition,b=!0,S=D[k].isOld);return{txType:ne.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,unlockTime:t,obligationId:I,obligationKey:x,veScaKey:o,isHaveRedeem:i,isObligationLocked:b,isOldBorrowIncentive:S}}}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,c=!1,p,b,S=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:i,isOld:!1}];for(let I=0;I<S.length;I++)S[I].condition.length>1&&([b,p]=S[I].condition,s=!0,c=S[I].isOld);return{txType:ne.Other,type:"ExtendStakePeriod",intentionData:{unlockTime:e,obligationId:p,obligationKey:b,veScaKey:t,isObligationLocked:s,isOldBorrowIncentive:c}}}decodePeriodAndStakeMoreSca(){let e=this.helperStakeMoreSca.getNestedInputParam(4),t=this.helperExtendStakePeriod.decodeInputU64(4),n=new Wt(e,this.transaction).getAmountInput().reduce((D,k)=>D+k,0),o=[],i=[],s,c=[];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&&(c=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let p=!1,b=!1,S,I,x=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:c,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([I,S]=x[D].condition,p=!0,b=x[D].isOld);return{txType:ne.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:s,unlockTime:t,obligationId:S,obligationKey:I,isOldBorrowIncentive:b,isObligationLocked:p}}}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 Wt(e,this.transaction).getAmountInput().reduce((D,k)=>D+k,0),o=[],i=[],s,c=[];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&&(c=[this.helperStakeObligationWithVeSca.decodeOwnedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let p=!1,b=!1,S,I,x=[{condition:o,isOld:!0},{condition:i,isOld:!1},{condition:c,isOld:!1}];for(let D=0;D<x.length;D++)x[D].condition.length>1&&([I,S]=x[D].condition,p=!0,b=x[D].isOld);return{txType:ne.Other,type:"StakeSca",intentionData:{amount:n,unlockTime:t,obligationId:S,obligationKey:I,veScaKey:s,isObligationLocked:p,isOldBorrowIncentive:b}}}decodeMergeVesca(){let e=this.getMergeSplitVeScaHelper("merge"),t={targetVeScaKey:e.decodeOwnedObjectId(1),sourceVeScaKey:e.decodeOwnedObjectId(2)};return{txType:ne.Other,type:"MergeVeSca",intentionData:t}}decodeSplitVesca(){let e=this.getMergeSplitVeScaHelper("split"),t={targetVeScaKey:e.decodeOwnedObjectId(1),splitAmount:e.decodeInputU64(4)};return{txType:ne.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:ne.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,c)=>s.$kind==="Object"&&o.has(c)).map(s=>s.Object.ImmOrOwnedObject);return{xType:ne.Other,type:"TransferVeScaKeys",intentionData:{veScaKeys:i}}}};import fd from"sort-keys-recursive";var A=class{constructor(e){this.data=e}data;get application(){return"msafe-core"}serialize(){return JSON.stringify(fd(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 wa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrow({account:t,scallopClient:n}){let{coinName:o,amount:i,obligationId:s,obligationKey:c}=this.data,p=t.address;return(await this.buildTxWithRefreshObligation(n,{walletAddress:p,obligationId:s,obligationKey:c},async(S,I)=>{let x=await I.borrowQuick(+i,o,s,c);I.transferObjects([x],p)})).txBlock}async build(t){return this.borrow(t)}static fromData(t){return new a(t)}};var Ia=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrowWithBoost(t,n){let{obligationId:o,obligationKey:i,veScaKey:s,amount:c,coinName:p}=this.data;return(await this.buildTxWithRefreshObligation(t,{walletAddress:n,obligationId:o,obligationKey:i,veScaKey:s},async(S,I)=>{let x=await I.borrowQuick(+c,p,o,i);I.transferObjects([x],n)})).txBlock}async build(t){return this.borrowWithBoost(t.scallopClient,t.account.address)}static fromData(t){return new a(t)}};var Ca=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async borrowWithReferral({account:t,scallopClient:n}){let o=t.address,{obligationId:i,obligationKey:s,veScaKey:c,coinName:p,amount:b}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:i,obligationKey:s,veScaKey:c},async(I,x)=>{let D=x.claimReferralTicket(p),k=await x.borrowWithReferralQuick(+b,p,D,i,s);x.burnReferralTicket(D,p),x.transferObjects([k],o)})).txBlock}async build(t){return this.borrowWithReferral(t)}static fromData(t){return new a(t)}};import{SUI_TYPE_ARG as hd}from"@mysten/sui/utils";var xa=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),c=Object.values(await e.query.getObligationAccounts(t)??[]),p=(()=>{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 M=e.utils.parseMarketCoinName(k.coinName);return D[M]||(D[M]=0),D[M]+=k.availableClaimCoin,D},{})})(),b={};Object.entries(o).forEach(([x,D])=>{for(let k=0;k<D.length;k++){let M=D[k];if(!p[x])continue;let L=n.claim(M.id,x);b.sui?b.sui.push(L):b.sui=[L]}});let S=(()=>{let x={};return x.sui=Object.values(p).reduce((D,k)=>D+k,0),c.forEach(D=>{Object.values(D.borrowIncentives).forEach(k=>{k&&k.rewards.forEach(M=>{x[M.coinName]||(x[M.coinName]=0),x[M.coinName]?x[M.coinName]+=M.availableClaimCoin:x[M.coinName]=M.availableClaimCoin})})}),x})();if(s.length>0&&c.length>0)for(let x=0;x<c.length;x++){let D=c[x],k=!1,M=s.find(U=>U.id===D.obligationId)?.keyId,L={};if(M){if(Object.values(D.borrowIncentives).forEach(U=>{if(U){let q=U.rewards.filter(Mt=>{let W=Mt.coinName;return Mt.availableClaimCoin>0&&!L[W]});k=q.length>0,q.forEach(Mt=>{let W=n.claimBorrowIncentive(D.obligationId,M,Mt.coinName);L[Mt.coinName]=!0,b[Mt.coinName]?b[Mt.coinName].push(W):b[Mt.coinName]=[W]})}}),S.sui>0){let U=Kt.redeem_rewards(n,M,D.obligationId,hd);b.sui?b.sui.push(U):b.sui=[U]}if(k&&await Tl(e.query,D.obligationId)){n.unstakeObligation(D.obligationId,M);let q=await e.query.getBindedVeScaKey(D.obligationId);q?n.stakeObligationWithVesca(D.obligationId,M,q):n.stakeObligation(D.obligationId,M)}}}let I=(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 I.length>0&&n.transferObjects(I,t),n.txBlock}async build(e){return this.claimIncentiveRewards(e.scallopClient,e.account.address)}static fromData(e={}){return new a(e)}};var Da=class a extends A{constructor(t){super(t);this.data=t}data;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 ka=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async migrateAndClaim({account:t,scallopClient:n}){let o=t.address,{obligationKey:i,obligationId:s,rewardCoinName:c,veScaKey:p}=this.data,b=n.builder.createTxBlock();b.setSender(o);let S=Kt.redeem_rewards(b,i,s,n.utils.parseCoinType(c));return b.transferObjects([S],o),await b.unstakeObligationQuick(s,i),p?await b.stakeObligationWithVeScaQuick(s,i,p):await b.stakeObligationQuick(s,i),b.txBlock}async build(t){return this.migrateAndClaim(t)}static fromData(t){return new a(t)}};var va=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return t.scallopClient.migrateAllMarketCoin(!1,!1)}static fromData(t){return new a(t)}};var Aa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return t.scallopClient.openObligation(!1)}static fromData(t){return new a(t)}};var Ma=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async repay({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:c,obligationKey:p}=this.data;return(await this.buildTxWithRefreshObligation(n,{walletAddress:o,obligationId:c,obligationKey:p},async(S,I)=>{await I.repayQuick(+s,i,c)})).txBlock}async build(t){return this.repay(t)}static fromData(t){return new a(t)}};var Oa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async repayWithBoost({account:t,scallopClient:n}){let o=t.address,{coinName:i,amount:s,obligationId:c,veScaKey:p}=this.data,b=n.builder.createTxBlock();b.setSender(o);let S=n.constants.whitelist.borrowing.has(i);return S&&await b.unstakeObligationQuick(c,void 0),await b.repayQuick(+s,i,c),S&&await b.stakeObligationWithVeScaQuick(c,void 0,p),b.txBlock}async build(t){return this.repayWithBoost(t)}static fromData(t){return new a(t)}};var Pa=class a extends A{constructor(t){super(t);this.data=t}data;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 Ra=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){return t.scallopClient.unstake(this.data.marketCoinName,+this.data.amount,!1)}static fromData(t){return new a(t)}};var Ba=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async unstakeAndWithdraw(t,n,o){let i=t.builder.createTxBlock();i.setSender(o);let{stakeAccountId:s,amount:c,coinName:p}=this.data,b=[];for(let S=0;S<s.length;S++){let{id:I,coin:x}=s[S],D=t.utils.parseMarketCoinName(p),[k]=await i.unstakeQuick(x,D,I,!1);if(k){let M=i.withdraw(k,p);b.push(M)}}if(c>0){let S=await i.withdrawQuick(c,p);b.push(S)}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 Ea=class a extends A{constructor(t){super(t);this.data=t}data;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 Na=class a extends A{constructor(t){super(t);this.data=t}data;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}data;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 _a=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async claimRevenueReferral({account:t,scallopClient:n}){let{veScaKey:o,coins:i}=this.data,s=t.address,c=n.builder.createTxBlock();c.setSender(s);let p=i.map(b=>n.utils.parseCoinNameFromType(b));return await c.claimReferralRevenueQuick(o,p),c.txBlock}async build(t){return this.claimRevenueReferral(t)}static fromData(t){return new a(t)}};var La=class a extends A{constructor(t){super(t);this.data=t}data;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 gd}from"@scallop-io/sui-scallop-sdk";var ja=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async extendPeriodAndStakeMoreSca({account:t,scallopClient:n}){let{amount:o,veScaKey:i,unlockTime:s,obligationId:c,obligationKey:p,isOldBorrowIncentive:b,isObligationLocked:S}=this.data,I=t.address,x=n.builder.createTxBlock();x.setSender(I);let D=await n.utils.selectCoins(o,gd,I),[k,M]=x.takeAmountFromCoins(D,o);return x.extendLockPeriod(i,s),x.extendLockAmount(i,k),x.transferObjects([M],I),!c||!p||(S&&(b?Kt.unstakeObligation(x,c,p):x.unstakeObligation(c,p)),x.stakeObligationWithVesca(c,p,i)),x.txBlock}async build(t){return this.extendPeriodAndStakeMoreSca(t)}static fromData(t){return new a(t)}};var Ua=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async extendStakeScaLockPeriod({account:t,scallopClient:n}){let o=t.address,{veScaKey:i,unlockTime:s,obligationId:c,obligationKey:p,isObligationLocked:b,isOldBorrowIncentive:S}=this.data,I=n.builder.createTxBlock();return I.setSender(o),I.extendLockPeriod(i,s),c&&p&&(b&&(S?Kt.unstakeObligation(I,p,c):I.unstakeObligation(c,p)),I.stakeObligationWithVesca(c,p,i)),I.txBlock}async build(t){return this.extendStakeScaLockPeriod(t)}static fromData(t){return new a(t)}};var qa=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,sourceVeScaKey:s}=this.data,[c,p]=await Promise.all([n.getBindedObligationId(i),n.getBindedObligationId(s)]);c&&await t.unstakeObligationQuick(c),p&&await t.unstakeObligationQuick(p),o(t,i,s),c&&await t.stakeObligationWithVeScaQuick(c,void 0,i),p&&await t.stakeObligationWithVeScaQuick(p,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,c,p)=>{s.mergeVeSca(i.object(c),i.object(p))}),i.txBlock}static fromData(t){return new a(t)}};var Fa=class a extends A{constructor(t){super(t);this.data=t}data;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 yd}from"@scallop-io/sui-scallop-sdk";var Ka=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async renewExpiredStakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,unlockTime:s,veScaKey:c,isHaveRedeem:p,obligation:b,obligationKey:S,isObligationLocked:I,isOldBorrowIncentive:x}=this.data,D=n.builder.createTxBlock();if(D.setSender(o),p){let U=D.redeemSca(c);D.transferObjects([U],o)}let k=await n.builder.utils.selectCoins(i,yd,o),[M,L]=D.takeAmountFromCoins(k,i);return D.transferObjects([L],o),D.renewExpiredVeSca(c,M,s),!b||!S||(I&&(x?Kt.unstakeObligation(D,S,b):D.unstakeObligation(b,S)),D.stakeObligationWithVesca(b,S,c)),D.txBlock}async build(t){return this.renewExpiredStakeSca(t)}static fromData(t){return new a(t)}};var Va=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async handleUnsubForKeys(t,n,o){let{targetVeScaKey:i,splitAmount:s}=this.data,c=await n.getBindedObligationId(i);c&&await t.unstakeObligationQuick(c),o(t,i,s.toString()),c&&await t.stakeObligationWithVeScaQuick(c,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,c,p)=>{let b=s.splitVeSca(c,p.toString());s.transferObjects([b],o)}),i.txBlock}static fromData(t){return new a(t)}};import{SCA_COIN_TYPE as bd}from"@scallop-io/sui-scallop-sdk";var $a=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async stakeSca({account:t,scallopClient:n}){let o=t.address,{amount:i,isObligationLocked:s,isOldBorrowIncentive:c,obligationId:p,obligationKey:b,unlockTime:S,veScaKey:I}=this.data,x=n.builder.createTxBlock();x.setSender(o);let D=await n.utils.selectCoins(i,bd,o),[k,M]=x.takeAmountFromCoins(D,i),L;return I?x.extendLockAmount(I,k):L=x.lockSca(k,S),p&&b&&(s&&(c?Kt.unstakeObligation(x,b,p):x.unstakeObligation(p,b)),x.stakeObligationWithVesca(p,b,I||L)),I||x.transferObjects([L,M],o),x.txBlock}async build(t){return this.stakeSca(t)}static fromData(t){return new a(t)}};var Ha=class a extends A{constructor(t){super(t);this.data=t}data;txType;txSubType;async supplyAndStake({account:t,scallopClient:n}){let o=t.address,{amount:i,coinName:s,stakeAccountId:c}=this.data,p=n.builder.createTxBlock();p.setSender(o);let b=await p.depositQuick(+i,s),S=n.utils.parseMarketCoinName(s);if(n.constants.whitelist.spool.has(S))return p.txBlock;let I=await n.query.getStakeAccounts(S,o),x=c||(I.length>0?I[0].id:void 0);if(x)await p.stakeQuick(b,S,x);else{let D=p.createStakeAccount(S);await p.stakeQuick(b,S,D),p.transferObjects([D],o)}return p.txBlock}async build(t){return this.supplyAndStake(t)}static fromData(t){return new a(t)}};var Ga=class a extends A{constructor(t){super(t);this.data=t}data;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(c=>this.handleAction(i,c)),i.txBlock}static fromData(t){return new a(t)}};var Xa=class a extends A{constructor(t){super(t);this.data=t}data;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(c=>i.objectRef(c)),i.pure.address(o)),i.txBlock}static fromData(t){return new a(t)}};var za=class a extends A{constructor(t){super(t);this.data=t}data;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 Qa=class{application="scallop";supportSDK="@mysten/sui";scallopClient;async initScallopClient(e,t){if(!this.scallopClient){let n=new Sd({addressId:"695fcdc084f790c04eb068dc",walletAddress:e,suiClients:[t],fullnodeUrls:[t.transport.rpcClient.requestManager.transports[0]?.uri??ge("mainnet")]});this.scallopClient=await n.createScallopClient()}}async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;await this.initScallopClient(o.address,n);let i=new ba(t,this.scallopClient),s=new Ta(t,this.scallopClient),c=new Sa(t,this.scallopClient),p=i.decode()||s.decode()||await c.decode();if(!p)throw new Error("Unknown transaction type");return{txType:Td.Other,txSubType:p.type,intentionData:p.intentionData}}async build(e){let{suiClient:t,account:n,network:o,txSubType:i,intentionData:s}=e;await this.initScallopClient(n.address,t);let c;switch(i){case"SupplyLending":c=Pa.fromData(s);break;case"WithdrawLending":c=Na.fromData(s);break;case"Borrow":c=wa.fromData(s);break;case"Repay":c=Ma.fromData(s);break;case"DepositCollateral":c=Da.fromData(s);break;case"WithdrawCollateral":c=Ea.fromData(s);break;case"OpenObligation":c=Aa.fromData(s);break;case"UnstakeSpool":c=Ra.fromData(s);break;case"ClaimIncentiveReward":c=xa.fromData(s);break;case"BorrowWithBoost":c=Ia.fromData(s);break;case"StakeSca":c=$a.fromData(s);break;case"ExtendStakePeriod":c=Ua.fromData(s);break;case"ExtendPeriodAndStakeMore":c=ja.fromData(s);break;case"RenewExpStakePeriod":c=Ka.fromData(s);break;case"WithdrawStakedSca":c=za.fromData(s);break;case"SupplyAndStakeLending":c=Ha.fromData(s);break;case"WithdrawAndUnstakeLending":c=Ba.fromData(s);break;case"RedeemSca":c=Fa.fromData(s);break;case"MigrateAndClaim":c=ka.fromData(s);break;case"BorrowWithReferral":c=Ca.fromData(s);break;case"CreateReferralLink":c=La.fromData(s);break;case"ClaimRevenueReferral":c=_a.fromData(s);break;case"BindReferral":c=Wa.fromData(s);break;case"MigrateScoin":c=va.fromData(s);break;case"RepayWithBoost":c=Oa.fromData(s);break;case"MergeVeSca":c=qa.fromData(s);break;case"SplitVeSca":c=Va.fromData(s);break;case"VeScaObligationBindings":{c=Ga.fromData(s);break}case"TransferVeScaKeys":{c=Xa.fromData(s);break}default:throw new Error("not implemented")}return c.build({suiClient:t,account:n,network:o,scallopClient:this.scallopClient})}};import{TransactionType as Zd}from"@msafe/sui3-utils";import{TransactionType as yn}from"@msafe/sui3-utils";import{normalizeStructTag as Se}from"@mysten/sui/utils";import{API_URL as Wd}from"@suilend/sui-fe";import{TransactionType as Bd}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as Ed,LENDING_MARKET_TYPE as Nd,SuilendClient as gs}from"@suilend/sdk";import{TransactionType as Ue}from"@msafe/sui3-utils";import{fromBase64 as Il,toHex as Cl}from"@mysten/bcs";import{normalizeStructTag as hn}from"@mysten/sui/utils";import{MAX_U64 as qe}from"@suilend/sui-fe";import xl from"bignumber.js";var Ja=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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=hn(e.MintEvent.parsedJson.coin_type.name),n=e.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",t,n),{txType:Ue.Other,type:"deposit",intentionData:{coinType:t,value:n}}}decodeWithdraw(){let e={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},t={RedeemEvent:this.simResult.events.find(p=>p.type.includes("lending_market::RedeemEvent"))},n=hn(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 xl(Cl(Il(this.inputs[i].Pure.bytes)),16).toString(),c=s===qe.toString();return console.log("decodeWithdraw - isMax:",c,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",qe.toString()),c&&(o=qe.toString()),{txType:Ue.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let e={borrow_request:this.getMoveCallCommand("borrow_request")},t={BorrowEvent:this.simResult.events.find(p=>p.type.includes("lending_market::BorrowEvent"))},n=hn(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 xl(Cl(Il(this.inputs[i].Pure.bytes)),16).toString(),c=s===qe.toString();return console.log("decodeBorrow - isMax:",c,"inputIndex:",i,"inputValue:",s,"MAX_U64.toString():",qe.toString()),c&&(o=qe.toString()),{txType:Ue.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let e={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},t=hn(e.RepayEvent.parsedJson.coin_type.name),n=e.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",t,n),{txType:Ue.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=hn(o.parsedJson.coin_type.name),s=o.parsedJson.liquidity_amount;t[i]=`${+(t[i]??"0")+ +s}`}return console.log("Decoder.decodeClaimRewards",t),{txType:Ue.Other,type:"claim",intentionData:{value:t}}}decodeClaimAndDeposit(){return{txType:Ue.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as Cd}from"@mysten/sui/transactions";import Id from"sort-keys-recursive";var _t=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Id(this.data))}};var Ya=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("BorrowIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Cd;return await i.borrowAndSendToUser(o.address,s.id,c.id,this.data.coinType,this.data.value,p),p}static fromData(t){return console.log("BorrowIntention.fromData",t),new a(t)}};import{Transaction as Ad}from"@mysten/sui/transactions";import{normalizeStructTag as xd}from"@mysten/sui/utils";import{Side as gn}from"@suilend/sdk";import{isSendPoints as Dd}from"@suilend/sui-fe";import kd from"bignumber.js";var vd=(a,e)=>{let t={[gn.DEPOSIT]:[],[gn.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[gn.DEPOSIT,gn.BORROW].forEach(o=>{let i=o===gn.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,s=e.userRewardManagers.find(c=>c.poolRewardManagerId===i.id);s&&(t[o]=i.poolRewards.map((c,p)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(p),rewardCoinType:xd(c.coinType.name),side:o})).filter(c=>!Dd(c.rewardCoinType)&&!!s.rewards[Number(c.rewardIndex)]&&new kd(s.rewards[Number(c.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(t).flat()},Za=vd;var ti=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("ClaimIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Ad;return i.claimRewardsAndSendToUser(o.address,s.id,Za(i,c),p),p}static fromData(t){return console.log("ClaimIntention.fromData",t),new a(t)}};import{Transaction as Md}from"@mysten/sui/transactions";var ei=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("ClaimAndDepositIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Md;return i.claimRewardsAndDeposit(o.address,s.id,Za(i,c),p),p}static fromData(t){return console.log("ClaimAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Od}from"@mysten/sui/transactions";var ni=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;console.log("DepositIntention.build",n,o,i,s,c);let p=new Od;return await i.depositIntoObligation(o.address,this.data.coinType,this.data.value,p,s?.id),p}static fromData(t){return console.log("DepositIntention.fromData",t),new a(t)}};import{Transaction as Pd}from"@mysten/sui/transactions";var oi=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("RepayIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Pd;return await i.repayIntoObligation(o.address,c.id,this.data.coinType,this.data.value,p),p}static fromData(t){return console.log("RepayIntention.fromData",t),new a(t)}};import{Transaction as Rd}from"@mysten/sui/transactions";var ai=class a extends _t{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,obligationOwnerCap:s,obligation:c}=t;if(console.log("WithdrawIntention.build",n,o,i,s,c),!s||!c)throw new Error("Obligation not found");let p=new Rd;return await i.withdrawAndSendToUser(o.address,s.id,c.id,this.data.coinType,this.data.value,p),p}static fromData(t){return console.log("WithdrawIntention.fromData",t),new a(t)}};var ii=async(a,e)=>{let t=await gs.initialize(Ed,Nd,a),n=await gs.getObligationOwnerCaps(e.address,t.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(i=>gs.getObligation(i.obligationId,t.lendingMarket.$typeArgs,a)));return console.log("XXX getUtils - suilendClient:",t,"obligations:",o,"obligationOwnerCaps:",n),{suilendClient:t,obligationOwnerCaps:n,obligations:o}},ri=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await ii(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SuilendAppHelper.deserialize - simResult:",i,"utils:",this.utils,"suiClient:",n);let c=new Ja(t,i).decode();return{txType:Bd.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await ii(i,s));let c;switch(n){case"deposit":c=ni.fromData(o);break;case"withdraw":c=ai.fromData(o);break;case"borrow":c=Ya.fromData(o);break;case"repay":c=oi.fromData(o);break;case"claim":c=ti.fromData(o);break;case"claimAndDeposit":c=ei.fromData(o);break;default:throw new Error("not implemented")}let p=window.localStorage.getItem("obligationId"),b=this.utils.obligations?.find(I=>I.id===p)??this.utils.obligations?.[0],S=this.utils.obligationOwnerCaps?.find(I=>I.obligationId===b?.id);return c.build({network:t,suiClient:i,account:s,suilendClient:this.utils.suilendClient,obligationOwnerCap:S,obligation:b})}};var ys=async(a,e)=>{let t=await ii(a,e),n=await fetch(`${Wd}/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(c=>[c.LIQUID_STAKING_INFO.type,c.LIQUID_STAKING_INFO]));return{...t,LIQUID_STAKING_INFO_MAP:s}};var si=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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=Se(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStake",n),{txType:yn.Other,type:"stake",intentionData:{amount:n,outCoinType:t}}}decodeStakeAndDeposit(){let e={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},t=Se(e.MintEvent.parsedJson.event.typename.name),n=e.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStakeAndDeposit",n),{txType:yn.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=Se(e.RedeemEvent.parsedJson.event.typename.name),n=Se(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvert",o),{txType:yn.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=Se(e.RedeemEvent.parsedJson.event.typename.name),n=Se(e.MintEvent.parsedJson.event.typename.name),o=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvertAndDeposit",o),{txType:yn.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=Se(e.RedeemEvent.parsedJson.event.typename.name),n=e.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeUnstake",n),{txType:yn.Other,type:"unstake",intentionData:{amount:n,inCoinType:t}}}};import{Transaction as jd}from"@mysten/sui/transactions";import{LstClient as Dl,convertLstsAndRebalanceAndSendToUser as Ud}from"@suilend/springsui-sdk";import Ld from"sort-keys-recursive";var Vt=class{constructor(e){this.data=e}data;serialize(){return JSON.stringify(Ld(this.data))}};var ci=class a extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("ConvertIntention.build",n,o,i,s,c,p);let b=await Dl.initialize(n,Object.values(s).find(x=>x.type===this.data.inCoinType)),S=await Dl.initialize(n,Object.values(s).find(x=>x.type===this.data.outCoinType)),I=new jd;return Ud(b,S,I,o.address,this.data.amount),I}static fromData(t){return console.log("ConvertIntention.fromData",t),new a(t)}};import{Transaction as qd}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Fd,sendObligationToUser as Kd}from"@suilend/sdk";import{LstClient as kl,convertLstsAndRebalance as Vd}from"@suilend/springsui-sdk";var li=class a extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("ConvertAndDepositIntention.build",n,o,i,s,c,p);let b=await kl.initialize(n,Object.values(s).find(M=>M.type===this.data.inCoinType)),S=await kl.initialize(n,Object.values(s).find(M=>M.type===this.data.outCoinType)),I=new qd,{obligationOwnerCapId:x,didCreate:D}=Fd(i,I,c),k=Vd(b,S,I,o.address,this.data.amount);return i.deposit(k,this.data.outCoinType,x,I),D&&Kd(x,o.address,I),I}static fromData(t){return console.log("ConvertAndDepositIntention.fromData",t),new a(t)}};import{Transaction as $d}from"@mysten/sui/transactions";import{LstClient as Hd}from"@suilend/springsui-sdk";var ui=class a extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("StakeIntention.build",n,o,i,s,c,p);let b=await Hd.initialize(n,Object.values(s).find(I=>I.type===this.data.outCoinType)),S=new $d;return b.mintAmountAndRebalanceAndSendToUser(S,o.address,this.data.amount),S}static fromData(t){return console.log("StakeIntention.fromData",t),new a(t)}};import{Transaction as Gd}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Xd,sendObligationToUser as zd}from"@suilend/sdk";import{LstClient as Qd}from"@suilend/springsui-sdk";var mi=class a extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("StakeAndDepositIntention.build",n,o,i,s,c,p);let b=await Qd.initialize(n,Object.values(s).find(k=>k.type===this.data.outCoinType)),S=new Gd,{obligationOwnerCapId:I,didCreate:x}=Xd(i,S,c),D=b.mintAmountAndRebalance(S,o.address,this.data.amount);return i.deposit(D,this.data.outCoinType,I,S),x&&zd(I,o.address,S),S}static fromData(t){return console.log("StakeAndDepositIntention.fromData",t),new a(t)}};import{Transaction as Jd}from"@mysten/sui/transactions";import{LstClient as Yd}from"@suilend/springsui-sdk";var pi=class a extends Vt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{suiClient:n,account:o,suilendClient:i,LIQUID_STAKING_INFO_MAP:s,obligationOwnerCap:c,obligation:p}=t;console.log("UnstakeIntention.build",n,o,i,s,c,p);let b=await Yd.initialize(n,Object.values(s).find(I=>I.type===this.data.inCoinType)),S=new Jd;return b.redeemAmountAndRebalanceAndSendToUser(S,o.address,this.data.amount),S}static fromData(t){return console.log("UnstakeIntention.fromData",t),new a(t)}};var di=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(e){let{transaction:t,suiClient:n,account:o}=e;this.utils||(this.utils=await ys(n,o));let i=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:t});console.log("SpringSuiAppHelper.deserialize",i);let c=new si(t,i).decode();return{txType:Zd.Other,txSubType:c.type,intentionData:c.intentionData}}async build(e){let{network:t,txSubType:n,intentionData:o,suiClient:i,account:s}=e;this.utils||(this.utils=await ys(i,s));let c;switch(n){case"stake":c=ui.fromData(o);break;case"stakeAndDeposit":c=mi.fromData(o);break;case"convert":c=ci.fromData(o);break;case"convertAndDeposit":c=li.fromData(o);break;case"unstake":c=pi.fromData(o);break;default:throw new Error("not implemented")}return c.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 of}from"@msafe/sui3-utils";import{TransactionType as vl}from"@msafe/sui3-utils";var fi=class{constructor(e,t){this.transaction=e;this.simResult=t}transaction;simResult;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:vl.Other,type:"mint",intentionData:{amount:t}}}decodeRedeem(e){let{event:{lst_amount_in:t}}=e;return console.log("Decoder.decodeRedeem",t),{txType:vl.Other,type:"redeem",intentionData:{amount:t}}}};import{LST as ef}from"@alphafi/stsui-sdk";var hi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},c=await new ef(i).mint(o,n.address);return c.setGasBudget(1e8),c}static fromData(t){return console.log("MintIntention.fromData",t),new a(t)}};import{LST as nf}from"@alphafi/stsui-sdk";var gi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{account:n}=t,{amount:o}=this.data,i={lstInfo:"0x1adb343ab351458e151bc392fbf1558b3332467f23bda45ae67cd355a57fd5f5",lstCointype:"0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI"},c=await new nf(i).redeem(o,n.address);return c.setGasBudget(1e8),c}static fromData(t){return console.log("RedeemIntention.fromData",t),new a(t)}};var yi=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 fi(t,o).decode();return{txType:of.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=hi.fromData(e.intentionData);break;case"redeem":n=gi.fromData(e.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:t})}};import{TransactionType as kf}from"@msafe/sui3-utils";import{TurbosSdk as vf}from"turbos-clmm-sdk";import{TransactionType as Lt}from"@msafe/sui3-utils";import{fromBase64 as Fe}from"@mysten/bcs";import{bcs as Ke}from"@mysten/sui/bcs";import{BN as rf}from"turbos-clmm-sdk";var $t={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},Ht={PackageId:"0xdee9"};var sf=(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}`)}},bi=class{constructor(e,t,n){this.txb=e;this.turbosSdk=t;this.config=n}txb;turbosSdk;config;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(`${$t.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${$t.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(`${Ht.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${Ht.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=sf(t,n,this.swap1Layer,this.swap2Layer),i=o.map((D,k)=>{let M=this.helper.decodeSharedObjectId(this.helper.getInputsIndex(k)),L=this.helper.decodeInputU128(this.helper.getInputsIndex(4+k+t)),U=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new rf(L.toString()));return{pool:M,a2b:D,nextTickIndex:U}}),s=o[0]||t===1?e.MoveCall.typeArguments[0]:e.MoveCall.typeArguments[1],c=t===1?e.MoveCall.typeArguments[4]:o[0]?e.MoveCall.typeArguments[1]:e.MoveCall.typeArguments[0],p=this.helper.decodeInputAddress(this.helper.getInputsIndex(6+2*t)),b=this.helper.decodeInputU64(this.helper.getInputsIndex(7+2*t)),S=this.helper.decodeInputBool(this.helper.getInputsIndex(5+2*t)),I=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:c,address:p,amountA:S?I:x,amountB:S?x:I,amountSpecifiedIsInput:S,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)),c=this.helper.decodeInputU32(this.helper.getInputsIndex(6)),p=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:p?-c:c,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)),c=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:c}}}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),c=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:c}}}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 c=s.decodeInputU64(s.getInputsIndex(4)),p=s.decodeInputU64(s.getInputsIndex(5));o[c]=p});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)),c=this.decreaseLiquidityHelper.decodeInputU64(this.decreaseLiquidityHelper.getInputsIndex(5)),p=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 S=this.collectFeeHelper.decodeInputU64(this.collectFeeHelper.getInputsIndex(3))||0,I=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:(c/(100-t)*100).toFixed(0),slippage:t,address:e,collectAmountA:S,collectAmountB:I,rewardAmounts:b,deadline:p}}}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),c=this.decreaseLiquidityHelper.decodeInputU64(6),p=this.collectRewardHelper.map(I=>I.decodeInputU64(5)),b=this.collectFeeHelper.decodeInputU64(3)||0,S=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:S,rewardAmounts:p,deadline:c}}}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 pe(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 pe(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 pe(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 pe(e,this.txb)}get swapExactBaseForQuoteHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Ht.PackageId}::clob_v2::swap_exact_base_for_quote`:!1);return new pe(e,this.txb)}get swapExactQuoteForBaseHelper(){let e=this.transactions.find(t=>t.$kind==="MoveCall"?`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`===`${Ht.PackageId}::clob_v2::swap_exact_quote_for_base`:!1);return new pe(e,this.txb)}},pe=class{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;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(Ke.u128().parse(Uint8Array.from(Fe(this.inputs[e].Pure.bytes))))}decodeInputU64(e){return Number(Ke.u64().parse(Uint8Array.from(Fe(this.inputs[e].Pure.bytes))))}decodeInputU32(e){return Number(Ke.u32().parse(Uint8Array.from(Fe(this.inputs[e].Pure.bytes))))}decodeInputU8(e){return Number(Ke.u8().parse(Uint8Array.from(Fe(this.inputs[e].Pure.bytes))))}decodeInputAddress(e){return Ke.Address.parse(Uint8Array.from(Fe(this.inputs[e].Pure.bytes)))}decodeInputBool(e){return Ke.bool().parse(Uint8Array.from(Fe(this.inputs[e].Pure.bytes)))}shortTypeArg(e){return this.moveCall.MoveCall.typeArguments[e]}txArg(e){return this.moveCall.MoveCall.arguments[e]}};import{TurbosSdk as cf}from"turbos-clmm-sdk";var Ti=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new cf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,tickLower:b,tickUpper:S,deadline:I,txb:x}=this.data;return n.pool.addLiquidity({pool:o,slippage:p,address:i,amountA:s,amountB:c,tickLower:b,tickUpper:S,deadline:I,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as lf}from"turbos-clmm-sdk";var Si=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new lf(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 uf}from"turbos-clmm-sdk";var wi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new uf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,collectAmountA:c,collectAmountB:p,deadline:b,txb:S}=this.data;return n.pool.collectFee({pool:o,address:i,collectAmountA:c,collectAmountB:p,nft:s,deadline:b,txb:S})}static fromData(t){return new a(t)}};import{TurbosSdk as mf}from"turbos-clmm-sdk";var Ii=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new mf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,nft:s,rewardAmounts:c,deadline:p,txb:b}=this.data;return n.pool.collectReward({pool:o,address:i,rewardAmounts:c,nft:s,deadline:p,txb:b})}static fromData(t){return new a(t)}};import{TurbosSdk as pf}from"turbos-clmm-sdk";var Ci=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new pf(t.network.replace("sui:",""),t.suiClient),{fee:o,address:i,tickLower:s,tickUpper:c,sqrtPrice:p,slippage:b,coinTypeA:S,coinTypeB:I,amountA:x,amountB:D,deadline:k,txb:M}=this.data;return n.pool.createPool({fee:o,amountA:x,amountB:D,address:i,tickLower:s,tickUpper:c,sqrtPrice:p,slippage:b,coinTypeA:S,coinTypeB:I,deadline:k,txb:M})}static fromData(t){return new a(t)}};import{TurbosSdk as df}from"turbos-clmm-sdk";var xi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new df(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,nft:b,decreaseLiquidity:S,deadline:I,txb:x}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:p,address:i,amountA:s,amountB:c,nft:b,decreaseLiquidity:S,deadline:I,txb:x})}static fromData(t){return new a(t)}};import{TurbosSdk as ff}from"turbos-clmm-sdk";var Di=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new ff(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,nft:b,decreaseLiquidity:S,deadline:I}=this.data,{txb:x,coinA:D,coinB:k}=await n.pool.decreaseLiquidityWithReturn({pool:o,slippage:p,address:i,amountA:s,amountB:c,nft:b,decreaseLiquidity:S,deadline:I});return x.transferObjects([D,k],this.data.address),x}static fromData(t){return new a(t)}};import{TurbosSdk as hf}from"turbos-clmm-sdk";var ki=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new hf(t.network.replace("sui:",""),t.suiClient),{pool:o,address:i,amountA:s,amountB:c,slippage:p,nft:b,deadline:S,txb:I}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:p,address:i,amountA:s,amountB:c,nft:b,deadline:S,txb:I})}static fromData(t){return new a(t)}};import{Transaction as gf}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as yf}from"@mysten/sui/utils";var vi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new gf;return n.moveCall({target:`${$t.PackageId}::claim::claim`,typeArguments:[$t.turbosCoinType],arguments:[n.object($t.Claim),n.object(yf)]}),n}static fromData(t){return new a(t)}};import{Transaction as bf}from"@mysten/sui/transactions";var Ai=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new bf;return n.moveCall({target:`${$t.PackageId}::claim::join`,typeArguments:[$t.turbosCoinType],arguments:[n.object($t.Claim)]}),n}static fromData(t){return new a(t)}};import{Transaction as Tf}from"@mysten/sui/transactions";import{TurbosSdk as Sf}from"turbos-clmm-sdk";var Mi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Sf(t.network.replace("sui:",""),t.suiClient),o=new Tf;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 wf}from"turbos-clmm-sdk";var Oi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new wf(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 If}from"turbos-clmm-sdk";var Pi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(this.data,"this.data");let n=new If(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:i,coinTypeB:s,address:c,amountA:p,amountB:b,slippage:S,amountSpecifiedIsInput:I,deadline:x,txb:D}=this.data;return n.trade.swap({routes:o,coinTypeA:i,coinTypeB:s,address:c,amountA:p,amountB:b,amountSpecifiedIsInput:I,slippage:S,deadline:x,txb:D})}static fromData(t){return new a(t)}};import{TurbosSdk as xf}from"turbos-clmm-sdk";import{Transaction as Al}from"@mysten/sui/transactions";import{normalizeSuiObjectId as Ml}from"@mysten/sui/utils";import{unstable_getObjectId as Cf}from"turbos-clmm-sdk";var bn=class{constructor(e){this.turbosSdk=e}turbosSdk;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=[],c=0;return o.sort((p,b)=>Number(b.balance)-Number(p.balance)).some(p=>c>=n?!0:(c+=Number(p.balance),s.push(p),!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:`${Ht.PackageId}::custodian_v2::AccountCap`}});return t.data[0]?.data?Cf(t.data[0].data):void 0}createAccount(e){let[t]=e.moveCall({typeArguments:[],target:`${Ht.PackageId}::clob_v2::create_account`,arguments:[]});return t}zero(e,t){return t.moveCall({typeArguments:[e],target:"0x2::coin::zero",arguments:[]})}};var Ol=89,Pl=1e6,Rl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,c=new Al,p=new bn(s),b=await p.getCoinsData(i,t,o),[S,I]=p.splitAndMergeCoin(b,o,c);if(!S)throw new Error(`Not enough balance: ${t}`);let x=await p.IsAccountCap(i),D=x?c.object(x):p.createAccount(c),[k,M,L]=c.moveCall({typeArguments:[e,t],target:`${Ht.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[c.object(String(n)),c.pure.u64(Ol),D,c.pure.u64(o),c.object(Ml("0x6")),S]});return I&&c.transferObjects([I],c.pure.address(i)),c.transferObjects([k],c.pure.address(i)),c.transferObjects([M],c.pure.address(i)),x||c.transferObjects([D],c.pure.address(i)),c.setSenderIfNotSet(i),c.setGasBudget(Pl),c},Bl=async a=>{let{token1:e,token2:t,poolId:n,amountIn:o,currentAddress:i,turbosSdk:s}=a,c=new Al,p=new bn(s),b=await p.getCoinsData(i,e,o),[S,I]=p.splitAndMergeCoin(b,o,c);if(!S)throw new Error(`Not enough balance: ${e}`);let x=await p.IsAccountCap(i),D=x?c.object(x):p.createAccount(c),k=p.zero(t,c),[M,L,U]=c.moveCall({typeArguments:[e,t],target:`${Ht.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[c.object(String(n)),c.pure.u64(Ol),D,c.pure.u64(o),S,k,c.object(Ml("0x6"))]});return I&&c.transferObjects([I],c.pure.address(i)),c.transferObjects([M],c.pure.address(i)),c.transferObjects([L],c.pure.address(i)),x||c.transferObjects([D],c.pure.address(i)),c.setSenderIfNotSet(i),c.setGasBudget(Pl),c};var Ri=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new xf(t.network.replace("sui:",""),t.suiClient);return await Bl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};import{TurbosSdk as Df}from"turbos-clmm-sdk";var Bi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Df(t.network.replace("sui:",""),t.suiClient);return await Rl({...this.data,turbosSdk:n,currentAddress:t.account.address})}static fromData(t){return new a(t)}};var Ei=class{application="turbos";supportSDK="@mysten/sui";async deserialize(e){console.log(e,"input");let t=new vf(e.network.replace("sui:","")),n=await t.contract.getConfig(),{transaction:o,account:i}=e,c=await new bi(o,t,n).decode(i.address);return{txType:kf.Other,txSubType:c.type,intentionData:c.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=Ci.fromData(e.intentionData);break;case"AddLiquidity":i=Ti.fromData(e.intentionData);break;case"IncreaseLiquidity":i=ki.fromData(e.intentionData);break;case"DecreaseLiquidity":i=xi.fromData(e.intentionData);break;case"DecreaseLiquidityWithReturn":i=Di.fromData(e.intentionData);break;case"RemoveLiquidity":i=Mi.fromData(e.intentionData);break;case"removeLiquidityWithReturn":i=Oi.fromData(e.intentionData);break;case"CollectFee":i=wi.fromData(e.intentionData);break;case"CollectReward":i=Ii.fromData(e.intentionData);break;case"Burn":i=Si.fromData(e.intentionData);break;case"Swap":i=Pi.fromData(e.intentionData);break;case"PrixJoin":i=Ai.fromData(e.intentionData);break;case"PrixClaim":i=vi.fromData(e.intentionData);break;case"SwapExactBaseForQuote":i=Ri.fromData(e.intentionData);break;case"SwapExactQuoteForBase":i=Bi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Ef}from"@msafe/sui3-utils";import{TransactionType as bs}from"@msafe/sui3-utils";import{bcs as El}from"@mysten/sui.js/bcs";import{normalizeStructTag as Of,normalizeSuiAddress as Tn}from"@mysten/sui.js/utils";var Af={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},At=Af;var Ni=class{constructor(e){this.txb=e}txb;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(`${At.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${At.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${At.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:bs.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:bs.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:bs.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(At.packageId));return new Ts(e,this.txb)}},Ts=class a{constructor(e,t){this.moveCall=e;this.txb=t}moveCall;txb;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 Tn(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 El.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 Tn(e.value.Object.ImmOrOwned.objectId)}return Tn(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Tn(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Tn(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 El.de(t,new Uint8Array(n))}typeArg(e){return Of(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as Pf}from"@mysten/sui.js/transactions";var Wi=class a extends Xt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(t);let n=new Pf,{ticketId:o}=this.data;return n.moveCall({target:`${At.packageId}::native_pool::burn_ticket`,arguments:[n.object(At.poolObjectId),n.object(At.systemStateObjectId),n.object(o)]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Rf}from"@mysten/sui.js/transactions";var _i=class a extends Xt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(t);let n=new Rf,{amount:o}=this.data,[i]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${At.packageId}::native_pool::stake`,arguments:[n.object(At.poolObjectId),n.object(At.metadataObjectId),n.object(At.systemStateObjectId),i]}),n}static fromData(t){return new a(t)}};import{TransactionBlock as Bf}from"@mysten/sui.js/transactions";var Li=class a extends Xt{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){console.log(t);let n=new Bf,{amount:o}=this.data,i=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[s,...c]=i.filter(S=>S.coinType.split("::")[0]===At.certType.split("::")[0]),p=n.object(s.coinObjectId);c.length&&n.mergeCoins(p,c.map(S=>n.object(S.coinObjectId)));let b=n.splitCoins(n.object(s.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${At.packageId}::native_pool::unstake`,arguments:[n.object(At.poolObjectId),n.object(At.metadataObjectId),n.object(At.systemStateObjectId),b]}),n}static fromData(t){return new a(t)}};var ji=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(e){let{transactionBlock:t}=e,o=new Ni(t).decode();return{txType:Ef.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:n}=e,o;switch(e.txSubType){case"Stake":o=_i.fromData(e.intentionData);break;case"UnStake":o=Li.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 zf}from"@msafe/sui3-utils";import{asIntN as Nl}from"@cetusprotocol/common-sdk";import{TransactionType as de}from"@msafe/sui3-utils";import{fromBase64 as Sn}from"@mysten/bcs";import{bcs as wn}from"@mysten/sui/bcs";var Ui=class{constructor(e,t){this.transaction=e;this.appContext=t}transaction;appContext;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:de.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(e,1)),lowerTick:Number(Nl(BigInt(this.getU32(this.getInputIndex(e,2)))).toString()),upperTick:Number(Nl(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:de.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:de.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:de.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:de.Other,type:"CollectRewards",intentionData:{pool:e[0].pool,position:e[0].position,collectRewardTokens:e.map(t=>t.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:de.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let e=this.getFeeCallData();return{txType:de.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:de.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(wn.u32().parse(Uint8Array.from(Sn(this.inputs[e].Pure.bytes))))}getU64(e){return wn.u64().parse(Uint8Array.from(Sn(this.inputs[e].Pure.bytes)))}getU128(e){return wn.u128().parse(Uint8Array.from(Sn(this.inputs[e].Pure.bytes)))}getBoolean(e){return wn.bool().parse(Uint8Array.from(Sn(this.inputs[e].Pure.bytes)))}getAddress(e){return wn.Address.parse(Uint8Array.from(Sn(this.inputs[e].Pure.bytes)))}getTypeArguments(e){return e.MoveCall.typeArguments||[]}getInputIndex(e,t){return e.MoveCall.arguments[t].Input}};import{TransactionType as qf}from"@msafe/sui3-utils";import{buildTx as _f,getQuote as Lf}from"@bluefin-exchange/bluefin7k-aggregator-sdk";import{BN as we,ClmmPoolUtil as jf}from"@firefly-exchange/library-sui";import{Decimal as Uf}from"turbos-clmm-sdk";import{SuiClient as Nf}from"@firefly-exchange/library-sui";import{OnChainCalls as Wf}from"@firefly-exchange/library-sui/spot";var Wl={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x67b34b728c4e28e704dcfecf7c5cf55c7fc593b6c65c20d1836d97c209c1928a"}},ae=(a,e)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let t=new Nf({url:Wl.rpc});return new Wf(t,Wl.objects,{address:e.address,isUIWallet:!1})};var Pt=class{static async OpenPosition(e,t,n){let o=ae(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=ae(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=ae(n,t),i=await o.queryChain.getPool(e.pool);return await o.removeLiquidity(i,e.position,{liquidityAmount:new we(e.liquidity),tokenMaxA:new we(e.maxAmountTokenA),tokenMaxB:new we(e.maxAmountTokenB)},{returnTx:!0,sender:t.address})}static async closePosition(e,t,n){let o=ae(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=ae(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=ae(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=ae(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=ae(n,t),i=await Lf({tokenIn:e.tokenIn.address,tokenOut:e.tokenOut.address,amountIn:new Uf(e.amountIn).mul(10**e.tokenIn.decimals).toString()}),s=await _f({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{...jf.estLiquidityAndCoinAmountFromOneAmounts(t.lowerTick,t.upperTick,new we(t.tokenAmount),t.isTokenAFixed,!0,0,new we(e.current_sqrt_price)),tokenMaxA:new we(t.maxAmountTokenA),tokenMaxB:new we(t.maxAmountTokenB)}}};var qi=class a extends w{constructor(t){super(t);this.data=t}data;txType=qf.Other;txSubType="Aggregator7KSwap";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.aggregator7KSwap(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Ff}from"@msafe/sui3-utils";var Fi=class a extends w{constructor(t){super(t);this.data=t}data;txType=Ff.Other;txSubType="ClosePosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.closePosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Kf}from"@msafe/sui3-utils";var Ki=class a extends w{constructor(t){super(t);this.data=t}data;txType=Kf.Other;txSubType="CollectFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Vf}from"@msafe/sui3-utils";var Vi=class a extends w{constructor(t){super(t);this.data=t}data;txType=Vf.Other;txSubType="CollectRewards";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectRewards(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as $f}from"@msafe/sui3-utils";var $i=class a extends w{constructor(t){super(t);this.data=t}data;txType=$f.Other;txSubType="CollectRewardsAndFee";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.collectRewardsAndFee(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Hf}from"@msafe/sui3-utils";var Hi=class a extends w{constructor(t){super(t);this.data=t}data;txType=Hf.Other;txSubType="OpenPosition";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.OpenPosition(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Gf}from"@msafe/sui3-utils";var Gi=class a extends w{constructor(t){super(t);this.data=t}data;txType=Gf.Other;txSubType="ProvideLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.provideLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};import{TransactionType as Xf}from"@msafe/sui3-utils";var Xi=class a extends w{constructor(t){super(t);this.data=t}data;txType=Xf.Other;txSubType="RemoveLiquidity";async build(t){let{account:n,network:o}=t;return console.log(this.data),Pt.removeLiquidity(this.data,n,o)}static fromData(t){return new a(t)}};var zi=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 Ui(t,n).decode();return{txType:zf.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=Hi.fromData(e.intentionData);break;case"ProvideLiquidity":i=Gi.fromData(e.intentionData);break;case"RemoveLiquidity":i=Xi.fromData(e.intentionData);break;case"ClosePosition":i=Fi.fromData(e.intentionData);break;case"CollectFee":i=Ki.fromData(e.intentionData);break;case"CollectRewards":i=Vi.fromData(e.intentionData);break;case"CollectRewardsAndFee":i=$i.fromData(e.intentionData);break;case"Aggregator7KSwap":i=qi.fromData(e.intentionData);break;default:throw new Error("not implemented")}return i.build({suiClient:t,account:n,network:o})}};import{TransactionType as Eh}from"@msafe/sui3-utils";import{MmtSDK as ah}from"@mmt-finance/clmm-sdk";import{Transaction as ih}from"@mysten/sui/transactions";var R=yu(Ll());import{convertI32ToSigned as ws,TickMath as ql}from"@mmt-finance/clmm-sdk/dist/utils/math/tickMath";import th from"bignumber.js";var Qf="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Nt=a=>a!=="0x2::sui::SUI"?a:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Jf=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},Yf=(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")},Zf=(a,e,t,n)=>{if(a===Qf){let[o]=n.splitCoins(n.gas,[n.pure.u64(t)]);return o}else{let o=Yf(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 jl(a,e,t,n,o){let i=await Jf({suiClient:a.rpcClient,address:e,type:t});return Zf(Nt(t),i.map(c=>({balance:BigInt(c.balance),objectId:c.coinObjectId})),n,o)}var Ie=(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 Ul({sdk:a,address:e,positionId:t,pool:n,txb:o,targetCoinType:i,slippage:s}){let c={objectId:n.poolId,tokenXType:n.tokenXType,tokenYType:n.tokenYType},p=n.rewarders.map(S=>S.coinType);p.length>0&&(console.log("claimRewardsAsTargetCoin input",{pool:c,positionId:t,rewarderCoinTypes:p,targetCoinType:i,slippage:s,toAddress:e}),await a.Pool.claimRewardsAs({txb:o,pool:c,positionId:t,rewarderCoinTypes:p,targetCoinType:i,slippage:s,toAddress:e}));let b=await a.Pool.getAllPools();return await a.Pool.claimFeeAs({txb:o,pool:c,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 eh(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 nh(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 Fl=(a,e,t)=>{let n=ws(t?a+a%(e??1):a-a%(e??1));return n>0?new R.default(eh(n)):new R.default(nh(n))};function Kl(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 Zt({address:a,coinType:e,coinAmount:t,coinDecimals:n,tx:o,mmt:i}){let s=Kl(t,n),c;return Number(t)?c=await jl(i,a,Nt(e),s,o):[c]=o.moveCall({target:"0x2::coin::zero",typeArguments:[e],arguments:[]}),c}function Vl({mmt:a,tx:e,poolModel:t,selectedLowTick:n,selectedHighTick:o}){let i=Fl(ws(n),t.tickSpacing),s=Fl(ws(o),t.tickSpacing);return a.Position.openPosition(e,t,i.toString(),s.toString())}var oh=(a,e)=>{let n=1e4-Math.floor(e*100);return a*BigInt(n)/BigInt(1e4)};function Qi(a,e,t){let n=Kl(a,e);return Number(a)===0?BigInt(0):oh(n,t)}async function Ce({poolId:a,currentSqrtPrice:e,tokenX:t,tokenY:n,slippagePercentage:o,isTokenX:i,suiClient:s}){let p=(await s.getObject({id:a,options:{showContent:!0}}))?.data?.content?.fields?.sqrt_price??e,b=ql.sqrtPriceX64ToPrice(new R.default(p?.toString()),t.decimals,n.decimals),S=i?(100-o)/100:(100+o)/100,I=ql.priceToSqrtPriceX64(b.mul(S),t.decimals,n.decimals);return BigInt(I.toString())}var $l=async(a,e,t,n,o,i,s,c,p,b)=>{let S=await Zt({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),I=await Zt({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=Vl({mmt:a,tx:e,poolModel:x,selectedLowTick:c,selectedHighTick:p}),k=Qi(n,i.tokenX.decimals,b),M=Qi(o,i.tokenY.decimals,b);a.Pool.addLiquidity(e,x,D,S,I,k,M,t),e.transferObjects([D],e.pure.address(t))},Hl=async(a,e,t,n,o,i,s,c,p,b,S)=>{try{let I=await Zt({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:Nt(s.tokenX.coinType),tokenYType:Nt(s.tokenY.coinType),tickSpacing:s.tickSpacing},D=Vl({mmt:a,tx:e,poolModel:x,selectedLowTick:c,selectedHighTick:p}),k=await Ce({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:I,isXtoY:i,limitSqrtPrice:k,slippagePercentage:S,transferToAddress:n,useMvr:!0}),e.transferObjects([D],e.pure.address(n))}catch(I){console.error(I)}},Gl=async(a,e,t,n,o,i,s,c)=>{let p=await Zt({mmt:a,address:t,coinType:i.tokenX.coinType,coinAmount:n,coinDecimals:i.tokenX.decimals,tx:e}),b=await Zt({mmt:a,address:t,coinType:i.tokenY.coinType,coinAmount:o,coinDecimals:i.tokenY.decimals,tx:e}),S={objectId:i.poolId,tokenXType:i.tokenXType,tokenYType:i.tokenYType,tickSpacing:i.tickSpacing},I=Qi(n,i.tokenX.decimals,c),x=Qi(o,i.tokenY.decimals,c);a.Pool.addLiquidity(e,S,s,p,b,I,x,t)},Xl=async(a,e,t,n,o,i,s,c,p)=>{try{let b=await Zt({mmt:a,address:t,coinType:o?i.tokenX.coinType:i.tokenY.coinType,coinAmount:n,coinDecimals:o?i.tokenX.decimals:i.tokenY.decimals,tx:e}),S={objectId:i.poolId,tokenXType:i.tokenX.coinType,tokenYType:i.tokenY.coinType,tickSpacing:i.tickSpacing},I=await Ce({suiClient:a.rpcClient,poolId:i.poolId,currentSqrtPrice:i.currentSqrtPrice,tokenX:i.tokenX,tokenY:i.tokenY,slippagePercentage:c,isTokenX:o});await a.Pool.addLiquiditySingleSidedV2({txb:e,pool:S,position:s,inputCoin:b,isXtoY:o,limitSqrtPrice:I,slippagePercentage:p,transferToAddress:t})}catch(b){throw console.error(b),b}},zl=(a,e)=>BigInt(e===100?a:new th(a).multipliedBy(e/100).toFixed(0)),Ql=async(a,e,t,n,o,i)=>{let s=zl(t.liquidity,o),c=n.tokenX.coinType,p=n.tokenY.coinType,b={objectId:n?.poolId,tokenXType:c,tokenYType:p};a.Pool.removeLiquidity(i,b,t.objectId,s,BigInt(0),BigInt(0),e),Ie(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:c})=>{let p=zl(t.liquidity,o),b=Nt(n.tokenX.coinType),S=Nt(n.tokenY.coinType),I=Nt(s)===S,x={objectId:n?.poolId,tokenXType:b,tokenYType:S},{removeLpCoinA:D,removeLpCoinB:k}=a.Pool.removeLiquidity(i,x,t.objectId,p,BigInt(0),BigInt(0)),M=await Ce({suiClient:a.rpcClient,poolId:n.poolId,currentSqrtPrice:n.currentSqrtPrice,tokenX:n.tokenX,tokenY:n.tokenY,isTokenX:I,slippagePercentage:c}),L=I?D:k,U=i.moveCall({target:"0x2::coin::value",arguments:[L],typeArguments:[I?b:S]});i.transferObjects([I?k:D],e),a.Pool.swapV2({txb:i,transferToAddress:e,pool:x,limitSqrtPrice:M,amount:U,inputCoin:L,isXtoY:I}),Ie(a,e,t,n,i),o===100&&a.Position.closePosition(i,t.objectId)};var Ji=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=ah.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:c,selectedLowTick:p,selectedHighTick:b,slippage:S}=n,I=new ih;return await $l(t,I,o,i,s,c,c.poolId,p,b,S),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 Yi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=rh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:c,selectedLowTick:p,selectedHighTick:b,swapSlippage:S,addLiquiditySlippage:I}=n,x=new sh;return await Hl(t,x,t.rpcClient,o,i,s,c,p,b,S,I),x}static fromData(t){return new a(t)}};import{MmtSDK as ch}from"@mmt-finance/clmm-sdk";import{VeMMT as lh}from"@mmt-finance/ve-sdk-v1";import{Transaction as uh}from"@mysten/sui/transactions";var Ve="0x35169bc93e1fddfcf3a82a9eae726d349689ed59e4b065369af8789fe59f8608::mmt::MMT";var In=async a=>{let e=await a.getSyncEpochInfo();if(!e)throw new Error("Failed to sync epoch");return e},Yl=async(a,e,t,n,o,i,s,c)=>{let p=Number(n);if(!n||Number.isNaN(p)||p<=0)throw new Error(`Bond Failed: Invalid amount: ${n}. Amount must be greater than 0`);if(!i&&!s)throw new Error("Bond Failed: Failed to calculate unbond date");if(typeof s!="number"&&!i)throw new Error("Bond Failed: Invalid unbond date");let b=await Zt({mmt:a,tx:c,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals});if(!b)throw new Error(`Bond Failed: Failed to get coin object for ${t.coinType}, amount: ${n}`);let S=await In(e);await e.syncOrAdvanceEpoch(c,S.currentEpoch,S.syncedEpoch);let I=c.getData().commands.length;i?await e.createMaxBond(c,b,o):await e.createBond(c,b,BigInt(s),o);let D=c.getData().commands.length;if(D===0)throw new Error(`Bond Failed: Transaction has no commands. enableAutoMaxBond: ${i}, unbondAt: ${s}, amount: ${n}`);if(D===I)throw new Error(`Bond Failed: No new commands were added by bond operation. Commands before: ${I}, after: ${D}`)},Zl=async(a,e,t,n,o,i,s,c)=>{let p=await In(a);if(await a.syncOrAdvanceEpoch(c,p.currentEpoch,p.syncedEpoch),await a.claimReward(c,t,e),o)i||await a.setNormal(c,t);else if(i)await a.setMaxBond(c,t);else{if(typeof s!="number")throw new Error("Extend Failed: Failed to calculate unbond date");if(s<n)throw new Error("Extend Failed: New duration cannot be less than current duration");await a.extend(c,t,s)}},tu=async(a,e,t,n,o)=>{let i=await In(a);await a.syncOrAdvanceEpoch(o,i.currentEpoch,i.syncedEpoch),await a.claimReward(o,t,e),await n.reduce(async(s,c)=>{await s,await a.claimReward(o,c,e),await a.merge(o,t,c)},Promise.resolve())},eu=async(a,e,t,n)=>{let o=await In(a);await a.syncOrAdvanceEpoch(n,o.currentEpoch,o.syncedEpoch),await a.claimReward(n,t,e),await a.unbond(n,t,e)},nu=async(a,e,t,n)=>{if(t.length>0&&t.some(o=>o.userRewardAmount>0)){let o=await In(a);await a.syncOrAdvanceEpoch(n,o.currentEpoch,o.syncedEpoch),await t.reduce(async(i,s)=>{await i,s.userRewardAmount>0&&await a.claimReward(n,s.veId,e)},Promise.resolve())}},ou=async(a,e,t,n,o,i,s,c,p)=>{let b=Nt(i),S=[];for(let q of n)if(q.userRewardAmount>0){let Mt=await e.buildClaimRewardCoin(o,q.veId);S.push(Mt)}let I=[];for(let q of S)Array.isArray(q)?I.push(...q):I.push(q);if(I.length===0)return;if(i===Nt(Ve)){o.transferObjects(I,o.pure.address(t));return}let x=c?.[i]?.[Ve];if(!x||x.length===0)throw new Error(`No swap route found from ${Ve} to ${i}`);let[D,...k]=I;k.length>0&&o.mergeCoins(D,k);let M=D,L=o.moveCall({target:"0x2::coin::value",arguments:[M],typeArguments:[Ve]}),U=Nt(Ve);for(let q=0;q<x.length;q++){let Mt=x[q],W=p.find(H=>H.poolId===Mt);if(!W)throw new Error(`Pool ${Mt} not found`);let Rt=Nt(W.tokenXType||W.tokenX?.coinType||"")===U,De={objectId:W.poolId,tokenXType:W.tokenXType||W.tokenX?.coinType||"",tokenYType:W.tokenYType||W.tokenY?.coinType||""},Cn=await Ce({suiClient:a.rpcClient,poolId:W.poolId,currentSqrtPrice:W.currentSqrtPrice,tokenX:W.tokenX,tokenY:W.tokenY,slippagePercentage:s,isTokenX:Rt}),{outputCoin:xn,leftoverCoin:$e}=a.Pool.swapV2({txb:o,pool:De,amount:L,inputCoin:M,isXtoY:Rt,limitSqrtPrice:Cn});if(o.transferObjects([$e],o.pure.address(t)),M=xn,U=Rt?Nt(W.tokenYType||W.tokenY?.coinType||""):Nt(W.tokenXType||W.tokenX?.coinType||""),U===i){o.transferObjects([M],o.pure.address(t));return}L=o.moveCall({target:"0x2::coin::value",arguments:[M],typeArguments:[U]})}o.transferObjects([M],o.pure.address(t))};var Zi=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=ch.NEW({network:"mainnet"}),o=new lh(t.suiClient,"mainnet"),{params:i}=this.data,{address:s,positions:c,pools:p,veMMTs:b}=i,S=new uh;for(let I of c){let x=p.find(D=>D.poolId===I.poolId);x&&Ie(n,s,I,x,S)}return await nu(o,s,b,S),S}static fromData(t){return new a(t)}};import{MmtSDK as mh}from"@mmt-finance/clmm-sdk";import{VeMMT as ph}from"@mmt-finance/ve-sdk-v1";import{Transaction as dh}from"@mysten/sui/transactions";var tr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=mh.NEW({network:"mainnet"}),o=new ph(t.suiClient,"mainnet"),{params:i}=this.data,{claimVeMMTParams:s}=i,{address:c,veMMTs:p,targetCoinType:b,slippage:S,claimRoutes:I,pools:x}=s,D=new dh;return await Promise.all(i.claimParams.map(k=>Ul({...k,sdk:n,txb:D}))),await ou(n,o,c,p,D,b,S,I,x),D}static fromData(t){return new a(t)}};import{MmtSDK as fh}from"@mmt-finance/clmm-sdk";import{Transaction as hh}from"@mysten/sui/transactions";var er=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=fh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,position:i,pool:s}=n,c=new hh;return Ie(t,o,i,s,c),c}static fromData(t){return new a(t)}};import{MmtSDK as gh}from"@mmt-finance/clmm-sdk";import{Transaction as yh}from"@mysten/sui/transactions";var nr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=gh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amountA:i,amountB:s,pool:c,positionObjectId:p,slippage:b}=n,S=new yh;return await Gl(t,S,o,i,s,c,p,b),S}static fromData(t){return new a(t)}};import{MmtSDK as bh}from"@mmt-finance/clmm-sdk";import{Transaction as Th}from"@mysten/sui/transactions";var or=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=bh.NEW({network:"mainnet"}),{params:n}=this.data,{address:o,amount:i,isTokenX:s,pool:c,positionObjectId:p,swapSlippage:b,addLiquiditySlippage:S}=n,I=new Th;return await Xl(t,I,o,i,s,c,p,b,S),I}static fromData(t){return new a(t)}};import{MmtSDK as Sh}from"@mmt-finance/clmm-sdk";import{Transaction as wh}from"@mysten/sui/transactions";var ar=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=Sh.NEW({network:"mainnet"}),{params:n}=this.data,{pool:o,position:i,address:s,withdrawPercentage:c,zapOutOn:p,targetCoinType:b,slippage:S}=n,I=new wh;return p?await Jl({sdk:t,address:s,position:i,pool:o,withdrawPercentage:c,txb:I,targetCoinType:b,slippage:S}):await Ql(t,s,i,o,c,I),I}static fromData(t){return new a(t)}};import{Transaction as au}from"@mysten/sui/transactions";import{LstClient as iu}from"@suilend/springsui-sdk";var Is={id:"0x0431232199873db77a92aa645cd43521437e9cc5c6fff07fd03edb88afe0b25a",type:"0x2b6602099970374cf58a2a1b9d96f005fccceb81e92eb059873baf420eb6c717::x_sui::X_SUI",weightHookId:"0x9e35c13dbb0bc437e8ad5a95ec463622f58763e060552ae8d100db77f4904601"},ru=async(a,e,t)=>{let n=await iu.initialize(a,Is),o=new au,[i]=o.splitCoins(o.gas,[BigInt(t)]),s=n.mint(o,i);return o.transferObjects([s],e),o},su=async(a,e,t)=>{let n=await iu.initialize(a,Is),o=await a.getCoins({owner:e,coinType:Is.type,limit:1e3});if(o.data.length===0)throw new Error("No lst coins found");let i=new au,s=o.data[0];o.data.length>1&&i.mergeCoins(s.coinObjectId,o.data.slice(1).map(b=>b.coinObjectId));let[c]=i.splitCoins(s.coinObjectId,[BigInt(t)]),p=n.redeem(i,c);return i.transferObjects([p],e),i};var ir=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await ru(t.suiClient,o,i)}static fromData(t){return new a(t)}};import{MmtSDK as Ch}from"@mmt-finance/clmm-sdk";import{Transaction as xh}from"@mysten/sui/transactions";import{mappedMmtV3Pool as Ih}from"@mmt-finance/clmm-sdk/dist/utils/poolUtils";var cu=async(a,e,t,n,o,i,s)=>{let c=await Zt({mmt:a,tx:i,address:o,coinType:t.coinType,coinAmount:n,coinDecimals:t.decimals}),p=i.moveCall({target:"0x2::coin::value",typeArguments:[t.coinType],arguments:[c]}),b=t.coinType;for(let S=0;S<e.length;S+=1){let{poolId:I,tokenX:x,tokenY:D,isStable:k,currentSqrtPrice:M}=e[S],{id:L,isReverse:U}=Ih[I]||{id:I,isReverse:!1},q=Nt(x.coinType)===Nt(b);q=U?!q:q;let Mt=U?D.coinType:x.coinType,W=U?x.coinType:D.coinType,xe=await Ce({poolId:L,tokenX:x,tokenY:D,slippagePercentage:s,isTokenX:q,suiClient:a.rpcClient,currentSqrtPrice:M}),Rt=a.Pool.swap(i,{objectId:L,tokenXType:Mt,tokenYType:W,isStable:k},p,c,q,void 0,xe,!1);i.transferObjects([c],i.pure.address(o)),c=Rt,b=q?W:Mt,p=i.moveCall({target:"0x2::coin::value",typeArguments:[b],arguments:[c]})}i.transferObjects([c],i.pure.address(o))};var rr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(){let t=Ch.NEW({network:"mainnet"}),{params:n}=this.data,{route:o,tokenIn:i,amountIn:s,address:c,slippage:p}=n,b=new xh;return await cu(t,o,i,s,c,b,p),b}static fromData(t){return new a(t)}};var sr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let{params:n}=this.data,{address:o,amount:i}=n;return await su(t.suiClient,o,i)}static fromData(t){return new a(t)}};import{MmtSDK as Dh}from"@mmt-finance/clmm-sdk";import{VeMMT as kh}from"@mmt-finance/ve-sdk-v1";import{Transaction as vh}from"@mysten/sui/transactions";var cr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=Dh.NEW({network:"mainnet"}),o=new kh(t.suiClient,"mainnet"),{params:i}=this.data,{token:s,amount:c,address:p,enableAutoMaxBond:b,unbondAt:S}=i,I=new vh;return await Yl(n,o,s,c,p,b,S,I),I}static fromData(t){return new a(t)}};import{VeMMT as Ah}from"@mmt-finance/ve-sdk-v1";import{Transaction as Mh}from"@mysten/sui/transactions";var lr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Ah(t.suiClient,"mainnet"),{params:o}=this.data,{address:i,veId:s,currentUnbondAt:c,isCurrentlyMaxBond:p,enableAutoMaxBond:b,unbondAt:S}=o,I=new Mh;return await Zl(n,i,s,c,p,b,S,I),I}static fromData(t){return new a(t)}};import{VeMMT as Oh}from"@mmt-finance/ve-sdk-v1";import{Transaction as Ph}from"@mysten/sui/transactions";var ur=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Oh(t.suiClient,"mainnet"),{params:o}=this.data,{address:i,veId:s,selectedVeMMTIds:c}=o,p=new Ph;return await tu(n,i,s,c,p),p}static fromData(t){return new a(t)}};import{VeMMT as Rh}from"@mmt-finance/ve-sdk-v1";import{Transaction as Bh}from"@mysten/sui/transactions";var mr=class a extends w{constructor(t){super(t);this.data=t}data;txType;txSubType;async build(t){let n=new Rh(t.suiClient,"mainnet"),{params:o}=this.data,{address:i,veId:s}=o,c=new Bh;return await eu(n,i,s,c),c}static fromData(t){return new a(t)}};var pr=class{application="mmt-dex";supportSDK="@mysten/sui";async deserialize(e){let{appContext:t}=e;return{txType:Eh.Other,txSubType:t.action,intentionData:t}}async build(e){let t;switch(e.txSubType){case"Swap":t=rr.fromData(e.intentionData);break;case"AddLiquidity":t=Ji.fromData(e.intentionData);break;case"AddLiquiditySingleSide":t=Yi.fromData(e.intentionData);break;case"ClaimRewards":t=er.fromData(e.intentionData);break;case"ClaimAllRewards":t=Zi.fromData(e.intentionData);break;case"ClaimRewardsAs":t=tr.fromData(e.intentionData);break;case"RemoveLiquidity":t=ar.fromData(e.intentionData);break;case"StakeXSui":t=ir.fromData(e.intentionData);break;case"UnstakeXSui":t=sr.fromData(e.intentionData);break;case"ManageLiquidity":t=nr.fromData(e.intentionData);break;case"ManageLiquiditySingleSide":t=or.fromData(e.intentionData);break;case"Bond":t=cr.fromData(e.intentionData);break;case"Extend":t=lr.fromData(e.intentionData);break;case"Merge":t=ur.fromData(e.intentionData);break;case"Unbond":t=mr.fromData(e.intentionData);break;default:throw new Error(`not implemented ${e.txSubType}`)}return t.build({suiClient:e.suiClient})}};var k4=ya.fromHelpers([new ta,new pa,new Jo,new da,new Do,new Ei,new pr,new Qa,new ji,new Jn,new ri,new di,new Bn,new zi,new yi]);export{k4 as appHelpers};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|