@imtbl/sdk 0.31.0 → 0.31.2-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/.eslintrc +13 -0
  2. package/.gitignore +8 -0
  3. package/blockchain_data.js +1 -0
  4. package/checkout_sdk.js +9 -0
  5. package/config.js +1 -0
  6. package/dist/browser/checkout/sdk.js +1 -1
  7. package/dist/index.browser.js +3 -3
  8. package/dist/index.browser.js.map +1 -1
  9. package/immutablex_client.js +1 -0
  10. package/index.cjs +9 -0
  11. package/index.d.ts +18603 -0
  12. package/index.js +9 -0
  13. package/module-release.json +30 -0
  14. package/orderbook.js +1 -0
  15. package/package.json +24 -18
  16. package/passport.js +1 -0
  17. package/provider.js +1 -0
  18. package/rollup.config.js +158 -0
  19. package/scripts/copyBrowserBundles.js +62 -0
  20. package/scripts/generate-package-list.sh +5 -0
  21. package/scripts/generateIndex.js +44 -0
  22. package/scripts/updateDependencies.js +137 -0
  23. package/scripts/updateExports.js +62 -0
  24. package/src/blockchain_data.ts +1 -0
  25. package/src/checkout_sdk.ts +1 -0
  26. package/src/checkout_widgets.ts +1 -0
  27. package/src/config.ts +1 -0
  28. package/src/immutablex_client.ts +1 -0
  29. package/src/index.ts +7 -0
  30. package/src/orderbook.ts +1 -0
  31. package/src/passport.ts +1 -0
  32. package/src/provider.ts +1 -0
  33. package/tsconfig.json +27 -0
  34. package/typedoc.json +4 -0
  35. package/workspace-packages.json +31 -0
  36. package/dist/blockchain_data.js +0 -4010
  37. package/dist/checkout_sdk.js +0 -26016
  38. package/dist/config.js +0 -37
  39. package/dist/immutablex_client.js +0 -523
  40. package/dist/index.cjs +0 -34452
  41. package/dist/index.js +0 -34424
  42. package/dist/orderbook.js +0 -1583
  43. package/dist/passport.js +0 -9159
  44. package/dist/provider.js +0 -1165
  45. /package/{dist/blockchain_data.d.ts → blockchain_data.d.ts} +0 -0
  46. /package/{dist/checkout_sdk.d.ts → checkout_sdk.d.ts} +0 -0
  47. /package/{dist/config.d.ts → config.d.ts} +0 -0
  48. /package/{dist/immutablex_client.d.ts → immutablex_client.d.ts} +0 -0
  49. /package/{dist/index.d.ts → index.d.cts} +0 -0
  50. /package/{dist/orderbook.d.ts → orderbook.d.ts} +0 -0
  51. /package/{dist/passport.d.ts → passport.d.ts} +0 -0
  52. /package/{dist/provider.d.ts → provider.d.ts} +0 -0
@@ -0,0 +1,9 @@
1
+ import e,{HttpStatusCode as t}from"axios";import{ethers as n,ContractFactory as a,utils as r,Contract as i,BigNumber as s,providers as o,constants as c}from"ethers";import{Web3Provider as d,JsonRpcProvider as u}from"@ethersproject/providers";import f from"@metamask/detect-provider";import*as l from"@uniswap/sdk-core";import{TradeType as p,Percent as h}from"@uniswap/sdk-core";import m from"assert";import{FeeAmount as b,Route as y,SwapQuoter as g,Pool as E,Trade as T,toHex as w,encodeRouteToPath as v}from"@uniswap/v3-sdk";import{keccak256 as R}from"@ethersproject/solidity";import{SwapRouter as A,PaymentsExtended as _}from"@uniswap/router-sdk";import C from"form-data";import{Seaport as I}from"@opensea/seaport-js";var N;!function(e){e.PRODUCTION="production",e.SANDBOX="sandbox"}(N||(N={}));class O{environment;rateLimitingKey;apiKey;publishableKey;constructor(e){this.environment=e.environment}}const S="11155111",M="0x0000000000000000000000000000000000001002",k="0x0000000000000000000000000000000000000001",P={rootChainID:S,childChainID:"13473"},D={rootChainID:S,childChainID:"13472"},L={rootChainID:"1",childChainID:"13371"};var x="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function F(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var U={exports:{}};!function(e,t){function n(e,t){if(!e)throw new Error(t||"Assertion failed")}function a(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}function r(e,t,n){if(r.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(n=t,t=10),this._init(e||0,t||10,n||"be"))}var i;"object"==typeof e?e.exports=r:t.BN=r,r.BN=r,r.wordSize=26;try{i="undefined"!=typeof window&&void 0!==window.Buffer?window.Buffer:require("buffer").Buffer}catch(e){}function s(e,t){var a=e.charCodeAt(t);return a>=48&&a<=57?a-48:a>=65&&a<=70?a-55:a>=97&&a<=102?a-87:void n(!1,"Invalid character in "+e)}function o(e,t,n){var a=s(e,n);return n-1>=t&&(a|=s(e,n-1)<<4),a}function c(e,t,a,r){for(var i=0,s=0,o=Math.min(e.length,a),c=t;c<o;c++){var d=e.charCodeAt(c)-48;i*=r,s=d>=49?d-49+10:d>=17?d-17+10:d,n(d>=0&&s<r,"Invalid character"),i+=s}return i}function d(e,t){e.words=t.words,e.length=t.length,e.negative=t.negative,e.red=t.red}if(r.isBN=function(e){return e instanceof r||null!==e&&"object"==typeof e&&e.constructor.wordSize===r.wordSize&&Array.isArray(e.words)},r.max=function(e,t){return e.cmp(t)>0?e:t},r.min=function(e,t){return e.cmp(t)<0?e:t},r.prototype._init=function(e,t,a){if("number"==typeof e)return this._initNumber(e,t,a);if("object"==typeof e)return this._initArray(e,t,a);"hex"===t&&(t=16),n(t===(0|t)&&t>=2&&t<=36);var r=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&(r++,this.negative=1),r<e.length&&(16===t?this._parseHex(e,r,a):(this._parseBase(e,t,r),"le"===a&&this._initArray(this.toArray(),t,a)))},r.prototype._initNumber=function(e,t,a){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(n(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===a&&this._initArray(this.toArray(),t,a)},r.prototype._initArray=function(e,t,a){if(n("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var i,s,o=0;if("be"===a)for(r=e.length-1,i=0;r>=0;r-=3)s=e[r]|e[r-1]<<8|e[r-2]<<16,this.words[i]|=s<<o&67108863,this.words[i+1]=s>>>26-o&67108863,(o+=24)>=26&&(o-=26,i++);else if("le"===a)for(r=0,i=0;r<e.length;r+=3)s=e[r]|e[r+1]<<8|e[r+2]<<16,this.words[i]|=s<<o&67108863,this.words[i+1]=s>>>26-o&67108863,(o+=24)>=26&&(o-=26,i++);return this._strip()},r.prototype._parseHex=function(e,t,n){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var a=0;a<this.length;a++)this.words[a]=0;var r,i=0,s=0;if("be"===n)for(a=e.length-1;a>=t;a-=2)r=o(e,t,a)<<i,this.words[s]|=67108863&r,i>=18?(i-=18,s+=1,this.words[s]|=r>>>26):i+=8;else for(a=(e.length-t)%2==0?t+1:t;a<e.length;a+=2)r=o(e,t,a)<<i,this.words[s]|=67108863&r,i>=18?(i-=18,s+=1,this.words[s]|=r>>>26):i+=8;this._strip()},r.prototype._parseBase=function(e,t,n){this.words=[0],this.length=1;for(var a=0,r=1;r<=67108863;r*=t)a++;a--,r=r/t|0;for(var i=e.length-n,s=i%a,o=Math.min(i,i-s)+n,d=0,u=n;u<o;u+=a)d=c(e,u,u+a,t),this.imuln(r),this.words[0]+d<67108864?this.words[0]+=d:this._iaddn(d);if(0!==s){var f=1;for(d=c(e,u,e.length,t),u=0;u<s;u++)f*=t;this.imuln(f),this.words[0]+d<67108864?this.words[0]+=d:this._iaddn(d)}this._strip()},r.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t<this.length;t++)e.words[t]=this.words[t];e.length=this.length,e.negative=this.negative,e.red=this.red},r.prototype._move=function(e){d(e,this)},r.prototype.clone=function(){var e=new r(null);return this.copy(e),e},r.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},r.prototype._strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},r.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},"undefined"!=typeof Symbol&&"function"==typeof Symbol.for)try{r.prototype[Symbol.for("nodejs.util.inspect.custom")]=u}catch(e){r.prototype.inspect=u}else r.prototype.inspect=u;function u(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var f=["","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"],l=[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],p=[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];function h(e,t,n){n.negative=t.negative^e.negative;var a=e.length+t.length|0;n.length=a,a=a-1|0;var r=0|e.words[0],i=0|t.words[0],s=r*i,o=67108863&s,c=s/67108864|0;n.words[0]=o;for(var d=1;d<a;d++){for(var u=c>>>26,f=67108863&c,l=Math.min(d,t.length-1),p=Math.max(0,d-e.length+1);p<=l;p++){var h=d-p|0;u+=(s=(r=0|e.words[h])*(i=0|t.words[p])+f)/67108864|0,f=67108863&s}n.words[d]=0|f,c=0|u}return 0!==c?n.words[d]=0|c:n.length--,n._strip()}r.prototype.toString=function(e,t){var a;if(t=0|t||1,16===(e=e||10)||"hex"===e){a="";for(var r=0,i=0,s=0;s<this.length;s++){var o=this.words[s],c=(16777215&(o<<r|i)).toString(16);i=o>>>24-r&16777215,(r+=2)>=26&&(r-=26,s--),a=0!==i||s!==this.length-1?f[6-c.length]+c+a:c+a}for(0!==i&&(a=i.toString(16)+a);a.length%t!=0;)a="0"+a;return 0!==this.negative&&(a="-"+a),a}if(e===(0|e)&&e>=2&&e<=36){var d=l[e],u=p[e];a="";var h=this.clone();for(h.negative=0;!h.isZero();){var m=h.modrn(u).toString(e);a=(h=h.idivn(u)).isZero()?m+a:f[d-m.length]+m+a}for(this.isZero()&&(a="0"+a);a.length%t!=0;)a="0"+a;return 0!==this.negative&&(a="-"+a),a}n(!1,"Base should be between 2 and 36")},r.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},r.prototype.toJSON=function(){return this.toString(16,2)},i&&(r.prototype.toBuffer=function(e,t){return this.toArrayLike(i,e,t)}),r.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},r.prototype.toArrayLike=function(e,t,a){this._strip();var r=this.byteLength(),i=a||Math.max(1,r);n(r<=i,"byte array longer than desired length"),n(i>0,"Requested array length <= 0");var s=function(e,t){return e.allocUnsafe?e.allocUnsafe(t):new e(t)}(e,i);return this["_toArrayLike"+("le"===t?"LE":"BE")](s,r),s},r.prototype._toArrayLikeLE=function(e,t){for(var n=0,a=0,r=0,i=0;r<this.length;r++){var s=this.words[r]<<i|a;e[n++]=255&s,n<e.length&&(e[n++]=s>>8&255),n<e.length&&(e[n++]=s>>16&255),6===i?(n<e.length&&(e[n++]=s>>24&255),a=0,i=0):(a=s>>>24,i+=2)}if(n<e.length)for(e[n++]=a;n<e.length;)e[n++]=0},r.prototype._toArrayLikeBE=function(e,t){for(var n=e.length-1,a=0,r=0,i=0;r<this.length;r++){var s=this.words[r]<<i|a;e[n--]=255&s,n>=0&&(e[n--]=s>>8&255),n>=0&&(e[n--]=s>>16&255),6===i?(n>=0&&(e[n--]=s>>24&255),a=0,i=0):(a=s>>>24,i+=2)}if(n>=0)for(e[n--]=a;n>=0;)e[n--]=0},Math.clz32?r.prototype._countBits=function(e){return 32-Math.clz32(e)}:r.prototype._countBits=function(e){var t=e,n=0;return t>=4096&&(n+=13,t>>>=13),t>=64&&(n+=7,t>>>=7),t>=8&&(n+=4,t>>>=4),t>=2&&(n+=2,t>>>=2),n+t},r.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,n=0;return 0==(8191&t)&&(n+=13,t>>>=13),0==(127&t)&&(n+=7,t>>>=7),0==(15&t)&&(n+=4,t>>>=4),0==(3&t)&&(n+=2,t>>>=2),0==(1&t)&&n++,n},r.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},r.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;t<this.length;t++){var n=this._zeroBits(this.words[t]);if(e+=n,26!==n)break}return e},r.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},r.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},r.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},r.prototype.isNeg=function(){return 0!==this.negative},r.prototype.neg=function(){return this.clone().ineg()},r.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},r.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]|e.words[t];return this._strip()},r.prototype.ior=function(e){return n(0==(this.negative|e.negative)),this.iuor(e)},r.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},r.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},r.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var n=0;n<t.length;n++)this.words[n]=this.words[n]&e.words[n];return this.length=t.length,this._strip()},r.prototype.iand=function(e){return n(0==(this.negative|e.negative)),this.iuand(e)},r.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},r.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},r.prototype.iuxor=function(e){var t,n;this.length>e.length?(t=this,n=e):(t=e,n=this);for(var a=0;a<n.length;a++)this.words[a]=t.words[a]^n.words[a];if(this!==t)for(;a<t.length;a++)this.words[a]=t.words[a];return this.length=t.length,this._strip()},r.prototype.ixor=function(e){return n(0==(this.negative|e.negative)),this.iuxor(e)},r.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},r.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},r.prototype.inotn=function(e){n("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),a=e%26;this._expand(t),a>0&&t--;for(var r=0;r<t;r++)this.words[r]=67108863&~this.words[r];return a>0&&(this.words[r]=~this.words[r]&67108863>>26-a),this._strip()},r.prototype.notn=function(e){return this.clone().inotn(e)},r.prototype.setn=function(e,t){n("number"==typeof e&&e>=0);var a=e/26|0,r=e%26;return this._expand(a+1),this.words[a]=t?this.words[a]|1<<r:this.words[a]&~(1<<r),this._strip()},r.prototype.iadd=function(e){var t,n,a;if(0!==this.negative&&0===e.negative)return this.negative=0,t=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,t=this.isub(e),e.negative=1,t._normSign();this.length>e.length?(n=this,a=e):(n=e,a=this);for(var r=0,i=0;i<a.length;i++)t=(0|n.words[i])+(0|a.words[i])+r,this.words[i]=67108863&t,r=t>>>26;for(;0!==r&&i<n.length;i++)t=(0|n.words[i])+r,this.words[i]=67108863&t,r=t>>>26;if(this.length=n.length,0!==r)this.words[this.length]=r,this.length++;else if(n!==this)for(;i<n.length;i++)this.words[i]=n.words[i];return this},r.prototype.add=function(e){var t;return 0!==e.negative&&0===this.negative?(e.negative=0,t=this.sub(e),e.negative^=1,t):0===e.negative&&0!==this.negative?(this.negative=0,t=e.sub(this),this.negative=1,t):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},r.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var n,a,r=this.cmp(e);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;r>0?(n=this,a=e):(n=e,a=this);for(var i=0,s=0;s<a.length;s++)i=(t=(0|n.words[s])-(0|a.words[s])+i)>>26,this.words[s]=67108863&t;for(;0!==i&&s<n.length;s++)i=(t=(0|n.words[s])+i)>>26,this.words[s]=67108863&t;if(0===i&&s<n.length&&n!==this)for(;s<n.length;s++)this.words[s]=n.words[s];return this.length=Math.max(this.length,s),n!==this&&(this.negative=1),this._strip()},r.prototype.sub=function(e){return this.clone().isub(e)};var m=function(e,t,n){var a,r,i,s=e.words,o=t.words,c=n.words,d=0,u=0|s[0],f=8191&u,l=u>>>13,p=0|s[1],h=8191&p,m=p>>>13,b=0|s[2],y=8191&b,g=b>>>13,E=0|s[3],T=8191&E,w=E>>>13,v=0|s[4],R=8191&v,A=v>>>13,_=0|s[5],C=8191&_,I=_>>>13,N=0|s[6],O=8191&N,S=N>>>13,M=0|s[7],k=8191&M,P=M>>>13,D=0|s[8],L=8191&D,x=D>>>13,F=0|s[9],U=8191&F,B=F>>>13,V=0|o[0],G=8191&V,q=V>>>13,j=0|o[1],$=8191&j,H=j>>>13,z=0|o[2],W=8191&z,K=z>>>13,X=0|o[3],Z=8191&X,J=X>>>13,Y=0|o[4],Q=8191&Y,ee=Y>>>13,te=0|o[5],ne=8191&te,ae=te>>>13,re=0|o[6],ie=8191&re,se=re>>>13,oe=0|o[7],ce=8191&oe,de=oe>>>13,ue=0|o[8],fe=8191&ue,le=ue>>>13,pe=0|o[9],he=8191&pe,me=pe>>>13;n.negative=e.negative^t.negative,n.length=19;var be=(d+(a=Math.imul(f,G))|0)+((8191&(r=(r=Math.imul(f,q))+Math.imul(l,G)|0))<<13)|0;d=((i=Math.imul(l,q))+(r>>>13)|0)+(be>>>26)|0,be&=67108863,a=Math.imul(h,G),r=(r=Math.imul(h,q))+Math.imul(m,G)|0,i=Math.imul(m,q);var ye=(d+(a=a+Math.imul(f,$)|0)|0)+((8191&(r=(r=r+Math.imul(f,H)|0)+Math.imul(l,$)|0))<<13)|0;d=((i=i+Math.imul(l,H)|0)+(r>>>13)|0)+(ye>>>26)|0,ye&=67108863,a=Math.imul(y,G),r=(r=Math.imul(y,q))+Math.imul(g,G)|0,i=Math.imul(g,q),a=a+Math.imul(h,$)|0,r=(r=r+Math.imul(h,H)|0)+Math.imul(m,$)|0,i=i+Math.imul(m,H)|0;var ge=(d+(a=a+Math.imul(f,W)|0)|0)+((8191&(r=(r=r+Math.imul(f,K)|0)+Math.imul(l,W)|0))<<13)|0;d=((i=i+Math.imul(l,K)|0)+(r>>>13)|0)+(ge>>>26)|0,ge&=67108863,a=Math.imul(T,G),r=(r=Math.imul(T,q))+Math.imul(w,G)|0,i=Math.imul(w,q),a=a+Math.imul(y,$)|0,r=(r=r+Math.imul(y,H)|0)+Math.imul(g,$)|0,i=i+Math.imul(g,H)|0,a=a+Math.imul(h,W)|0,r=(r=r+Math.imul(h,K)|0)+Math.imul(m,W)|0,i=i+Math.imul(m,K)|0;var Ee=(d+(a=a+Math.imul(f,Z)|0)|0)+((8191&(r=(r=r+Math.imul(f,J)|0)+Math.imul(l,Z)|0))<<13)|0;d=((i=i+Math.imul(l,J)|0)+(r>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,a=Math.imul(R,G),r=(r=Math.imul(R,q))+Math.imul(A,G)|0,i=Math.imul(A,q),a=a+Math.imul(T,$)|0,r=(r=r+Math.imul(T,H)|0)+Math.imul(w,$)|0,i=i+Math.imul(w,H)|0,a=a+Math.imul(y,W)|0,r=(r=r+Math.imul(y,K)|0)+Math.imul(g,W)|0,i=i+Math.imul(g,K)|0,a=a+Math.imul(h,Z)|0,r=(r=r+Math.imul(h,J)|0)+Math.imul(m,Z)|0,i=i+Math.imul(m,J)|0;var Te=(d+(a=a+Math.imul(f,Q)|0)|0)+((8191&(r=(r=r+Math.imul(f,ee)|0)+Math.imul(l,Q)|0))<<13)|0;d=((i=i+Math.imul(l,ee)|0)+(r>>>13)|0)+(Te>>>26)|0,Te&=67108863,a=Math.imul(C,G),r=(r=Math.imul(C,q))+Math.imul(I,G)|0,i=Math.imul(I,q),a=a+Math.imul(R,$)|0,r=(r=r+Math.imul(R,H)|0)+Math.imul(A,$)|0,i=i+Math.imul(A,H)|0,a=a+Math.imul(T,W)|0,r=(r=r+Math.imul(T,K)|0)+Math.imul(w,W)|0,i=i+Math.imul(w,K)|0,a=a+Math.imul(y,Z)|0,r=(r=r+Math.imul(y,J)|0)+Math.imul(g,Z)|0,i=i+Math.imul(g,J)|0,a=a+Math.imul(h,Q)|0,r=(r=r+Math.imul(h,ee)|0)+Math.imul(m,Q)|0,i=i+Math.imul(m,ee)|0;var we=(d+(a=a+Math.imul(f,ne)|0)|0)+((8191&(r=(r=r+Math.imul(f,ae)|0)+Math.imul(l,ne)|0))<<13)|0;d=((i=i+Math.imul(l,ae)|0)+(r>>>13)|0)+(we>>>26)|0,we&=67108863,a=Math.imul(O,G),r=(r=Math.imul(O,q))+Math.imul(S,G)|0,i=Math.imul(S,q),a=a+Math.imul(C,$)|0,r=(r=r+Math.imul(C,H)|0)+Math.imul(I,$)|0,i=i+Math.imul(I,H)|0,a=a+Math.imul(R,W)|0,r=(r=r+Math.imul(R,K)|0)+Math.imul(A,W)|0,i=i+Math.imul(A,K)|0,a=a+Math.imul(T,Z)|0,r=(r=r+Math.imul(T,J)|0)+Math.imul(w,Z)|0,i=i+Math.imul(w,J)|0,a=a+Math.imul(y,Q)|0,r=(r=r+Math.imul(y,ee)|0)+Math.imul(g,Q)|0,i=i+Math.imul(g,ee)|0,a=a+Math.imul(h,ne)|0,r=(r=r+Math.imul(h,ae)|0)+Math.imul(m,ne)|0,i=i+Math.imul(m,ae)|0;var ve=(d+(a=a+Math.imul(f,ie)|0)|0)+((8191&(r=(r=r+Math.imul(f,se)|0)+Math.imul(l,ie)|0))<<13)|0;d=((i=i+Math.imul(l,se)|0)+(r>>>13)|0)+(ve>>>26)|0,ve&=67108863,a=Math.imul(k,G),r=(r=Math.imul(k,q))+Math.imul(P,G)|0,i=Math.imul(P,q),a=a+Math.imul(O,$)|0,r=(r=r+Math.imul(O,H)|0)+Math.imul(S,$)|0,i=i+Math.imul(S,H)|0,a=a+Math.imul(C,W)|0,r=(r=r+Math.imul(C,K)|0)+Math.imul(I,W)|0,i=i+Math.imul(I,K)|0,a=a+Math.imul(R,Z)|0,r=(r=r+Math.imul(R,J)|0)+Math.imul(A,Z)|0,i=i+Math.imul(A,J)|0,a=a+Math.imul(T,Q)|0,r=(r=r+Math.imul(T,ee)|0)+Math.imul(w,Q)|0,i=i+Math.imul(w,ee)|0,a=a+Math.imul(y,ne)|0,r=(r=r+Math.imul(y,ae)|0)+Math.imul(g,ne)|0,i=i+Math.imul(g,ae)|0,a=a+Math.imul(h,ie)|0,r=(r=r+Math.imul(h,se)|0)+Math.imul(m,ie)|0,i=i+Math.imul(m,se)|0;var Re=(d+(a=a+Math.imul(f,ce)|0)|0)+((8191&(r=(r=r+Math.imul(f,de)|0)+Math.imul(l,ce)|0))<<13)|0;d=((i=i+Math.imul(l,de)|0)+(r>>>13)|0)+(Re>>>26)|0,Re&=67108863,a=Math.imul(L,G),r=(r=Math.imul(L,q))+Math.imul(x,G)|0,i=Math.imul(x,q),a=a+Math.imul(k,$)|0,r=(r=r+Math.imul(k,H)|0)+Math.imul(P,$)|0,i=i+Math.imul(P,H)|0,a=a+Math.imul(O,W)|0,r=(r=r+Math.imul(O,K)|0)+Math.imul(S,W)|0,i=i+Math.imul(S,K)|0,a=a+Math.imul(C,Z)|0,r=(r=r+Math.imul(C,J)|0)+Math.imul(I,Z)|0,i=i+Math.imul(I,J)|0,a=a+Math.imul(R,Q)|0,r=(r=r+Math.imul(R,ee)|0)+Math.imul(A,Q)|0,i=i+Math.imul(A,ee)|0,a=a+Math.imul(T,ne)|0,r=(r=r+Math.imul(T,ae)|0)+Math.imul(w,ne)|0,i=i+Math.imul(w,ae)|0,a=a+Math.imul(y,ie)|0,r=(r=r+Math.imul(y,se)|0)+Math.imul(g,ie)|0,i=i+Math.imul(g,se)|0,a=a+Math.imul(h,ce)|0,r=(r=r+Math.imul(h,de)|0)+Math.imul(m,ce)|0,i=i+Math.imul(m,de)|0;var Ae=(d+(a=a+Math.imul(f,fe)|0)|0)+((8191&(r=(r=r+Math.imul(f,le)|0)+Math.imul(l,fe)|0))<<13)|0;d=((i=i+Math.imul(l,le)|0)+(r>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,a=Math.imul(U,G),r=(r=Math.imul(U,q))+Math.imul(B,G)|0,i=Math.imul(B,q),a=a+Math.imul(L,$)|0,r=(r=r+Math.imul(L,H)|0)+Math.imul(x,$)|0,i=i+Math.imul(x,H)|0,a=a+Math.imul(k,W)|0,r=(r=r+Math.imul(k,K)|0)+Math.imul(P,W)|0,i=i+Math.imul(P,K)|0,a=a+Math.imul(O,Z)|0,r=(r=r+Math.imul(O,J)|0)+Math.imul(S,Z)|0,i=i+Math.imul(S,J)|0,a=a+Math.imul(C,Q)|0,r=(r=r+Math.imul(C,ee)|0)+Math.imul(I,Q)|0,i=i+Math.imul(I,ee)|0,a=a+Math.imul(R,ne)|0,r=(r=r+Math.imul(R,ae)|0)+Math.imul(A,ne)|0,i=i+Math.imul(A,ae)|0,a=a+Math.imul(T,ie)|0,r=(r=r+Math.imul(T,se)|0)+Math.imul(w,ie)|0,i=i+Math.imul(w,se)|0,a=a+Math.imul(y,ce)|0,r=(r=r+Math.imul(y,de)|0)+Math.imul(g,ce)|0,i=i+Math.imul(g,de)|0,a=a+Math.imul(h,fe)|0,r=(r=r+Math.imul(h,le)|0)+Math.imul(m,fe)|0,i=i+Math.imul(m,le)|0;var _e=(d+(a=a+Math.imul(f,he)|0)|0)+((8191&(r=(r=r+Math.imul(f,me)|0)+Math.imul(l,he)|0))<<13)|0;d=((i=i+Math.imul(l,me)|0)+(r>>>13)|0)+(_e>>>26)|0,_e&=67108863,a=Math.imul(U,$),r=(r=Math.imul(U,H))+Math.imul(B,$)|0,i=Math.imul(B,H),a=a+Math.imul(L,W)|0,r=(r=r+Math.imul(L,K)|0)+Math.imul(x,W)|0,i=i+Math.imul(x,K)|0,a=a+Math.imul(k,Z)|0,r=(r=r+Math.imul(k,J)|0)+Math.imul(P,Z)|0,i=i+Math.imul(P,J)|0,a=a+Math.imul(O,Q)|0,r=(r=r+Math.imul(O,ee)|0)+Math.imul(S,Q)|0,i=i+Math.imul(S,ee)|0,a=a+Math.imul(C,ne)|0,r=(r=r+Math.imul(C,ae)|0)+Math.imul(I,ne)|0,i=i+Math.imul(I,ae)|0,a=a+Math.imul(R,ie)|0,r=(r=r+Math.imul(R,se)|0)+Math.imul(A,ie)|0,i=i+Math.imul(A,se)|0,a=a+Math.imul(T,ce)|0,r=(r=r+Math.imul(T,de)|0)+Math.imul(w,ce)|0,i=i+Math.imul(w,de)|0,a=a+Math.imul(y,fe)|0,r=(r=r+Math.imul(y,le)|0)+Math.imul(g,fe)|0,i=i+Math.imul(g,le)|0;var Ce=(d+(a=a+Math.imul(h,he)|0)|0)+((8191&(r=(r=r+Math.imul(h,me)|0)+Math.imul(m,he)|0))<<13)|0;d=((i=i+Math.imul(m,me)|0)+(r>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,a=Math.imul(U,W),r=(r=Math.imul(U,K))+Math.imul(B,W)|0,i=Math.imul(B,K),a=a+Math.imul(L,Z)|0,r=(r=r+Math.imul(L,J)|0)+Math.imul(x,Z)|0,i=i+Math.imul(x,J)|0,a=a+Math.imul(k,Q)|0,r=(r=r+Math.imul(k,ee)|0)+Math.imul(P,Q)|0,i=i+Math.imul(P,ee)|0,a=a+Math.imul(O,ne)|0,r=(r=r+Math.imul(O,ae)|0)+Math.imul(S,ne)|0,i=i+Math.imul(S,ae)|0,a=a+Math.imul(C,ie)|0,r=(r=r+Math.imul(C,se)|0)+Math.imul(I,ie)|0,i=i+Math.imul(I,se)|0,a=a+Math.imul(R,ce)|0,r=(r=r+Math.imul(R,de)|0)+Math.imul(A,ce)|0,i=i+Math.imul(A,de)|0,a=a+Math.imul(T,fe)|0,r=(r=r+Math.imul(T,le)|0)+Math.imul(w,fe)|0,i=i+Math.imul(w,le)|0;var Ie=(d+(a=a+Math.imul(y,he)|0)|0)+((8191&(r=(r=r+Math.imul(y,me)|0)+Math.imul(g,he)|0))<<13)|0;d=((i=i+Math.imul(g,me)|0)+(r>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,a=Math.imul(U,Z),r=(r=Math.imul(U,J))+Math.imul(B,Z)|0,i=Math.imul(B,J),a=a+Math.imul(L,Q)|0,r=(r=r+Math.imul(L,ee)|0)+Math.imul(x,Q)|0,i=i+Math.imul(x,ee)|0,a=a+Math.imul(k,ne)|0,r=(r=r+Math.imul(k,ae)|0)+Math.imul(P,ne)|0,i=i+Math.imul(P,ae)|0,a=a+Math.imul(O,ie)|0,r=(r=r+Math.imul(O,se)|0)+Math.imul(S,ie)|0,i=i+Math.imul(S,se)|0,a=a+Math.imul(C,ce)|0,r=(r=r+Math.imul(C,de)|0)+Math.imul(I,ce)|0,i=i+Math.imul(I,de)|0,a=a+Math.imul(R,fe)|0,r=(r=r+Math.imul(R,le)|0)+Math.imul(A,fe)|0,i=i+Math.imul(A,le)|0;var Ne=(d+(a=a+Math.imul(T,he)|0)|0)+((8191&(r=(r=r+Math.imul(T,me)|0)+Math.imul(w,he)|0))<<13)|0;d=((i=i+Math.imul(w,me)|0)+(r>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,a=Math.imul(U,Q),r=(r=Math.imul(U,ee))+Math.imul(B,Q)|0,i=Math.imul(B,ee),a=a+Math.imul(L,ne)|0,r=(r=r+Math.imul(L,ae)|0)+Math.imul(x,ne)|0,i=i+Math.imul(x,ae)|0,a=a+Math.imul(k,ie)|0,r=(r=r+Math.imul(k,se)|0)+Math.imul(P,ie)|0,i=i+Math.imul(P,se)|0,a=a+Math.imul(O,ce)|0,r=(r=r+Math.imul(O,de)|0)+Math.imul(S,ce)|0,i=i+Math.imul(S,de)|0,a=a+Math.imul(C,fe)|0,r=(r=r+Math.imul(C,le)|0)+Math.imul(I,fe)|0,i=i+Math.imul(I,le)|0;var Oe=(d+(a=a+Math.imul(R,he)|0)|0)+((8191&(r=(r=r+Math.imul(R,me)|0)+Math.imul(A,he)|0))<<13)|0;d=((i=i+Math.imul(A,me)|0)+(r>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,a=Math.imul(U,ne),r=(r=Math.imul(U,ae))+Math.imul(B,ne)|0,i=Math.imul(B,ae),a=a+Math.imul(L,ie)|0,r=(r=r+Math.imul(L,se)|0)+Math.imul(x,ie)|0,i=i+Math.imul(x,se)|0,a=a+Math.imul(k,ce)|0,r=(r=r+Math.imul(k,de)|0)+Math.imul(P,ce)|0,i=i+Math.imul(P,de)|0,a=a+Math.imul(O,fe)|0,r=(r=r+Math.imul(O,le)|0)+Math.imul(S,fe)|0,i=i+Math.imul(S,le)|0;var Se=(d+(a=a+Math.imul(C,he)|0)|0)+((8191&(r=(r=r+Math.imul(C,me)|0)+Math.imul(I,he)|0))<<13)|0;d=((i=i+Math.imul(I,me)|0)+(r>>>13)|0)+(Se>>>26)|0,Se&=67108863,a=Math.imul(U,ie),r=(r=Math.imul(U,se))+Math.imul(B,ie)|0,i=Math.imul(B,se),a=a+Math.imul(L,ce)|0,r=(r=r+Math.imul(L,de)|0)+Math.imul(x,ce)|0,i=i+Math.imul(x,de)|0,a=a+Math.imul(k,fe)|0,r=(r=r+Math.imul(k,le)|0)+Math.imul(P,fe)|0,i=i+Math.imul(P,le)|0;var Me=(d+(a=a+Math.imul(O,he)|0)|0)+((8191&(r=(r=r+Math.imul(O,me)|0)+Math.imul(S,he)|0))<<13)|0;d=((i=i+Math.imul(S,me)|0)+(r>>>13)|0)+(Me>>>26)|0,Me&=67108863,a=Math.imul(U,ce),r=(r=Math.imul(U,de))+Math.imul(B,ce)|0,i=Math.imul(B,de),a=a+Math.imul(L,fe)|0,r=(r=r+Math.imul(L,le)|0)+Math.imul(x,fe)|0,i=i+Math.imul(x,le)|0;var ke=(d+(a=a+Math.imul(k,he)|0)|0)+((8191&(r=(r=r+Math.imul(k,me)|0)+Math.imul(P,he)|0))<<13)|0;d=((i=i+Math.imul(P,me)|0)+(r>>>13)|0)+(ke>>>26)|0,ke&=67108863,a=Math.imul(U,fe),r=(r=Math.imul(U,le))+Math.imul(B,fe)|0,i=Math.imul(B,le);var Pe=(d+(a=a+Math.imul(L,he)|0)|0)+((8191&(r=(r=r+Math.imul(L,me)|0)+Math.imul(x,he)|0))<<13)|0;d=((i=i+Math.imul(x,me)|0)+(r>>>13)|0)+(Pe>>>26)|0,Pe&=67108863;var De=(d+(a=Math.imul(U,he))|0)+((8191&(r=(r=Math.imul(U,me))+Math.imul(B,he)|0))<<13)|0;return d=((i=Math.imul(B,me))+(r>>>13)|0)+(De>>>26)|0,De&=67108863,c[0]=be,c[1]=ye,c[2]=ge,c[3]=Ee,c[4]=Te,c[5]=we,c[6]=ve,c[7]=Re,c[8]=Ae,c[9]=_e,c[10]=Ce,c[11]=Ie,c[12]=Ne,c[13]=Oe,c[14]=Se,c[15]=Me,c[16]=ke,c[17]=Pe,c[18]=De,0!==d&&(c[19]=d,n.length++),n};function b(e,t,n){n.negative=t.negative^e.negative,n.length=e.length+t.length;for(var a=0,r=0,i=0;i<n.length-1;i++){var s=r;r=0;for(var o=67108863&a,c=Math.min(i,t.length-1),d=Math.max(0,i-e.length+1);d<=c;d++){var u=i-d,f=(0|e.words[u])*(0|t.words[d]),l=67108863&f;o=67108863&(l=l+o|0),r+=(s=(s=s+(f/67108864|0)|0)+(l>>>26)|0)>>>26,s&=67108863}n.words[i]=o,a=s,s=r}return 0!==a?n.words[i]=a:n.length--,n._strip()}function y(e,t,n){return b(e,t,n)}Math.imul||(m=h),r.prototype.mulTo=function(e,t){var n=this.length+e.length;return 10===this.length&&10===e.length?m(this,e,t):n<63?h(this,e,t):n<1024?b(this,e,t):y(this,e,t)},r.prototype.mul=function(e){var t=new r(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},r.prototype.mulf=function(e){var t=new r(null);return t.words=new Array(this.length+e.length),y(this,e,t)},r.prototype.imul=function(e){return this.clone().mulTo(e,this)},r.prototype.imuln=function(e){var t=e<0;t&&(e=-e),n("number"==typeof e),n(e<67108864);for(var a=0,r=0;r<this.length;r++){var i=(0|this.words[r])*e,s=(67108863&i)+(67108863&a);a>>=26,a+=i/67108864|0,a+=s>>>26,this.words[r]=67108863&s}return 0!==a&&(this.words[r]=a,this.length++),t?this.ineg():this},r.prototype.muln=function(e){return this.clone().imuln(e)},r.prototype.sqr=function(){return this.mul(this)},r.prototype.isqr=function(){return this.imul(this.clone())},r.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),n=0;n<t.length;n++){var a=n/26|0,r=n%26;t[n]=e.words[a]>>>r&1}return t}(e);if(0===t.length)return new r(1);for(var n=this,a=0;a<t.length&&0===t[a];a++,n=n.sqr());if(++a<t.length)for(var i=n.sqr();a<t.length;a++,i=i.sqr())0!==t[a]&&(n=n.mul(i));return n},r.prototype.iushln=function(e){n("number"==typeof e&&e>=0);var t,a=e%26,r=(e-a)/26,i=67108863>>>26-a<<26-a;if(0!==a){var s=0;for(t=0;t<this.length;t++){var o=this.words[t]&i,c=(0|this.words[t])-o<<a;this.words[t]=c|s,s=o>>>26-a}s&&(this.words[t]=s,this.length++)}if(0!==r){for(t=this.length-1;t>=0;t--)this.words[t+r]=this.words[t];for(t=0;t<r;t++)this.words[t]=0;this.length+=r}return this._strip()},r.prototype.ishln=function(e){return n(0===this.negative),this.iushln(e)},r.prototype.iushrn=function(e,t,a){var r;n("number"==typeof e&&e>=0),r=t?(t-t%26)/26:0;var i=e%26,s=Math.min((e-i)/26,this.length),o=67108863^67108863>>>i<<i,c=a;if(r-=s,r=Math.max(0,r),c){for(var d=0;d<s;d++)c.words[d]=this.words[d];c.length=s}if(0===s);else if(this.length>s)for(this.length-=s,d=0;d<this.length;d++)this.words[d]=this.words[d+s];else this.words[0]=0,this.length=1;var u=0;for(d=this.length-1;d>=0&&(0!==u||d>=r);d--){var f=0|this.words[d];this.words[d]=u<<26-i|f>>>i,u=f&o}return c&&0!==u&&(c.words[c.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this._strip()},r.prototype.ishrn=function(e,t,a){return n(0===this.negative),this.iushrn(e,t,a)},r.prototype.shln=function(e){return this.clone().ishln(e)},r.prototype.ushln=function(e){return this.clone().iushln(e)},r.prototype.shrn=function(e){return this.clone().ishrn(e)},r.prototype.ushrn=function(e){return this.clone().iushrn(e)},r.prototype.testn=function(e){n("number"==typeof e&&e>=0);var t=e%26,a=(e-t)/26,r=1<<t;return!(this.length<=a||!(this.words[a]&r))},r.prototype.imaskn=function(e){n("number"==typeof e&&e>=0);var t=e%26,a=(e-t)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=a)return this;if(0!==t&&a++,this.length=Math.min(a,this.length),0!==t){var r=67108863^67108863>>>t<<t;this.words[this.length-1]&=r}return this._strip()},r.prototype.maskn=function(e){return this.clone().imaskn(e)},r.prototype.iaddn=function(e){return n("number"==typeof e),n(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<=e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},r.prototype._iaddn=function(e){this.words[0]+=e;for(var t=0;t<this.length&&this.words[t]>=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},r.prototype.isubn=function(e){if(n("number"==typeof e),n(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this._strip()},r.prototype.addn=function(e){return this.clone().iaddn(e)},r.prototype.subn=function(e){return this.clone().isubn(e)},r.prototype.iabs=function(){return this.negative=0,this},r.prototype.abs=function(){return this.clone().iabs()},r.prototype._ishlnsubmul=function(e,t,a){var r,i,s=e.length+a;this._expand(s);var o=0;for(r=0;r<e.length;r++){i=(0|this.words[r+a])+o;var c=(0|e.words[r])*t;o=((i-=67108863&c)>>26)-(c/67108864|0),this.words[r+a]=67108863&i}for(;r<this.length-a;r++)o=(i=(0|this.words[r+a])+o)>>26,this.words[r+a]=67108863&i;if(0===o)return this._strip();for(n(-1===o),o=0,r=0;r<this.length;r++)o=(i=-(0|this.words[r])+o)>>26,this.words[r]=67108863&i;return this.negative=1,this._strip()},r.prototype._wordDiv=function(e,t){var n=(this.length,e.length),a=this.clone(),i=e,s=0|i.words[i.length-1];0!=(n=26-this._countBits(s))&&(i=i.ushln(n),a.iushln(n),s=0|i.words[i.length-1]);var o,c=a.length-i.length;if("mod"!==t){(o=new r(null)).length=c+1,o.words=new Array(o.length);for(var d=0;d<o.length;d++)o.words[d]=0}var u=a.clone()._ishlnsubmul(i,1,c);0===u.negative&&(a=u,o&&(o.words[c]=1));for(var f=c-1;f>=0;f--){var l=67108864*(0|a.words[i.length+f])+(0|a.words[i.length+f-1]);for(l=Math.min(l/s|0,67108863),a._ishlnsubmul(i,l,f);0!==a.negative;)l--,a.negative=0,a._ishlnsubmul(i,1,f),a.isZero()||(a.negative^=1);o&&(o.words[f]=l)}return o&&o._strip(),a._strip(),"div"!==t&&0!==n&&a.iushrn(n),{div:o||null,mod:a}},r.prototype.divmod=function(e,t,a){return n(!e.isZero()),this.isZero()?{div:new r(0),mod:new r(0)}:0!==this.negative&&0===e.negative?(o=this.neg().divmod(e,t),"mod"!==t&&(i=o.div.neg()),"div"!==t&&(s=o.mod.neg(),a&&0!==s.negative&&s.iadd(e)),{div:i,mod:s}):0===this.negative&&0!==e.negative?(o=this.divmod(e.neg(),t),"mod"!==t&&(i=o.div.neg()),{div:i,mod:o.mod}):0!=(this.negative&e.negative)?(o=this.neg().divmod(e.neg(),t),"div"!==t&&(s=o.mod.neg(),a&&0!==s.negative&&s.isub(e)),{div:o.div,mod:s}):e.length>this.length||this.cmp(e)<0?{div:new r(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new r(this.modrn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new r(this.modrn(e.words[0]))}:this._wordDiv(e,t);var i,s,o},r.prototype.div=function(e){return this.divmod(e,"div",!1).div},r.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},r.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},r.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var n=0!==t.div.negative?t.mod.isub(e):t.mod,a=e.ushrn(1),r=e.andln(1),i=n.cmp(a);return i<0||1===r&&0===i?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},r.prototype.modrn=function(e){var t=e<0;t&&(e=-e),n(e<=67108863);for(var a=(1<<26)%e,r=0,i=this.length-1;i>=0;i--)r=(a*r+(0|this.words[i]))%e;return t?-r:r},r.prototype.modn=function(e){return this.modrn(e)},r.prototype.idivn=function(e){var t=e<0;t&&(e=-e),n(e<=67108863);for(var a=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*a;this.words[r]=i/e|0,a=i%e}return this._strip(),t?this.ineg():this},r.prototype.divn=function(e){return this.clone().idivn(e)},r.prototype.egcd=function(e){n(0===e.negative),n(!e.isZero());var t=this,a=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i=new r(1),s=new r(0),o=new r(0),c=new r(1),d=0;t.isEven()&&a.isEven();)t.iushrn(1),a.iushrn(1),++d;for(var u=a.clone(),f=t.clone();!t.isZero();){for(var l=0,p=1;0==(t.words[0]&p)&&l<26;++l,p<<=1);if(l>0)for(t.iushrn(l);l-- >0;)(i.isOdd()||s.isOdd())&&(i.iadd(u),s.isub(f)),i.iushrn(1),s.iushrn(1);for(var h=0,m=1;0==(a.words[0]&m)&&h<26;++h,m<<=1);if(h>0)for(a.iushrn(h);h-- >0;)(o.isOdd()||c.isOdd())&&(o.iadd(u),c.isub(f)),o.iushrn(1),c.iushrn(1);t.cmp(a)>=0?(t.isub(a),i.isub(o),s.isub(c)):(a.isub(t),o.isub(i),c.isub(s))}return{a:o,b:c,gcd:a.iushln(d)}},r.prototype._invmp=function(e){n(0===e.negative),n(!e.isZero());var t=this,a=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i,s=new r(1),o=new r(0),c=a.clone();t.cmpn(1)>0&&a.cmpn(1)>0;){for(var d=0,u=1;0==(t.words[0]&u)&&d<26;++d,u<<=1);if(d>0)for(t.iushrn(d);d-- >0;)s.isOdd()&&s.iadd(c),s.iushrn(1);for(var f=0,l=1;0==(a.words[0]&l)&&f<26;++f,l<<=1);if(f>0)for(a.iushrn(f);f-- >0;)o.isOdd()&&o.iadd(c),o.iushrn(1);t.cmp(a)>=0?(t.isub(a),s.isub(o)):(a.isub(t),o.isub(s))}return(i=0===t.cmpn(1)?s:o).cmpn(0)<0&&i.iadd(e),i},r.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),n=e.clone();t.negative=0,n.negative=0;for(var a=0;t.isEven()&&n.isEven();a++)t.iushrn(1),n.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;n.isEven();)n.iushrn(1);var r=t.cmp(n);if(r<0){var i=t;t=n,n=i}else if(0===r||0===n.cmpn(1))break;t.isub(n)}return n.iushln(a)},r.prototype.invm=function(e){return this.egcd(e).a.umod(e)},r.prototype.isEven=function(){return 0==(1&this.words[0])},r.prototype.isOdd=function(){return 1==(1&this.words[0])},r.prototype.andln=function(e){return this.words[0]&e},r.prototype.bincn=function(e){n("number"==typeof e);var t=e%26,a=(e-t)/26,r=1<<t;if(this.length<=a)return this._expand(a+1),this.words[a]|=r,this;for(var i=r,s=a;0!==i&&s<this.length;s++){var o=0|this.words[s];i=(o+=i)>>>26,o&=67108863,this.words[s]=o}return 0!==i&&(this.words[s]=i,this.length++),this},r.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},r.prototype.cmpn=function(e){var t,a=e<0;if(0!==this.negative&&!a)return-1;if(0===this.negative&&a)return 1;if(this._strip(),this.length>1)t=1;else{a&&(e=-e),n(e<=67108863,"Number is too big");var r=0|this.words[0];t=r===e?0:r<e?-1:1}return 0!==this.negative?0|-t:t},r.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},r.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var t=0,n=this.length-1;n>=0;n--){var a=0|this.words[n],r=0|e.words[n];if(a!==r){a<r?t=-1:a>r&&(t=1);break}}return t},r.prototype.gtn=function(e){return 1===this.cmpn(e)},r.prototype.gt=function(e){return 1===this.cmp(e)},r.prototype.gten=function(e){return this.cmpn(e)>=0},r.prototype.gte=function(e){return this.cmp(e)>=0},r.prototype.ltn=function(e){return-1===this.cmpn(e)},r.prototype.lt=function(e){return-1===this.cmp(e)},r.prototype.lten=function(e){return this.cmpn(e)<=0},r.prototype.lte=function(e){return this.cmp(e)<=0},r.prototype.eqn=function(e){return 0===this.cmpn(e)},r.prototype.eq=function(e){return 0===this.cmp(e)},r.red=function(e){return new A(e)},r.prototype.toRed=function(e){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},r.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},r.prototype._forceRed=function(e){return this.red=e,this},r.prototype.forceRed=function(e){return n(!this.red,"Already a number in reduction context"),this._forceRed(e)},r.prototype.redAdd=function(e){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},r.prototype.redIAdd=function(e){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},r.prototype.redSub=function(e){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},r.prototype.redISub=function(e){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},r.prototype.redShl=function(e){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},r.prototype.redMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},r.prototype.redIMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},r.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},r.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},r.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},r.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},r.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},r.prototype.redPow=function(e){return n(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function E(e,t){this.name=e,this.p=new r(t,16),this.n=this.p.bitLength(),this.k=new r(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function T(){E.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function w(){E.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function v(){E.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function R(){E.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function A(e){if("string"==typeof e){var t=r._prime(e);this.m=t.p,this.prime=t}else n(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function _(e){A.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new r(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)}E.prototype._tmp=function(){var e=new r(null);return e.words=new Array(Math.ceil(this.n/13)),e},E.prototype.ireduce=function(e){var t,n=e;do{this.split(n,this.tmp),t=(n=(n=this.imulK(n)).iadd(this.tmp)).bitLength()}while(t>this.n);var a=t<this.n?-1:n.ucmp(this.p);return 0===a?(n.words[0]=0,n.length=1):a>0?n.isub(this.p):void 0!==n.strip?n.strip():n._strip(),n},E.prototype.split=function(e,t){e.iushrn(this.n,0,t)},E.prototype.imulK=function(e){return e.imul(this.k)},a(T,E),T.prototype.split=function(e,t){for(var n=4194303,a=Math.min(e.length,9),r=0;r<a;r++)t.words[r]=e.words[r];if(t.length=a,e.length<=9)return e.words[0]=0,void(e.length=1);var i=e.words[9];for(t.words[t.length++]=i&n,r=10;r<e.length;r++){var s=0|e.words[r];e.words[r-10]=(s&n)<<4|i>>>22,i=s}i>>>=22,e.words[r-10]=i,0===i&&e.length>10?e.length-=10:e.length-=9},T.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,n=0;n<e.length;n++){var a=0|e.words[n];t+=977*a,e.words[n]=67108863&t,t=64*a+(t/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},a(w,E),a(v,E),a(R,E),R.prototype.imulK=function(e){for(var t=0,n=0;n<e.length;n++){var a=19*(0|e.words[n])+t,r=67108863&a;a>>>=26,e.words[n]=r,t=a}return 0!==t&&(e.words[e.length++]=t),e},r._prime=function(e){if(g[e])return g[e];var t;if("k256"===e)t=new T;else if("p224"===e)t=new w;else if("p192"===e)t=new v;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new R}return g[e]=t,t},A.prototype._verify1=function(e){n(0===e.negative,"red works only with positives"),n(e.red,"red works only with red numbers")},A.prototype._verify2=function(e,t){n(0==(e.negative|t.negative),"red works only with positives"),n(e.red&&e.red===t.red,"red works only with red numbers")},A.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):(d(e,e.umod(this.m)._forceRed(this)),e)},A.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},A.prototype.add=function(e,t){this._verify2(e,t);var n=e.add(t);return n.cmp(this.m)>=0&&n.isub(this.m),n._forceRed(this)},A.prototype.iadd=function(e,t){this._verify2(e,t);var n=e.iadd(t);return n.cmp(this.m)>=0&&n.isub(this.m),n},A.prototype.sub=function(e,t){this._verify2(e,t);var n=e.sub(t);return n.cmpn(0)<0&&n.iadd(this.m),n._forceRed(this)},A.prototype.isub=function(e,t){this._verify2(e,t);var n=e.isub(t);return n.cmpn(0)<0&&n.iadd(this.m),n},A.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},A.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},A.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},A.prototype.isqr=function(e){return this.imul(e,e.clone())},A.prototype.sqr=function(e){return this.mul(e,e)},A.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(n(t%2==1),3===t){var a=this.m.add(new r(1)).iushrn(2);return this.pow(e,a)}for(var i=this.m.subn(1),s=0;!i.isZero()&&0===i.andln(1);)s++,i.iushrn(1);n(!i.isZero());var o=new r(1).toRed(this),c=o.redNeg(),d=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new r(2*u*u).toRed(this);0!==this.pow(u,d).cmp(c);)u.redIAdd(c);for(var f=this.pow(u,i),l=this.pow(e,i.addn(1).iushrn(1)),p=this.pow(e,i),h=s;0!==p.cmp(o);){for(var m=p,b=0;0!==m.cmp(o);b++)m=m.redSqr();n(b<h);var y=this.pow(f,new r(1).iushln(h-b-1));l=l.redMul(y),f=y.redSqr(),p=p.redMul(f),h=b}return l},A.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},A.prototype.pow=function(e,t){if(t.isZero())return new r(1).toRed(this);if(0===t.cmpn(1))return e.clone();var n=new Array(16);n[0]=new r(1).toRed(this),n[1]=e;for(var a=2;a<n.length;a++)n[a]=this.mul(n[a-1],e);var i=n[0],s=0,o=0,c=t.bitLength()%26;for(0===c&&(c=26),a=t.length-1;a>=0;a--){for(var d=t.words[a],u=c-1;u>=0;u--){var f=d>>u&1;i!==n[0]&&(i=this.sqr(i)),0!==f||0!==s?(s<<=1,s|=f,(4==++o||0===a&&0===u)&&(i=this.mul(i,n[s]),o=0,s=0)):o=0}c=26}return i},A.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},A.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},r.mont=function(e){return new _(e)},a(_,A),_.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},_.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},_.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var n=e.imul(t),a=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=n.isub(a).iushrn(this.shift),i=r;return r.cmp(this.m)>=0?i=r.isub(this.m):r.cmpn(0)<0&&(i=r.iadd(this.m)),i._forceRed(this)},_.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new r(0)._forceRed(this);var n=e.mul(t),a=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=n.isub(a).iushrn(this.shift),s=i;return i.cmp(this.m)>=0?s=i.isub(this.m):i.cmpn(0)<0&&(s=i.iadd(this.m)),s._forceRed(this)},_.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(U,x);var B=F(U.exports);let V=!1,G=!1;const q={debug:1,default:2,info:2,warning:3,error:4,off:5};let j=q.default,$=null;const H=function(){try{const e=[];if(["NFD","NFC","NFKD","NFKC"].forEach((t=>{try{if("test"!=="test".normalize(t))throw new Error("bad normalize")}catch(n){e.push(t)}})),e.length)throw new Error("missing "+e.join(", "));if(String.fromCharCode(233).normalize("NFD")!==String.fromCharCode(101,769))throw new Error("broken implementation")}catch(e){return e.message}return null}();var z,W;!function(e){e.DEBUG="DEBUG",e.INFO="INFO",e.WARNING="WARNING",e.ERROR="ERROR",e.OFF="OFF"}(z||(z={})),function(e){e.UNKNOWN_ERROR="UNKNOWN_ERROR",e.NOT_IMPLEMENTED="NOT_IMPLEMENTED",e.UNSUPPORTED_OPERATION="UNSUPPORTED_OPERATION",e.NETWORK_ERROR="NETWORK_ERROR",e.SERVER_ERROR="SERVER_ERROR",e.TIMEOUT="TIMEOUT",e.BUFFER_OVERRUN="BUFFER_OVERRUN",e.NUMERIC_FAULT="NUMERIC_FAULT",e.MISSING_NEW="MISSING_NEW",e.INVALID_ARGUMENT="INVALID_ARGUMENT",e.MISSING_ARGUMENT="MISSING_ARGUMENT",e.UNEXPECTED_ARGUMENT="UNEXPECTED_ARGUMENT",e.CALL_EXCEPTION="CALL_EXCEPTION",e.INSUFFICIENT_FUNDS="INSUFFICIENT_FUNDS",e.NONCE_EXPIRED="NONCE_EXPIRED",e.REPLACEMENT_UNDERPRICED="REPLACEMENT_UNDERPRICED",e.UNPREDICTABLE_GAS_LIMIT="UNPREDICTABLE_GAS_LIMIT",e.TRANSACTION_REPLACED="TRANSACTION_REPLACED",e.ACTION_REJECTED="ACTION_REJECTED"}(W||(W={}));const K="0123456789abcdef";class X{constructor(e){Object.defineProperty(this,"version",{enumerable:!0,value:e,writable:!1})}_log(e,t){const n=e.toLowerCase();null==q[n]&&this.throwArgumentError("invalid log level name","logLevel",e),j>q[n]||console.log.apply(console,t)}debug(...e){this._log(X.levels.DEBUG,e)}info(...e){this._log(X.levels.INFO,e)}warn(...e){this._log(X.levels.WARNING,e)}makeError(e,t,n){if(G)return this.makeError("censored error",t,{});t||(t=X.errors.UNKNOWN_ERROR),n||(n={});const a=[];Object.keys(n).forEach((e=>{const t=n[e];try{if(t instanceof Uint8Array){let n="";for(let e=0;e<t.length;e++)n+=K[t[e]>>4],n+=K[15&t[e]];a.push(e+"=Uint8Array(0x"+n+")")}else a.push(e+"="+JSON.stringify(t))}catch(t){a.push(e+"="+JSON.stringify(n[e].toString()))}})),a.push(`code=${t}`),a.push(`version=${this.version}`);const r=e;let i="";switch(t){case W.NUMERIC_FAULT:{i="NUMERIC_FAULT";const t=e;switch(t){case"overflow":case"underflow":case"division-by-zero":i+="-"+t;break;case"negative-power":case"negative-width":i+="-unsupported";break;case"unbound-bitwise-result":i+="-unbound-result"}break}case W.CALL_EXCEPTION:case W.INSUFFICIENT_FUNDS:case W.MISSING_NEW:case W.NONCE_EXPIRED:case W.REPLACEMENT_UNDERPRICED:case W.TRANSACTION_REPLACED:case W.UNPREDICTABLE_GAS_LIMIT:i=t}i&&(e+=" [ See: https://links.ethers.org/v5-errors-"+i+" ]"),a.length&&(e+=" ("+a.join(", ")+")");const s=new Error(e);return s.reason=r,s.code=t,Object.keys(n).forEach((function(e){s[e]=n[e]})),s}throwError(e,t,n){throw this.makeError(e,t,n)}throwArgumentError(e,t,n){return this.throwError(e,X.errors.INVALID_ARGUMENT,{argument:t,value:n})}assert(e,t,n,a){e||this.throwError(t,n,a)}assertArgument(e,t,n,a){e||this.throwArgumentError(t,n,a)}checkNormalize(e){H&&this.throwError("platform missing String.prototype.normalize",X.errors.UNSUPPORTED_OPERATION,{operation:"String.prototype.normalize",form:H})}checkSafeUint53(e,t){"number"==typeof e&&(null==t&&(t="value not safe"),(e<0||e>=9007199254740991)&&this.throwError(t,X.errors.NUMERIC_FAULT,{operation:"checkSafeInteger",fault:"out-of-safe-range",value:e}),e%1&&this.throwError(t,X.errors.NUMERIC_FAULT,{operation:"checkSafeInteger",fault:"non-integer",value:e}))}checkArgumentCount(e,t,n){n=n?": "+n:"",e<t&&this.throwError("missing argument"+n,X.errors.MISSING_ARGUMENT,{count:e,expectedCount:t}),e>t&&this.throwError("too many arguments"+n,X.errors.UNEXPECTED_ARGUMENT,{count:e,expectedCount:t})}checkNew(e,t){e!==Object&&null!=e||this.throwError("missing new",X.errors.MISSING_NEW,{name:t.name})}checkAbstract(e,t){e===t?this.throwError("cannot instantiate abstract class "+JSON.stringify(t.name)+" directly; use a sub-class",X.errors.UNSUPPORTED_OPERATION,{name:e.name,operation:"new"}):e!==Object&&null!=e||this.throwError("missing new",X.errors.MISSING_NEW,{name:t.name})}static globalLogger(){return $||($=new X("logger/5.7.0")),$}static setCensorship(e,t){if(!e&&t&&this.globalLogger().throwError("cannot permanently disable censorship",X.errors.UNSUPPORTED_OPERATION,{operation:"setCensorship"}),V){if(!e)return;this.globalLogger().throwError("error censorship permanent",X.errors.UNSUPPORTED_OPERATION,{operation:"setCensorship"})}G=!!e,V=!!t}static setLogLevel(e){const t=q[e.toLowerCase()];null!=t?j=t:X.globalLogger().warn("invalid log level - "+e)}static from(e){return new X(e)}}X.errors=W,X.levels=z;const Z=new X("bytes/5.7.0");function J(e){return!!e.toHexString}function Y(e){return e.slice||(e.slice=function(){const t=Array.prototype.slice.call(arguments);return Y(new Uint8Array(Array.prototype.slice.apply(e,t)))}),e}function Q(e){return"number"==typeof e&&e==e&&e%1==0}function ee(e){if(null==e)return!1;if(e.constructor===Uint8Array)return!0;if("string"==typeof e)return!1;if(!Q(e.length)||e.length<0)return!1;for(let t=0;t<e.length;t++){const n=e[t];if(!Q(n)||n<0||n>=256)return!1}return!0}function te(e,t){if(t||(t={}),"number"==typeof e){Z.checkSafeUint53(e,"invalid arrayify value");const t=[];for(;e;)t.unshift(255&e),e=parseInt(String(e/256));return 0===t.length&&t.push(0),Y(new Uint8Array(t))}if(t.allowMissingPrefix&&"string"==typeof e&&"0x"!==e.substring(0,2)&&(e="0x"+e),J(e)&&(e=e.toHexString()),ae(e)){let n=e.substring(2);n.length%2&&("left"===t.hexPad?n="0"+n:"right"===t.hexPad?n+="0":Z.throwArgumentError("hex data is odd-length","value",e));const a=[];for(let e=0;e<n.length;e+=2)a.push(parseInt(n.substring(e,e+2),16));return Y(new Uint8Array(a))}return ee(e)?Y(new Uint8Array(e)):Z.throwArgumentError("invalid arrayify value","value",e)}function ne(e){const t=e.map((e=>te(e))),n=t.reduce(((e,t)=>e+t.length),0),a=new Uint8Array(n);return t.reduce(((e,t)=>(a.set(t,e),e+t.length)),0),Y(a)}function ae(e,t){return!("string"!=typeof e||!e.match(/^0x[0-9A-Fa-f]*$/))&&(!t||e.length===2+2*t)}const re="0123456789abcdef";function ie(e,t){if(t||(t={}),"number"==typeof e){Z.checkSafeUint53(e,"invalid hexlify value");let t="";for(;e;)t=re[15&e]+t,e=Math.floor(e/16);return t.length?(t.length%2&&(t="0"+t),"0x"+t):"0x00"}if("bigint"==typeof e)return(e=e.toString(16)).length%2?"0x0"+e:"0x"+e;if(t.allowMissingPrefix&&"string"==typeof e&&"0x"!==e.substring(0,2)&&(e="0x"+e),J(e))return e.toHexString();if(ae(e))return e.length%2&&("left"===t.hexPad?e="0x0"+e.substring(2):"right"===t.hexPad?e+="0":Z.throwArgumentError("hex data is odd-length","value",e)),e.toLowerCase();if(ee(e)){let t="0x";for(let n=0;n<e.length;n++){let a=e[n];t+=re[(240&a)>>4]+re[15&a]}return t}return Z.throwArgumentError("invalid hexlify value","value",e)}function se(e,t,n){return"string"!=typeof e?e=ie(e):(!ae(e)||e.length%2)&&Z.throwArgumentError("invalid hexData","value",e),t=2+2*t,null!=n?"0x"+e.substring(t,2+2*n):"0x"+e.substring(t)}function oe(e,t){for("string"!=typeof e?e=ie(e):ae(e)||Z.throwArgumentError("invalid hex string","value",e),e.length>2*t+2&&Z.throwArgumentError("value out of range","value",arguments[1]);e.length<2*t+2;)e="0x0"+e.substring(2);return e}var ce=B.BN;const de=new X("bignumber/5.7.0"),ue={},fe=9007199254740991;let le=!1;class pe{constructor(e,t){e!==ue&&de.throwError("cannot call constructor directly; use BigNumber.from",X.errors.UNSUPPORTED_OPERATION,{operation:"new (BigNumber)"}),this._hex=t,this._isBigNumber=!0,Object.freeze(this)}fromTwos(e){return me(be(this).fromTwos(e))}toTwos(e){return me(be(this).toTwos(e))}abs(){return"-"===this._hex[0]?pe.from(this._hex.substring(1)):this}add(e){return me(be(this).add(be(e)))}sub(e){return me(be(this).sub(be(e)))}div(e){return pe.from(e).isZero()&&ye("division-by-zero","div"),me(be(this).div(be(e)))}mul(e){return me(be(this).mul(be(e)))}mod(e){const t=be(e);return t.isNeg()&&ye("division-by-zero","mod"),me(be(this).umod(t))}pow(e){const t=be(e);return t.isNeg()&&ye("negative-power","pow"),me(be(this).pow(t))}and(e){const t=be(e);return(this.isNegative()||t.isNeg())&&ye("unbound-bitwise-result","and"),me(be(this).and(t))}or(e){const t=be(e);return(this.isNegative()||t.isNeg())&&ye("unbound-bitwise-result","or"),me(be(this).or(t))}xor(e){const t=be(e);return(this.isNegative()||t.isNeg())&&ye("unbound-bitwise-result","xor"),me(be(this).xor(t))}mask(e){return(this.isNegative()||e<0)&&ye("negative-width","mask"),me(be(this).maskn(e))}shl(e){return(this.isNegative()||e<0)&&ye("negative-width","shl"),me(be(this).shln(e))}shr(e){return(this.isNegative()||e<0)&&ye("negative-width","shr"),me(be(this).shrn(e))}eq(e){return be(this).eq(be(e))}lt(e){return be(this).lt(be(e))}lte(e){return be(this).lte(be(e))}gt(e){return be(this).gt(be(e))}gte(e){return be(this).gte(be(e))}isNegative(){return"-"===this._hex[0]}isZero(){return be(this).isZero()}toNumber(){try{return be(this).toNumber()}catch(e){ye("overflow","toNumber",this.toString())}return null}toBigInt(){try{return BigInt(this.toString())}catch(e){}return de.throwError("this platform does not support BigInt",X.errors.UNSUPPORTED_OPERATION,{value:this.toString()})}toString(){return arguments.length>0&&(10===arguments[0]?le||(le=!0,de.warn("BigNumber.toString does not accept any parameters; base-10 is assumed")):16===arguments[0]?de.throwError("BigNumber.toString does not accept any parameters; use bigNumber.toHexString()",X.errors.UNEXPECTED_ARGUMENT,{}):de.throwError("BigNumber.toString does not accept parameters",X.errors.UNEXPECTED_ARGUMENT,{})),be(this).toString(10)}toHexString(){return this._hex}toJSON(e){return{type:"BigNumber",hex:this.toHexString()}}static from(e){if(e instanceof pe)return e;if("string"==typeof e)return e.match(/^-?0x[0-9a-f]+$/i)?new pe(ue,he(e)):e.match(/^-?[0-9]+$/)?new pe(ue,he(new ce(e))):de.throwArgumentError("invalid BigNumber string","value",e);if("number"==typeof e)return e%1&&ye("underflow","BigNumber.from",e),(e>=fe||e<=-fe)&&ye("overflow","BigNumber.from",e),pe.from(String(e));const t=e;if("bigint"==typeof t)return pe.from(t.toString());if(ee(t))return pe.from(ie(t));if(t)if(t.toHexString){const e=t.toHexString();if("string"==typeof e)return pe.from(e)}else{let e=t._hex;if(null==e&&"BigNumber"===t.type&&(e=t.hex),"string"==typeof e&&(ae(e)||"-"===e[0]&&ae(e.substring(1))))return pe.from(e)}return de.throwArgumentError("invalid BigNumber value","value",e)}static isBigNumber(e){return!(!e||!e._isBigNumber)}}function he(e){if("string"!=typeof e)return he(e.toString(16));if("-"===e[0])return"-"===(e=e.substring(1))[0]&&de.throwArgumentError("invalid hex","value",e),"0x00"===(e=he(e))?e:"-"+e;if("0x"!==e.substring(0,2)&&(e="0x"+e),"0x"===e)return"0x00";for(e.length%2&&(e="0x0"+e.substring(2));e.length>4&&"0x00"===e.substring(0,4);)e="0x"+e.substring(4);return e}function me(e){return pe.from(he(e))}function be(e){const t=pe.from(e).toHexString();return"-"===t[0]?new ce("-"+t.substring(3),16):new ce(t.substring(2),16)}function ye(e,t,n){const a={fault:e,operation:t};return null!=n&&(a.value=n),de.throwError(e,X.errors.NUMERIC_FAULT,a)}var ge=function(e,t,n,a){return new(n||(n=Promise))((function(r,i){function s(e){try{c(a.next(e))}catch(e){i(e)}}function o(e){try{c(a.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,o)}c((a=a.apply(e,t||[])).next())}))};const Ee=new X("properties/5.7.0");function Te(e,t,n){Object.defineProperty(e,t,{enumerable:!0,value:n,writable:!1})}function we(e,t){for(let n=0;n<32;n++){if(e[t])return e[t];if(!e.prototype||"object"!=typeof e.prototype)break;e=Object.getPrototypeOf(e.prototype).constructor}return null}function ve(e){return ge(this,void 0,void 0,(function*(){const t=Object.keys(e).map((t=>{const n=e[t];return Promise.resolve(n).then((e=>({key:t,value:e})))}));return(yield Promise.all(t)).reduce(((e,t)=>(e[t.key]=t.value,e)),{})}))}function Re(e){const t={};for(const n in e)t[n]=e[n];return t}const Ae={bigint:!0,boolean:!0,function:!0,number:!0,string:!0};function _e(e){if(null==e||Ae[typeof e])return!0;if(Array.isArray(e)||"object"==typeof e){if(!Object.isFrozen(e))return!1;const t=Object.keys(e);for(let n=0;n<t.length;n++){let a=null;try{a=e[t[n]]}catch(e){continue}if(!_e(a))return!1}return!0}return Ee.throwArgumentError("Cannot deepCopy "+typeof e,"object",e)}function Ce(e){if(_e(e))return e;if(Array.isArray(e))return Object.freeze(e.map((e=>Ie(e))));if("object"==typeof e){const t={};for(const n in e){const a=e[n];void 0!==a&&Te(t,n,Ie(a))}return t}return Ee.throwArgumentError("Cannot deepCopy "+typeof e,"object",e)}function Ie(e){return Ce(e)}class Ne{constructor(e){for(const t in e)this[t]=Ie(e[t])}}const Oe="abi/5.7.0",Se=new X(Oe),Me={};let ke={calldata:!0,memory:!0,storage:!0},Pe={calldata:!0,memory:!0};function De(e,t){if("bytes"===e||"string"===e){if(ke[t])return!0}else if("address"===e){if("payable"===t)return!0}else if((e.indexOf("[")>=0||"tuple"===e)&&Pe[t])return!0;return(ke[t]||"payable"===t)&&Se.throwArgumentError("invalid modifier","name",t),!1}function Le(e,t){for(let n in t)Te(e,n,t[n])}const xe=Object.freeze({sighash:"sighash",minimal:"minimal",full:"full",json:"json"}),Fe=new RegExp(/^(.*)\[([0-9]*)\]$/);class Ue{constructor(e,t){e!==Me&&Se.throwError("use fromString",X.errors.UNSUPPORTED_OPERATION,{operation:"new ParamType()"}),Le(this,t);let n=this.type.match(Fe);Le(this,n?{arrayLength:parseInt(n[2]||"-1"),arrayChildren:Ue.fromObject({type:n[1],components:this.components}),baseType:"array"}:{arrayLength:null,arrayChildren:null,baseType:null!=this.components?"tuple":this.type}),this._isParamType=!0,Object.freeze(this)}format(e){if(e||(e=xe.sighash),xe[e]||Se.throwArgumentError("invalid format type","format",e),e===xe.json){let t={type:"tuple"===this.baseType?"tuple":this.type,name:this.name||void 0};return"boolean"==typeof this.indexed&&(t.indexed=this.indexed),this.components&&(t.components=this.components.map((t=>JSON.parse(t.format(e))))),JSON.stringify(t)}let t="";return"array"===this.baseType?(t+=this.arrayChildren.format(e),t+="["+(this.arrayLength<0?"":String(this.arrayLength))+"]"):"tuple"===this.baseType?(e!==xe.sighash&&(t+=this.type),t+="("+this.components.map((t=>t.format(e))).join(e===xe.full?", ":",")+")"):t+=this.type,e!==xe.sighash&&(!0===this.indexed&&(t+=" indexed"),e===xe.full&&this.name&&(t+=" "+this.name)),t}static from(e,t){return"string"==typeof e?Ue.fromString(e,t):Ue.fromObject(e)}static fromObject(e){return Ue.isParamType(e)?e:new Ue(Me,{name:e.name||null,type:Xe(e.type),indexed:null==e.indexed?null:!!e.indexed,components:e.components?e.components.map(Ue.fromObject):null})}static fromString(e,t){return n=function(e,t){let n=e;function a(t){Se.throwArgumentError(`unexpected character at position ${t}`,"param",e)}function r(e){let n={type:"",name:"",parent:e,state:{allowType:!0}};return t&&(n.indexed=!1),n}e=e.replace(/\s/g," ");let i={type:"",name:"",state:{allowType:!0}},s=i;for(let n=0;n<e.length;n++){let i=e[n];switch(i){case"(":s.state.allowType&&""===s.type?s.type="tuple":s.state.allowParams||a(n),s.state.allowType=!1,s.type=Xe(s.type),s.components=[r(s)],s=s.components[0];break;case")":delete s.state,"indexed"===s.name&&(t||a(n),s.indexed=!0,s.name=""),De(s.type,s.name)&&(s.name=""),s.type=Xe(s.type);let e=s;s=s.parent,s||a(n),delete e.parent,s.state.allowParams=!1,s.state.allowName=!0,s.state.allowArray=!0;break;case",":delete s.state,"indexed"===s.name&&(t||a(n),s.indexed=!0,s.name=""),De(s.type,s.name)&&(s.name=""),s.type=Xe(s.type);let o=r(s.parent);s.parent.components.push(o),delete s.parent,s=o;break;case" ":s.state.allowType&&""!==s.type&&(s.type=Xe(s.type),delete s.state.allowType,s.state.allowName=!0,s.state.allowParams=!0),s.state.allowName&&""!==s.name&&("indexed"===s.name?(t||a(n),s.indexed&&a(n),s.indexed=!0,s.name=""):De(s.type,s.name)?s.name="":s.state.allowName=!1);break;case"[":s.state.allowArray||a(n),s.type+=i,s.state.allowArray=!1,s.state.allowName=!1,s.state.readArray=!0;break;case"]":s.state.readArray||a(n),s.type+=i,s.state.readArray=!1,s.state.allowArray=!0,s.state.allowName=!0;break;default:s.state.allowType?(s.type+=i,s.state.allowParams=!0,s.state.allowArray=!0):s.state.allowName?(s.name+=i,delete s.state.allowArray):s.state.readArray?s.type+=i:a(n)}}return s.parent&&Se.throwArgumentError("unexpected eof","param",e),delete i.state,"indexed"===s.name?(t||a(n.length-7),s.indexed&&a(n.length-7),s.indexed=!0,s.name=""):De(s.type,s.name)&&(s.name=""),i.type=Xe(i.type),i}(e,!!t),Ue.fromObject({name:n.name,type:n.type,indexed:n.indexed,components:n.components});var n}static isParamType(e){return!(null==e||!e._isParamType)}}function Be(e,t){return function(e){e=e.trim();let t=[],n="",a=0;for(let r=0;r<e.length;r++){let i=e[r];","===i&&0===a?(t.push(n),n=""):(n+=i,"("===i?a++:")"===i&&(a--,-1===a&&Se.throwArgumentError("unbalanced parenthesis","value",e)))}n&&t.push(n);return t}(e).map((e=>Ue.fromString(e,t)))}class Ve{constructor(e,t){e!==Me&&Se.throwError("use a static from method",X.errors.UNSUPPORTED_OPERATION,{operation:"new Fragment()"}),Le(this,t),this._isFragment=!0,Object.freeze(this)}static from(e){return Ve.isFragment(e)?e:"string"==typeof e?Ve.fromString(e):Ve.fromObject(e)}static fromObject(e){if(Ve.isFragment(e))return e;switch(e.type){case"function":return ze.fromObject(e);case"event":return Ge.fromObject(e);case"constructor":return He.fromObject(e);case"error":return Ke.fromObject(e);case"fallback":case"receive":return null}return Se.throwArgumentError("invalid fragment object","value",e)}static fromString(e){return"event"===(e=(e=(e=e.replace(/\s/g," ")).replace(/\(/g," (").replace(/\)/g,") ").replace(/\s+/g," ")).trim()).split(" ")[0]?Ge.fromString(e.substring(5).trim()):"function"===e.split(" ")[0]?ze.fromString(e.substring(8).trim()):"constructor"===e.split("(")[0].trim()?He.fromString(e.trim()):"error"===e.split(" ")[0]?Ke.fromString(e.substring(5).trim()):Se.throwArgumentError("unsupported fragment","value",e)}static isFragment(e){return!(!e||!e._isFragment)}}class Ge extends Ve{format(e){if(e||(e=xe.sighash),xe[e]||Se.throwArgumentError("invalid format type","format",e),e===xe.json)return JSON.stringify({type:"event",anonymous:this.anonymous,name:this.name,inputs:this.inputs.map((t=>JSON.parse(t.format(e))))});let t="";return e!==xe.sighash&&(t+="event "),t+=this.name+"("+this.inputs.map((t=>t.format(e))).join(e===xe.full?", ":",")+") ",e!==xe.sighash&&this.anonymous&&(t+="anonymous "),t.trim()}static from(e){return"string"==typeof e?Ge.fromString(e):Ge.fromObject(e)}static fromObject(e){if(Ge.isEventFragment(e))return e;"event"!==e.type&&Se.throwArgumentError("invalid event object","value",e);const t={name:Je(e.name),anonymous:e.anonymous,inputs:e.inputs?e.inputs.map(Ue.fromObject):[],type:"event"};return new Ge(Me,t)}static fromString(e){let t=e.match(Ye);t||Se.throwArgumentError("invalid event string","value",e);let n=!1;return t[3].split(" ").forEach((e=>{switch(e.trim()){case"anonymous":n=!0;break;case"":break;default:Se.warn("unknown modifier: "+e)}})),Ge.fromObject({name:t[1].trim(),anonymous:n,inputs:Be(t[2],!0),type:"event"})}static isEventFragment(e){return e&&e._isFragment&&"event"===e.type}}function qe(e,t){t.gas=null;let n=e.split("@");return 1!==n.length?(n.length>2&&Se.throwArgumentError("invalid human-readable ABI signature","value",e),n[1].match(/^[0-9]+$/)||Se.throwArgumentError("invalid human-readable ABI signature gas","value",e),t.gas=pe.from(n[1]),n[0]):e}function je(e,t){t.constant=!1,t.payable=!1,t.stateMutability="nonpayable",e.split(" ").forEach((e=>{switch(e.trim()){case"constant":t.constant=!0;break;case"payable":t.payable=!0,t.stateMutability="payable";break;case"nonpayable":t.payable=!1,t.stateMutability="nonpayable";break;case"pure":t.constant=!0,t.stateMutability="pure";break;case"view":t.constant=!0,t.stateMutability="view";break;case"external":case"public":case"":break;default:console.log("unknown modifier: "+e)}}))}function $e(e){let t={constant:!1,payable:!0,stateMutability:"payable"};return null!=e.stateMutability?(t.stateMutability=e.stateMutability,t.constant="view"===t.stateMutability||"pure"===t.stateMutability,null!=e.constant&&!!e.constant!==t.constant&&Se.throwArgumentError("cannot have constant function with mutability "+t.stateMutability,"value",e),t.payable="payable"===t.stateMutability,null!=e.payable&&!!e.payable!==t.payable&&Se.throwArgumentError("cannot have payable function with mutability "+t.stateMutability,"value",e)):null!=e.payable?(t.payable=!!e.payable,null!=e.constant||t.payable||"constructor"===e.type||Se.throwArgumentError("unable to determine stateMutability","value",e),t.constant=!!e.constant,t.constant?t.stateMutability="view":t.stateMutability=t.payable?"payable":"nonpayable",t.payable&&t.constant&&Se.throwArgumentError("cannot have constant payable function","value",e)):null!=e.constant?(t.constant=!!e.constant,t.payable=!t.constant,t.stateMutability=t.constant?"view":"payable"):"constructor"!==e.type&&Se.throwArgumentError("unable to determine stateMutability","value",e),t}class He extends Ve{format(e){if(e||(e=xe.sighash),xe[e]||Se.throwArgumentError("invalid format type","format",e),e===xe.json)return JSON.stringify({type:"constructor",stateMutability:"nonpayable"!==this.stateMutability?this.stateMutability:void 0,payable:this.payable,gas:this.gas?this.gas.toNumber():void 0,inputs:this.inputs.map((t=>JSON.parse(t.format(e))))});e===xe.sighash&&Se.throwError("cannot format a constructor for sighash",X.errors.UNSUPPORTED_OPERATION,{operation:"format(sighash)"});let t="constructor("+this.inputs.map((t=>t.format(e))).join(e===xe.full?", ":",")+") ";return this.stateMutability&&"nonpayable"!==this.stateMutability&&(t+=this.stateMutability+" "),t.trim()}static from(e){return"string"==typeof e?He.fromString(e):He.fromObject(e)}static fromObject(e){if(He.isConstructorFragment(e))return e;"constructor"!==e.type&&Se.throwArgumentError("invalid constructor object","value",e);let t=$e(e);t.constant&&Se.throwArgumentError("constructor cannot be constant","value",e);const n={name:null,type:e.type,inputs:e.inputs?e.inputs.map(Ue.fromObject):[],payable:t.payable,stateMutability:t.stateMutability,gas:e.gas?pe.from(e.gas):null};return new He(Me,n)}static fromString(e){let t={type:"constructor"},n=(e=qe(e,t)).match(Ye);return n&&"constructor"===n[1].trim()||Se.throwArgumentError("invalid constructor string","value",e),t.inputs=Be(n[2].trim(),!1),je(n[3].trim(),t),He.fromObject(t)}static isConstructorFragment(e){return e&&e._isFragment&&"constructor"===e.type}}class ze extends He{format(e){if(e||(e=xe.sighash),xe[e]||Se.throwArgumentError("invalid format type","format",e),e===xe.json)return JSON.stringify({type:"function",name:this.name,constant:this.constant,stateMutability:"nonpayable"!==this.stateMutability?this.stateMutability:void 0,payable:this.payable,gas:this.gas?this.gas.toNumber():void 0,inputs:this.inputs.map((t=>JSON.parse(t.format(e)))),outputs:this.outputs.map((t=>JSON.parse(t.format(e))))});let t="";return e!==xe.sighash&&(t+="function "),t+=this.name+"("+this.inputs.map((t=>t.format(e))).join(e===xe.full?", ":",")+") ",e!==xe.sighash&&(this.stateMutability?"nonpayable"!==this.stateMutability&&(t+=this.stateMutability+" "):this.constant&&(t+="view "),this.outputs&&this.outputs.length&&(t+="returns ("+this.outputs.map((t=>t.format(e))).join(", ")+") "),null!=this.gas&&(t+="@"+this.gas.toString()+" ")),t.trim()}static from(e){return"string"==typeof e?ze.fromString(e):ze.fromObject(e)}static fromObject(e){if(ze.isFunctionFragment(e))return e;"function"!==e.type&&Se.throwArgumentError("invalid function object","value",e);let t=$e(e);const n={type:e.type,name:Je(e.name),constant:t.constant,inputs:e.inputs?e.inputs.map(Ue.fromObject):[],outputs:e.outputs?e.outputs.map(Ue.fromObject):[],payable:t.payable,stateMutability:t.stateMutability,gas:e.gas?pe.from(e.gas):null};return new ze(Me,n)}static fromString(e){let t={type:"function"},n=(e=qe(e,t)).split(" returns ");n.length>2&&Se.throwArgumentError("invalid function string","value",e);let a=n[0].match(Ye);if(a||Se.throwArgumentError("invalid function signature","value",e),t.name=a[1].trim(),t.name&&Je(t.name),t.inputs=Be(a[2],!1),je(a[3].trim(),t),n.length>1){let a=n[1].match(Ye);""==a[1].trim()&&""==a[3].trim()||Se.throwArgumentError("unexpected tokens","value",e),t.outputs=Be(a[2],!1)}else t.outputs=[];return ze.fromObject(t)}static isFunctionFragment(e){return e&&e._isFragment&&"function"===e.type}}function We(e){const t=e.format();return"Error(string)"!==t&&"Panic(uint256)"!==t||Se.throwArgumentError(`cannot specify user defined ${t} error`,"fragment",e),e}class Ke extends Ve{format(e){if(e||(e=xe.sighash),xe[e]||Se.throwArgumentError("invalid format type","format",e),e===xe.json)return JSON.stringify({type:"error",name:this.name,inputs:this.inputs.map((t=>JSON.parse(t.format(e))))});let t="";return e!==xe.sighash&&(t+="error "),t+=this.name+"("+this.inputs.map((t=>t.format(e))).join(e===xe.full?", ":",")+") ",t.trim()}static from(e){return"string"==typeof e?Ke.fromString(e):Ke.fromObject(e)}static fromObject(e){if(Ke.isErrorFragment(e))return e;"error"!==e.type&&Se.throwArgumentError("invalid error object","value",e);const t={type:e.type,name:Je(e.name),inputs:e.inputs?e.inputs.map(Ue.fromObject):[]};return We(new Ke(Me,t))}static fromString(e){let t={type:"error"},n=e.match(Ye);return n||Se.throwArgumentError("invalid error signature","value",e),t.name=n[1].trim(),t.name&&Je(t.name),t.inputs=Be(n[2],!1),We(Ke.fromObject(t))}static isErrorFragment(e){return e&&e._isFragment&&"error"===e.type}}function Xe(e){return e.match(/^uint($|[^1-9])/)?e="uint256"+e.substring(4):e.match(/^int($|[^1-9])/)&&(e="int256"+e.substring(3)),e}const Ze=new RegExp("^[a-zA-Z$_][a-zA-Z0-9$_]*$");function Je(e){return e&&e.match(Ze)||Se.throwArgumentError(`invalid identifier "${e}"`,"value",e),e}const Ye=new RegExp("^([^)(]*)\\((.*)\\)([^)(]*)$");const Qe=new X(Oe);class et{constructor(e,t,n,a){this.name=e,this.type=t,this.localName=n,this.dynamic=a}_throwError(e,t){Qe.throwArgumentError(e,this.localName,t)}}class tt{constructor(e){Te(this,"wordSize",e||32),this._data=[],this._dataLength=0,this._padding=new Uint8Array(e)}get data(){return function(e){let t="0x";return e.forEach((e=>{t+=ie(e).substring(2)})),t}(this._data)}get length(){return this._dataLength}_writeData(e){return this._data.push(e),this._dataLength+=e.length,e.length}appendWriter(e){return this._writeData(ne(e._data))}writeBytes(e){let t=te(e);const n=t.length%this.wordSize;return n&&(t=ne([t,this._padding.slice(n)])),this._writeData(t)}_getValue(e){let t=te(pe.from(e));return t.length>this.wordSize&&Qe.throwError("value out-of-bounds",X.errors.BUFFER_OVERRUN,{length:this.wordSize,offset:t.length}),t.length%this.wordSize&&(t=ne([this._padding.slice(t.length%this.wordSize),t])),t}writeValue(e){return this._writeData(this._getValue(e))}writeUpdatableValue(){const e=this._data.length;return this._data.push(this._padding),this._dataLength+=this.wordSize,t=>{this._data[e]=this._getValue(t)}}}class nt{constructor(e,t,n,a){Te(this,"_data",te(e)),Te(this,"wordSize",t||32),Te(this,"_coerceFunc",n),Te(this,"allowLoose",a),this._offset=0}get data(){return ie(this._data)}get consumed(){return this._offset}static coerce(e,t){let n=e.match("^u?int([0-9]+)$");return n&&parseInt(n[1])<=48&&(t=t.toNumber()),t}coerce(e,t){return this._coerceFunc?this._coerceFunc(e,t):nt.coerce(e,t)}_peekBytes(e,t,n){let a=Math.ceil(t/this.wordSize)*this.wordSize;return this._offset+a>this._data.length&&(this.allowLoose&&n&&this._offset+t<=this._data.length?a=t:Qe.throwError("data out-of-bounds",X.errors.BUFFER_OVERRUN,{length:this._data.length,offset:this._offset+a})),this._data.slice(this._offset,this._offset+a)}subReader(e){return new nt(this._data.slice(this._offset+e),this.wordSize,this._coerceFunc,this.allowLoose)}readBytes(e,t){let n=this._peekBytes(0,e,!!t);return this._offset+=n.length,n.slice(0,e)}readValue(){return pe.from(this.readBytes(this.wordSize))}}var at,rt={exports:{}};
2
+ /**
3
+ * [js-sha3]{@link https://github.com/emn178/js-sha3}
4
+ *
5
+ * @version 0.8.0
6
+ * @author Chen, Yi-Cyuan [emn178@gmail.com]
7
+ * @copyright Chen, Yi-Cyuan 2015-2018
8
+ * @license MIT
9
+ */at=rt,function(){var e="input is invalid type",t="object"==typeof window,n=t?window:{};n.JS_SHA3_NO_WINDOW&&(t=!1);var a=!t&&"object"==typeof self;!n.JS_SHA3_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node?n=x:a&&(n=self);var r=!n.JS_SHA3_NO_COMMON_JS&&at.exports,i=!n.JS_SHA3_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,s="0123456789abcdef".split(""),o=[4,1024,262144,67108864],c=[0,8,16,24],d=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],u=[224,256,384,512],f=[128,256],l=["hex","buffer","arrayBuffer","array","digest"],p={128:168,256:136};!n.JS_SHA3_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!i||!n.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});for(var h=function(e,t,n){return function(a){return new O(e,t,e).update(a)[n]()}},m=function(e,t,n){return function(a,r){return new O(e,t,r).update(a)[n]()}},b=function(e,t,n){return function(t,a,r,i){return w["cshake"+e].update(t,a,r,i)[n]()}},y=function(e,t,n){return function(t,a,r,i){return w["kmac"+e].update(t,a,r,i)[n]()}},g=function(e,t,n,a){for(var r=0;r<l.length;++r){var i=l[r];e[i]=t(n,a,i)}return e},E=function(e,t){var n=h(e,t,"hex");return n.create=function(){return new O(e,t,e)},n.update=function(e){return n.create().update(e)},g(n,h,e,t)},T=[{name:"keccak",padding:[1,256,65536,16777216],bits:u,createMethod:E},{name:"sha3",padding:[6,1536,393216,100663296],bits:u,createMethod:E},{name:"shake",padding:[31,7936,2031616,520093696],bits:f,createMethod:function(e,t){var n=m(e,t,"hex");return n.create=function(n){return new O(e,t,n)},n.update=function(e,t){return n.create(t).update(e)},g(n,m,e,t)}},{name:"cshake",padding:o,bits:f,createMethod:function(e,t){var n=p[e],a=b(e,0,"hex");return a.create=function(a,r,i){return r||i?new O(e,t,a).bytepad([r,i],n):w["shake"+e].create(a)},a.update=function(e,t,n,r){return a.create(t,n,r).update(e)},g(a,b,e,t)}},{name:"kmac",padding:o,bits:f,createMethod:function(e,t){var n=p[e],a=y(e,0,"hex");return a.create=function(a,r,i){return new S(e,t,r).bytepad(["KMAC",i],n).bytepad([a],n)},a.update=function(e,t,n,r){return a.create(e,n,r).update(t)},g(a,y,e,t)}}],w={},v=[],R=0;R<T.length;++R)for(var A=T[R],_=A.bits,C=0;C<_.length;++C){var I=A.name+"_"+_[C];if(v.push(I),w[I]=A.createMethod(_[C],A.padding),"sha3"!==A.name){var N=A.name+_[C];v.push(N),w[N]=w[I]}}function O(e,t,n){this.blocks=[],this.s=[],this.padding=t,this.outputBits=n,this.reset=!0,this.finalized=!1,this.block=0,this.start=0,this.blockCount=1600-(e<<1)>>5,this.byteCount=this.blockCount<<2,this.outputBlocks=n>>5,this.extraBytes=(31&n)>>3;for(var a=0;a<50;++a)this.s[a]=0}function S(e,t,n){O.call(this,e,t,n)}O.prototype.update=function(t){if(this.finalized)throw new Error("finalize already called");var n,a=typeof t;if("string"!==a){if("object"!==a)throw new Error(e);if(null===t)throw new Error(e);if(i&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||i&&ArrayBuffer.isView(t)))throw new Error(e);n=!0}for(var r,s,o=this.blocks,d=this.byteCount,u=t.length,f=this.blockCount,l=0,p=this.s;l<u;){if(this.reset)for(this.reset=!1,o[0]=this.block,r=1;r<f+1;++r)o[r]=0;if(n)for(r=this.start;l<u&&r<d;++l)o[r>>2]|=t[l]<<c[3&r++];else for(r=this.start;l<u&&r<d;++l)(s=t.charCodeAt(l))<128?o[r>>2]|=s<<c[3&r++]:s<2048?(o[r>>2]|=(192|s>>6)<<c[3&r++],o[r>>2]|=(128|63&s)<<c[3&r++]):s<55296||s>=57344?(o[r>>2]|=(224|s>>12)<<c[3&r++],o[r>>2]|=(128|s>>6&63)<<c[3&r++],o[r>>2]|=(128|63&s)<<c[3&r++]):(s=65536+((1023&s)<<10|1023&t.charCodeAt(++l)),o[r>>2]|=(240|s>>18)<<c[3&r++],o[r>>2]|=(128|s>>12&63)<<c[3&r++],o[r>>2]|=(128|s>>6&63)<<c[3&r++],o[r>>2]|=(128|63&s)<<c[3&r++]);if(this.lastByteIndex=r,r>=d){for(this.start=r-d,this.block=o[f],r=0;r<f;++r)p[r]^=o[r];M(p),this.reset=!0}else this.start=r}return this},O.prototype.encode=function(e,t){var n=255&e,a=1,r=[n];for(n=255&(e>>=8);n>0;)r.unshift(n),n=255&(e>>=8),++a;return t?r.push(a):r.unshift(a),this.update(r),r.length},O.prototype.encodeString=function(t){var n,a=typeof t;if("string"!==a){if("object"!==a)throw new Error(e);if(null===t)throw new Error(e);if(i&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||i&&ArrayBuffer.isView(t)))throw new Error(e);n=!0}var r=0,s=t.length;if(n)r=s;else for(var o=0;o<t.length;++o){var c=t.charCodeAt(o);c<128?r+=1:c<2048?r+=2:c<55296||c>=57344?r+=3:(c=65536+((1023&c)<<10|1023&t.charCodeAt(++o)),r+=4)}return r+=this.encode(8*r),this.update(t),r},O.prototype.bytepad=function(e,t){for(var n=this.encode(t),a=0;a<e.length;++a)n+=this.encodeString(e[a]);var r=t-n%t,i=[];return i.length=r,this.update(i),this},O.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex,n=this.blockCount,a=this.s;if(e[t>>2]|=this.padding[3&t],this.lastByteIndex===this.byteCount)for(e[0]=e[n],t=1;t<n+1;++t)e[t]=0;for(e[n-1]|=2147483648,t=0;t<n;++t)a[t]^=e[t];M(a)}},O.prototype.toString=O.prototype.hex=function(){this.finalize();for(var e,t=this.blockCount,n=this.s,a=this.outputBlocks,r=this.extraBytes,i=0,o=0,c="";o<a;){for(i=0;i<t&&o<a;++i,++o)e=n[i],c+=s[e>>4&15]+s[15&e]+s[e>>12&15]+s[e>>8&15]+s[e>>20&15]+s[e>>16&15]+s[e>>28&15]+s[e>>24&15];o%t==0&&(M(n),i=0)}return r&&(e=n[i],c+=s[e>>4&15]+s[15&e],r>1&&(c+=s[e>>12&15]+s[e>>8&15]),r>2&&(c+=s[e>>20&15]+s[e>>16&15])),c},O.prototype.arrayBuffer=function(){this.finalize();var e,t=this.blockCount,n=this.s,a=this.outputBlocks,r=this.extraBytes,i=0,s=0,o=this.outputBits>>3;e=r?new ArrayBuffer(a+1<<2):new ArrayBuffer(o);for(var c=new Uint32Array(e);s<a;){for(i=0;i<t&&s<a;++i,++s)c[s]=n[i];s%t==0&&M(n)}return r&&(c[i]=n[i],e=e.slice(0,o)),e},O.prototype.buffer=O.prototype.arrayBuffer,O.prototype.digest=O.prototype.array=function(){this.finalize();for(var e,t,n=this.blockCount,a=this.s,r=this.outputBlocks,i=this.extraBytes,s=0,o=0,c=[];o<r;){for(s=0;s<n&&o<r;++s,++o)e=o<<2,t=a[s],c[e]=255&t,c[e+1]=t>>8&255,c[e+2]=t>>16&255,c[e+3]=t>>24&255;o%n==0&&M(a)}return i&&(e=o<<2,t=a[s],c[e]=255&t,i>1&&(c[e+1]=t>>8&255),i>2&&(c[e+2]=t>>16&255)),c},S.prototype=new O,S.prototype.finalize=function(){return this.encode(this.outputBits,!0),O.prototype.finalize.call(this)};var M=function(e){var t,n,a,r,i,s,o,c,u,f,l,p,h,m,b,y,g,E,T,w,v,R,A,_,C,I,N,O,S,M,k,P,D,L,x,F,U,B,V,G,q,j,$,H,z,W,K,X,Z,J,Y,Q,ee,te,ne,ae,re,ie,se,oe,ce,de,ue;for(a=0;a<48;a+=2)r=e[0]^e[10]^e[20]^e[30]^e[40],i=e[1]^e[11]^e[21]^e[31]^e[41],s=e[2]^e[12]^e[22]^e[32]^e[42],o=e[3]^e[13]^e[23]^e[33]^e[43],c=e[4]^e[14]^e[24]^e[34]^e[44],u=e[5]^e[15]^e[25]^e[35]^e[45],f=e[6]^e[16]^e[26]^e[36]^e[46],l=e[7]^e[17]^e[27]^e[37]^e[47],t=(p=e[8]^e[18]^e[28]^e[38]^e[48])^(s<<1|o>>>31),n=(h=e[9]^e[19]^e[29]^e[39]^e[49])^(o<<1|s>>>31),e[0]^=t,e[1]^=n,e[10]^=t,e[11]^=n,e[20]^=t,e[21]^=n,e[30]^=t,e[31]^=n,e[40]^=t,e[41]^=n,t=r^(c<<1|u>>>31),n=i^(u<<1|c>>>31),e[2]^=t,e[3]^=n,e[12]^=t,e[13]^=n,e[22]^=t,e[23]^=n,e[32]^=t,e[33]^=n,e[42]^=t,e[43]^=n,t=s^(f<<1|l>>>31),n=o^(l<<1|f>>>31),e[4]^=t,e[5]^=n,e[14]^=t,e[15]^=n,e[24]^=t,e[25]^=n,e[34]^=t,e[35]^=n,e[44]^=t,e[45]^=n,t=c^(p<<1|h>>>31),n=u^(h<<1|p>>>31),e[6]^=t,e[7]^=n,e[16]^=t,e[17]^=n,e[26]^=t,e[27]^=n,e[36]^=t,e[37]^=n,e[46]^=t,e[47]^=n,t=f^(r<<1|i>>>31),n=l^(i<<1|r>>>31),e[8]^=t,e[9]^=n,e[18]^=t,e[19]^=n,e[28]^=t,e[29]^=n,e[38]^=t,e[39]^=n,e[48]^=t,e[49]^=n,m=e[0],b=e[1],W=e[11]<<4|e[10]>>>28,K=e[10]<<4|e[11]>>>28,O=e[20]<<3|e[21]>>>29,S=e[21]<<3|e[20]>>>29,oe=e[31]<<9|e[30]>>>23,ce=e[30]<<9|e[31]>>>23,j=e[40]<<18|e[41]>>>14,$=e[41]<<18|e[40]>>>14,L=e[2]<<1|e[3]>>>31,x=e[3]<<1|e[2]>>>31,y=e[13]<<12|e[12]>>>20,g=e[12]<<12|e[13]>>>20,X=e[22]<<10|e[23]>>>22,Z=e[23]<<10|e[22]>>>22,M=e[33]<<13|e[32]>>>19,k=e[32]<<13|e[33]>>>19,de=e[42]<<2|e[43]>>>30,ue=e[43]<<2|e[42]>>>30,te=e[5]<<30|e[4]>>>2,ne=e[4]<<30|e[5]>>>2,F=e[14]<<6|e[15]>>>26,U=e[15]<<6|e[14]>>>26,E=e[25]<<11|e[24]>>>21,T=e[24]<<11|e[25]>>>21,J=e[34]<<15|e[35]>>>17,Y=e[35]<<15|e[34]>>>17,P=e[45]<<29|e[44]>>>3,D=e[44]<<29|e[45]>>>3,_=e[6]<<28|e[7]>>>4,C=e[7]<<28|e[6]>>>4,ae=e[17]<<23|e[16]>>>9,re=e[16]<<23|e[17]>>>9,B=e[26]<<25|e[27]>>>7,V=e[27]<<25|e[26]>>>7,w=e[36]<<21|e[37]>>>11,v=e[37]<<21|e[36]>>>11,Q=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,H=e[8]<<27|e[9]>>>5,z=e[9]<<27|e[8]>>>5,I=e[18]<<20|e[19]>>>12,N=e[19]<<20|e[18]>>>12,ie=e[29]<<7|e[28]>>>25,se=e[28]<<7|e[29]>>>25,G=e[38]<<8|e[39]>>>24,q=e[39]<<8|e[38]>>>24,R=e[48]<<14|e[49]>>>18,A=e[49]<<14|e[48]>>>18,e[0]=m^~y&E,e[1]=b^~g&T,e[10]=_^~I&O,e[11]=C^~N&S,e[20]=L^~F&B,e[21]=x^~U&V,e[30]=H^~W&X,e[31]=z^~K&Z,e[40]=te^~ae&ie,e[41]=ne^~re&se,e[2]=y^~E&w,e[3]=g^~T&v,e[12]=I^~O&M,e[13]=N^~S&k,e[22]=F^~B&G,e[23]=U^~V&q,e[32]=W^~X&J,e[33]=K^~Z&Y,e[42]=ae^~ie&oe,e[43]=re^~se&ce,e[4]=E^~w&R,e[5]=T^~v&A,e[14]=O^~M&P,e[15]=S^~k&D,e[24]=B^~G&j,e[25]=V^~q&$,e[34]=X^~J&Q,e[35]=Z^~Y&ee,e[44]=ie^~oe&de,e[45]=se^~ce&ue,e[6]=w^~R&m,e[7]=v^~A&b,e[16]=M^~P&_,e[17]=k^~D&C,e[26]=G^~j&L,e[27]=q^~$&x,e[36]=J^~Q&H,e[37]=Y^~ee&z,e[46]=oe^~de&te,e[47]=ce^~ue&ne,e[8]=R^~m&y,e[9]=A^~b&g,e[18]=P^~_&I,e[19]=D^~C&N,e[28]=j^~L&F,e[29]=$^~x&U,e[38]=Q^~H&W,e[39]=ee^~z&K,e[48]=de^~te&ae,e[49]=ue^~ne&re,e[0]^=d[a],e[1]^=d[a+1]};if(r)at.exports=w;else for(R=0;R<v.length;++R)n[v[R]]=w[v[R]]}();var it=F(rt.exports);function st(e){return"0x"+it.keccak_256(te(e))}const ot=new X("rlp/5.7.0");function ct(e){const t=[];for(;e;)t.unshift(255&e),e>>=8;return t}function dt(e,t,n){let a=0;for(let r=0;r<n;r++)a=256*a+e[t+r];return a}function ut(e){if(Array.isArray(e)){let t=[];if(e.forEach((function(e){t=t.concat(ut(e))})),t.length<=55)return t.unshift(192+t.length),t;const n=ct(t.length);return n.unshift(247+n.length),n.concat(t)}var t;ae(t=e)&&!(t.length%2)||ee(t)||ot.throwArgumentError("RLP object must be BytesLike","object",e);const n=Array.prototype.slice.call(te(e));if(1===n.length&&n[0]<=127)return n;if(n.length<=55)return n.unshift(128+n.length),n;const a=ct(n.length);return a.unshift(183+a.length),a.concat(n)}function ft(e,t,n,a){const r=[];for(;n<t+1+a;){const i=lt(e,n);r.push(i.result),(n+=i.consumed)>t+1+a&&ot.throwError("child data too short",X.errors.BUFFER_OVERRUN,{})}return{consumed:1+a,result:r}}function lt(e,t){if(0===e.length&&ot.throwError("data too short",X.errors.BUFFER_OVERRUN,{}),e[t]>=248){const n=e[t]-247;t+1+n>e.length&&ot.throwError("data short segment too short",X.errors.BUFFER_OVERRUN,{});const a=dt(e,t+1,n);return t+1+n+a>e.length&&ot.throwError("data long segment too short",X.errors.BUFFER_OVERRUN,{}),ft(e,t,t+1+n,n+a)}if(e[t]>=192){const n=e[t]-192;return t+1+n>e.length&&ot.throwError("data array too short",X.errors.BUFFER_OVERRUN,{}),ft(e,t,t+1,n)}if(e[t]>=184){const n=e[t]-183;t+1+n>e.length&&ot.throwError("data array too short",X.errors.BUFFER_OVERRUN,{});const a=dt(e,t+1,n);t+1+n+a>e.length&&ot.throwError("data array too short",X.errors.BUFFER_OVERRUN,{});return{consumed:1+n+a,result:ie(e.slice(t+1+n,t+1+n+a))}}if(e[t]>=128){const n=e[t]-128;t+1+n>e.length&&ot.throwError("data too short",X.errors.BUFFER_OVERRUN,{});return{consumed:1+n,result:ie(e.slice(t+1,t+1+n))}}return{consumed:1,result:ie(e[t])}}const pt=new X("address/5.7.0");function ht(e){ae(e,20)||pt.throwArgumentError("invalid address","address",e);const t=(e=e.toLowerCase()).substring(2).split(""),n=new Uint8Array(40);for(let e=0;e<40;e++)n[e]=t[e].charCodeAt(0);const a=te(st(n));for(let e=0;e<40;e+=2)a[e>>1]>>4>=8&&(t[e]=t[e].toUpperCase()),(15&a[e>>1])>=8&&(t[e+1]=t[e+1].toUpperCase());return"0x"+t.join("")}const mt={};for(let e=0;e<10;e++)mt[String(e)]=String(e);for(let e=0;e<26;e++)mt[String.fromCharCode(65+e)]=String(10+e);const bt=Math.floor((yt=9007199254740991,Math.log10?Math.log10(yt):Math.log(yt)/Math.LN10));var yt;function gt(e){let t=null;if("string"!=typeof e&&pt.throwArgumentError("invalid address","address",e),e.match(/^(0x)?[0-9a-fA-F]{40}$/))"0x"!==e.substring(0,2)&&(e="0x"+e),t=ht(e),e.match(/([A-F].*[a-f])|([a-f].*[A-F])/)&&t!==e&&pt.throwArgumentError("bad address checksum","address",e);else if(e.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)){for(e.substring(2,4)!==function(e){let t=(e=(e=e.toUpperCase()).substring(4)+e.substring(0,2)+"00").split("").map((e=>mt[e])).join("");for(;t.length>=bt;){let e=t.substring(0,bt);t=parseInt(e,10)%97+t.substring(e.length)}let n=String(98-parseInt(t,10)%97);for(;n.length<2;)n="0"+n;return n}(e)&&pt.throwArgumentError("bad icap checksum","address",e),n=e.substring(4),t=new ce(n,36).toString(16);t.length<40;)t="0"+t;t=ht("0x"+t)}else pt.throwArgumentError("invalid address","address",e);var n;return t}function Et(e){try{return gt(e),!0}catch(e){}return!1}function Tt(e){let t=null;try{t=gt(e.from)}catch(t){pt.throwArgumentError("missing from address","transaction",e)}const n=function(e){let t=te(e);if(0===t.length)return t;let n=0;for(;n<t.length&&0===t[n];)n++;return n&&(t=t.slice(n)),t}(te(pe.from(e.nonce).toHexString()));return gt(se(st(ie(ut([t,n]))),12))}class wt extends et{constructor(e){super("address","address",e,!1)}defaultValue(){return"0x0000000000000000000000000000000000000000"}encode(e,t){try{t=gt(t)}catch(e){this._throwError(e.message,t)}return e.writeValue(t)}decode(e){return gt(oe(e.readValue().toHexString(),20))}}class vt extends et{constructor(e){super(e.name,e.type,void 0,e.dynamic),this.coder=e}defaultValue(){return this.coder.defaultValue()}encode(e,t){return this.coder.encode(e,t)}decode(e){return this.coder.decode(e)}}const Rt=new X(Oe);function At(e,t,n){let a=null;if(Array.isArray(n))a=n;else if(n&&"object"==typeof n){let e={};a=t.map((t=>{const a=t.localName;return a||Rt.throwError("cannot encode object for signature with missing names",X.errors.INVALID_ARGUMENT,{argument:"values",coder:t,value:n}),e[a]&&Rt.throwError("cannot encode object for signature with duplicate names",X.errors.INVALID_ARGUMENT,{argument:"values",coder:t,value:n}),e[a]=!0,n[a]}))}else Rt.throwArgumentError("invalid tuple value","tuple",n);t.length!==a.length&&Rt.throwArgumentError("types/value length mismatch","tuple",n);let r=new tt(e.wordSize),i=new tt(e.wordSize),s=[];t.forEach(((e,t)=>{let n=a[t];if(e.dynamic){let t=i.length;e.encode(i,n);let a=r.writeUpdatableValue();s.push((e=>{a(e+t)}))}else e.encode(r,n)})),s.forEach((e=>{e(r.length)}));let o=e.appendWriter(r);return o+=e.appendWriter(i),o}function _t(e,t){let n=[],a=e.subReader(0);t.forEach((t=>{let r=null;if(t.dynamic){let n=e.readValue(),i=a.subReader(n.toNumber());try{r=t.decode(i)}catch(e){if(e.code===X.errors.BUFFER_OVERRUN)throw e;r=e,r.baseType=t.name,r.name=t.localName,r.type=t.type}}else try{r=t.decode(e)}catch(e){if(e.code===X.errors.BUFFER_OVERRUN)throw e;r=e,r.baseType=t.name,r.name=t.localName,r.type=t.type}null!=r&&n.push(r)}));const r=t.reduce(((e,t)=>{const n=t.localName;return n&&(e[n]||(e[n]=0),e[n]++),e}),{});t.forEach(((e,t)=>{let a=e.localName;if(!a||1!==r[a])return;if("length"===a&&(a="_length"),null!=n[a])return;const i=n[t];i instanceof Error?Object.defineProperty(n,a,{enumerable:!0,get:()=>{throw i}}):n[a]=i}));for(let e=0;e<n.length;e++){const t=n[e];t instanceof Error&&Object.defineProperty(n,e,{enumerable:!0,get:()=>{throw t}})}return Object.freeze(n)}class Ct extends et{constructor(e,t,n){super("array",e.type+"["+(t>=0?t:"")+"]",n,-1===t||e.dynamic),this.coder=e,this.length=t}defaultValue(){const e=this.coder.defaultValue(),t=[];for(let n=0;n<this.length;n++)t.push(e);return t}encode(e,t){Array.isArray(t)||this._throwError("expected array value",t);let n=this.length;-1===n&&(n=t.length,e.writeValue(t.length)),Rt.checkArgumentCount(t.length,n,"coder array"+(this.localName?" "+this.localName:""));let a=[];for(let e=0;e<t.length;e++)a.push(this.coder);return At(e,a,t)}decode(e){let t=this.length;-1===t&&(t=e.readValue().toNumber(),32*t>e._data.length&&Rt.throwError("insufficient data length",X.errors.BUFFER_OVERRUN,{length:e._data.length,count:t}));let n=[];for(let e=0;e<t;e++)n.push(new vt(this.coder));return e.coerce(this.name,_t(e,n))}}class It extends et{constructor(e){super("bool","bool",e,!1)}defaultValue(){return!1}encode(e,t){return e.writeValue(t?1:0)}decode(e){return e.coerce(this.type,!e.readValue().isZero())}}class Nt extends et{constructor(e,t){super(e,e,t,!0)}defaultValue(){return"0x"}encode(e,t){t=te(t);let n=e.writeValue(t.length);return n+=e.writeBytes(t),n}decode(e){return e.readBytes(e.readValue().toNumber(),!0)}}class Ot extends Nt{constructor(e){super("bytes",e)}decode(e){return e.coerce(this.name,ie(super.decode(e)))}}class St extends et{constructor(e,t){let n="bytes"+String(e);super(n,n,t,!1),this.size=e}defaultValue(){return"0x0000000000000000000000000000000000000000000000000000000000000000".substring(0,2+2*this.size)}encode(e,t){let n=te(t);return n.length!==this.size&&this._throwError("incorrect data length",t),e.writeBytes(n)}decode(e){return e.coerce(this.name,ie(e.readBytes(this.size)))}}class Mt extends et{constructor(e){super("null","",e,!1)}defaultValue(){return null}encode(e,t){return null!=t&&this._throwError("not null",t),e.writeBytes([])}decode(e){return e.readBytes(0),e.coerce(this.name,null)}}const kt=pe.from(-1),Pt=pe.from(0),Dt=pe.from(1),Lt=pe.from("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");class xt extends et{constructor(e,t,n){const a=(t?"int":"uint")+8*e;super(a,a,n,!1),this.size=e,this.signed=t}defaultValue(){return 0}encode(e,t){let n=pe.from(t),a=Lt.mask(8*e.wordSize);if(this.signed){let e=a.mask(8*this.size-1);(n.gt(e)||n.lt(e.add(Dt).mul(kt)))&&this._throwError("value out-of-bounds",t)}else(n.lt(Pt)||n.gt(a.mask(8*this.size)))&&this._throwError("value out-of-bounds",t);return n=n.toTwos(8*this.size).mask(8*this.size),this.signed&&(n=n.fromTwos(8*this.size).toTwos(8*e.wordSize)),e.writeValue(n)}decode(e){let t=e.readValue().mask(8*this.size);return this.signed&&(t=t.fromTwos(8*this.size)),e.coerce(this.name,t)}}const Ft=new X("strings/5.7.0");var Ut,Bt;function Vt(e,t,n,a,r){if(e===Bt.BAD_PREFIX||e===Bt.UNEXPECTED_CONTINUE){let e=0;for(let a=t+1;a<n.length&&n[a]>>6==2;a++)e++;return e}return e===Bt.OVERRUN?n.length-t-1:0}!function(e){e.current="",e.NFC="NFC",e.NFD="NFD",e.NFKC="NFKC",e.NFKD="NFKD"}(Ut||(Ut={})),function(e){e.UNEXPECTED_CONTINUE="unexpected continuation byte",e.BAD_PREFIX="bad codepoint prefix",e.OVERRUN="string overrun",e.MISSING_CONTINUE="missing continuation byte",e.OUT_OF_RANGE="out of UTF-8 range",e.UTF16_SURROGATE="UTF-16 surrogate",e.OVERLONG="overlong representation"}(Bt||(Bt={}));const Gt=Object.freeze({error:function(e,t,n,a,r){return Ft.throwArgumentError(`invalid codepoint at offset ${t}; ${e}`,"bytes",n)},ignore:Vt,replace:function(e,t,n,a,r){return e===Bt.OVERLONG?(a.push(r),0):(a.push(65533),Vt(e,t,n))}});function qt(e,t=Ut.current){t!=Ut.current&&(Ft.checkNormalize(),e=e.normalize(t));let n=[];for(let t=0;t<e.length;t++){const a=e.charCodeAt(t);if(a<128)n.push(a);else if(a<2048)n.push(a>>6|192),n.push(63&a|128);else if(55296==(64512&a)){t++;const r=e.charCodeAt(t);if(t>=e.length||56320!=(64512&r))throw new Error("invalid utf-8 string");const i=65536+((1023&a)<<10)+(1023&r);n.push(i>>18|240),n.push(i>>12&63|128),n.push(i>>6&63|128),n.push(63&i|128)}else n.push(a>>12|224),n.push(a>>6&63|128),n.push(63&a|128)}return te(n)}function jt(e,t){return n=function(e,t){null==t&&(t=Gt.error),e=te(e);const n=[];let a=0;for(;a<e.length;){const r=e[a++];if(r>>7==0){n.push(r);continue}let i=null,s=null;if(192==(224&r))i=1,s=127;else if(224==(240&r))i=2,s=2047;else{if(240!=(248&r)){a+=t(128==(192&r)?Bt.UNEXPECTED_CONTINUE:Bt.BAD_PREFIX,a-1,e,n);continue}i=3,s=65535}if(a-1+i>=e.length){a+=t(Bt.OVERRUN,a-1,e,n);continue}let o=r&(1<<8-i-1)-1;for(let r=0;r<i;r++){let r=e[a];if(128!=(192&r)){a+=t(Bt.MISSING_CONTINUE,a,e,n),o=null;break}o=o<<6|63&r,a++}null!==o&&(o>1114111?a+=t(Bt.OUT_OF_RANGE,a-1-i,e,n,o):o>=55296&&o<=57343?a+=t(Bt.UTF16_SURROGATE,a-1-i,e,n,o):o<=s?a+=t(Bt.OVERLONG,a-1-i,e,n,o):n.push(o))}return n}(e,t),n.map((e=>e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(55296+(e>>10&1023),56320+(1023&e))))).join("");var n}class $t extends Nt{constructor(e){super("string",e)}defaultValue(){return""}encode(e,t){return super.encode(e,qt(t))}decode(e){return jt(super.decode(e))}}class Ht extends et{constructor(e,t){let n=!1;const a=[];e.forEach((e=>{e.dynamic&&(n=!0),a.push(e.type)}));super("tuple","tuple("+a.join(",")+")",t,n),this.coders=e}defaultValue(){const e=[];this.coders.forEach((t=>{e.push(t.defaultValue())}));const t=this.coders.reduce(((e,t)=>{const n=t.localName;return n&&(e[n]||(e[n]=0),e[n]++),e}),{});return this.coders.forEach(((n,a)=>{let r=n.localName;r&&1===t[r]&&("length"===r&&(r="_length"),null==e[r]&&(e[r]=e[a]))})),Object.freeze(e)}encode(e,t){return At(e,this.coders,t)}decode(e){return e.coerce(this.name,_t(e,this.coders))}}const zt=new X(Oe),Wt=new RegExp(/^bytes([0-9]*)$/),Kt=new RegExp(/^(u?int)([0-9]*)$/);const Xt=new class{constructor(e){Te(this,"coerceFunc",e||null)}_getCoder(e){switch(e.baseType){case"address":return new wt(e.name);case"bool":return new It(e.name);case"string":return new $t(e.name);case"bytes":return new Ot(e.name);case"array":return new Ct(this._getCoder(e.arrayChildren),e.arrayLength,e.name);case"tuple":return new Ht((e.components||[]).map((e=>this._getCoder(e))),e.name);case"":return new Mt(e.name)}let t=e.type.match(Kt);if(t){let n=parseInt(t[2]||"256");return(0===n||n>256||n%8!=0)&&zt.throwArgumentError("invalid "+t[1]+" bit length","param",e),new xt(n/8,"int"===t[1],e.name)}if(t=e.type.match(Wt),t){let n=parseInt(t[1]);return(0===n||n>32)&&zt.throwArgumentError("invalid bytes length","param",e),new St(n,e.name)}return zt.throwArgumentError("invalid type","type",e.type)}_getWordSize(){return 32}_getReader(e,t){return new nt(e,this._getWordSize(),this.coerceFunc,t)}_getWriter(){return new tt(this._getWordSize())}getDefaultValue(e){const t=e.map((e=>this._getCoder(Ue.from(e))));return new Ht(t,"_").defaultValue()}encode(e,t){e.length!==t.length&&zt.throwError("types/values length mismatch",X.errors.INVALID_ARGUMENT,{count:{types:e.length,values:t.length},value:{types:e,values:t}});const n=e.map((e=>this._getCoder(Ue.from(e)))),a=new Ht(n,"_"),r=this._getWriter();return a.encode(r,t),r.data}decode(e,t,n){const a=e.map((e=>this._getCoder(Ue.from(e))));return new Ht(a,"_").decode(this._getReader(te(t),n))}};function Zt(e){return st(qt(e))}const Jt=new X(Oe);class Yt extends Ne{}class Qt extends Ne{}class en extends Ne{}class tn extends Ne{static isIndexed(e){return!(!e||!e._isIndexed)}}const nn={"0x08c379a0":{signature:"Error(string)",name:"Error",inputs:["string"],reason:!0},"0x4e487b71":{signature:"Panic(uint256)",name:"Panic",inputs:["uint256"]}};function an(e,t){const n=new Error(`deferred error during ABI decoding triggered accessing ${e}`);return n.error=t,n}class rn{constructor(e){let t=[];t="string"==typeof e?JSON.parse(e):e,Te(this,"fragments",t.map((e=>Ve.from(e))).filter((e=>null!=e))),Te(this,"_abiCoder",we(new.target,"getAbiCoder")()),Te(this,"functions",{}),Te(this,"errors",{}),Te(this,"events",{}),Te(this,"structs",{}),this.fragments.forEach((e=>{let t=null;switch(e.type){case"constructor":return this.deploy?void Jt.warn("duplicate definition - constructor"):void Te(this,"deploy",e);case"function":t=this.functions;break;case"event":t=this.events;break;case"error":t=this.errors;break;default:return}let n=e.format();t[n]?Jt.warn("duplicate definition - "+n):t[n]=e})),this.deploy||Te(this,"deploy",He.from({payable:!1,type:"constructor"})),Te(this,"_isInterface",!0)}format(e){e||(e=xe.full),e===xe.sighash&&Jt.throwArgumentError("interface does not support formatting sighash","format",e);const t=this.fragments.map((t=>t.format(e)));return e===xe.json?JSON.stringify(t.map((e=>JSON.parse(e)))):t}static getAbiCoder(){return Xt}static getAddress(e){return gt(e)}static getSighash(e){return se(Zt(e.format()),0,4)}static getEventTopic(e){return Zt(e.format())}getFunction(e){if(ae(e)){for(const t in this.functions)if(e===this.getSighash(t))return this.functions[t];Jt.throwArgumentError("no matching function","sighash",e)}if(-1===e.indexOf("(")){const t=e.trim(),n=Object.keys(this.functions).filter((e=>e.split("(")[0]===t));return 0===n.length?Jt.throwArgumentError("no matching function","name",t):n.length>1&&Jt.throwArgumentError("multiple matching functions","name",t),this.functions[n[0]]}const t=this.functions[ze.fromString(e).format()];return t||Jt.throwArgumentError("no matching function","signature",e),t}getEvent(e){if(ae(e)){const t=e.toLowerCase();for(const e in this.events)if(t===this.getEventTopic(e))return this.events[e];Jt.throwArgumentError("no matching event","topichash",t)}if(-1===e.indexOf("(")){const t=e.trim(),n=Object.keys(this.events).filter((e=>e.split("(")[0]===t));return 0===n.length?Jt.throwArgumentError("no matching event","name",t):n.length>1&&Jt.throwArgumentError("multiple matching events","name",t),this.events[n[0]]}const t=this.events[Ge.fromString(e).format()];return t||Jt.throwArgumentError("no matching event","signature",e),t}getError(e){if(ae(e)){const t=we(this.constructor,"getSighash");for(const n in this.errors){if(e===t(this.errors[n]))return this.errors[n]}Jt.throwArgumentError("no matching error","sighash",e)}if(-1===e.indexOf("(")){const t=e.trim(),n=Object.keys(this.errors).filter((e=>e.split("(")[0]===t));return 0===n.length?Jt.throwArgumentError("no matching error","name",t):n.length>1&&Jt.throwArgumentError("multiple matching errors","name",t),this.errors[n[0]]}const t=this.errors[ze.fromString(e).format()];return t||Jt.throwArgumentError("no matching error","signature",e),t}getSighash(e){if("string"==typeof e)try{e=this.getFunction(e)}catch(t){try{e=this.getError(e)}catch(e){throw t}}return we(this.constructor,"getSighash")(e)}getEventTopic(e){return"string"==typeof e&&(e=this.getEvent(e)),we(this.constructor,"getEventTopic")(e)}_decodeParams(e,t){return this._abiCoder.decode(e,t)}_encodeParams(e,t){return this._abiCoder.encode(e,t)}encodeDeploy(e){return this._encodeParams(this.deploy.inputs,e||[])}decodeErrorResult(e,t){"string"==typeof e&&(e=this.getError(e));const n=te(t);return ie(n.slice(0,4))!==this.getSighash(e)&&Jt.throwArgumentError(`data signature does not match error ${e.name}.`,"data",ie(n)),this._decodeParams(e.inputs,n.slice(4))}encodeErrorResult(e,t){return"string"==typeof e&&(e=this.getError(e)),ie(ne([this.getSighash(e),this._encodeParams(e.inputs,t||[])]))}decodeFunctionData(e,t){"string"==typeof e&&(e=this.getFunction(e));const n=te(t);return ie(n.slice(0,4))!==this.getSighash(e)&&Jt.throwArgumentError(`data signature does not match function ${e.name}.`,"data",ie(n)),this._decodeParams(e.inputs,n.slice(4))}encodeFunctionData(e,t){return"string"==typeof e&&(e=this.getFunction(e)),ie(ne([this.getSighash(e),this._encodeParams(e.inputs,t||[])]))}decodeFunctionResult(e,t){"string"==typeof e&&(e=this.getFunction(e));let n=te(t),a=null,r="",i=null,s=null,o=null;switch(n.length%this._abiCoder._getWordSize()){case 0:try{return this._abiCoder.decode(e.outputs,n)}catch(e){}break;case 4:{const e=ie(n.slice(0,4)),t=nn[e];if(t)i=this._abiCoder.decode(t.inputs,n.slice(4)),s=t.name,o=t.signature,t.reason&&(a=i[0]),"Error"===s?r=`; VM Exception while processing transaction: reverted with reason string ${JSON.stringify(i[0])}`:"Panic"===s&&(r=`; VM Exception while processing transaction: reverted with panic code ${i[0]}`);else try{const t=this.getError(e);i=this._abiCoder.decode(t.inputs,n.slice(4)),s=t.name,o=t.format()}catch(e){}break}}return Jt.throwError("call revert exception"+r,X.errors.CALL_EXCEPTION,{method:e.format(),data:ie(t),errorArgs:i,errorName:s,errorSignature:o,reason:a})}encodeFunctionResult(e,t){return"string"==typeof e&&(e=this.getFunction(e)),ie(this._abiCoder.encode(e.outputs,t||[]))}encodeFilterTopics(e,t){"string"==typeof e&&(e=this.getEvent(e)),t.length>e.inputs.length&&Jt.throwError("too many arguments for "+e.format(),X.errors.UNEXPECTED_ARGUMENT,{argument:"values",value:t});let n=[];e.anonymous||n.push(this.getEventTopic(e));const a=(e,t)=>"string"===e.type?Zt(t):"bytes"===e.type?st(ie(t)):("bool"===e.type&&"boolean"==typeof t&&(t=t?"0x01":"0x00"),e.type.match(/^u?int/)&&(t=pe.from(t).toHexString()),"address"===e.type&&this._abiCoder.encode(["address"],[t]),oe(ie(t),32));for(t.forEach(((t,r)=>{let i=e.inputs[r];i.indexed?null==t?n.push(null):"array"===i.baseType||"tuple"===i.baseType?Jt.throwArgumentError("filtering with tuples or arrays not supported","contract."+i.name,t):Array.isArray(t)?n.push(t.map((e=>a(i,e)))):n.push(a(i,t)):null!=t&&Jt.throwArgumentError("cannot filter non-indexed parameters; must be null","contract."+i.name,t)}));n.length&&null===n[n.length-1];)n.pop();return n}encodeEventLog(e,t){"string"==typeof e&&(e=this.getEvent(e));const n=[],a=[],r=[];return e.anonymous||n.push(this.getEventTopic(e)),t.length!==e.inputs.length&&Jt.throwArgumentError("event arguments/values mismatch","values",t),e.inputs.forEach(((e,i)=>{const s=t[i];if(e.indexed)if("string"===e.type)n.push(Zt(s));else if("bytes"===e.type)n.push(st(s));else{if("tuple"===e.baseType||"array"===e.baseType)throw new Error("not implemented");n.push(this._abiCoder.encode([e.type],[s]))}else a.push(e),r.push(s)})),{data:this._abiCoder.encode(a,r),topics:n}}decodeEventLog(e,t,n){if("string"==typeof e&&(e=this.getEvent(e)),null!=n&&!e.anonymous){let t=this.getEventTopic(e);ae(n[0],32)&&n[0].toLowerCase()===t||Jt.throwError("fragment/topic mismatch",X.errors.INVALID_ARGUMENT,{argument:"topics[0]",expected:t,value:n[0]}),n=n.slice(1)}let a=[],r=[],i=[];e.inputs.forEach(((e,t)=>{e.indexed?"string"===e.type||"bytes"===e.type||"tuple"===e.baseType||"array"===e.baseType?(a.push(Ue.fromObject({type:"bytes32",name:e.name})),i.push(!0)):(a.push(e),i.push(!1)):(r.push(e),i.push(!1))}));let s=null!=n?this._abiCoder.decode(a,ne(n)):null,o=this._abiCoder.decode(r,t,!0),c=[],d=0,u=0;e.inputs.forEach(((e,t)=>{if(e.indexed)if(null==s)c[t]=new tn({_isIndexed:!0,hash:null});else if(i[t])c[t]=new tn({_isIndexed:!0,hash:s[u++]});else try{c[t]=s[u++]}catch(e){c[t]=e}else try{c[t]=o[d++]}catch(e){c[t]=e}if(e.name&&null==c[e.name]){const n=c[t];n instanceof Error?Object.defineProperty(c,e.name,{enumerable:!0,get:()=>{throw an(`property ${JSON.stringify(e.name)}`,n)}}):c[e.name]=n}}));for(let e=0;e<c.length;e++){const t=c[e];t instanceof Error&&Object.defineProperty(c,e,{enumerable:!0,get:()=>{throw an(`index ${e}`,t)}})}return Object.freeze(c)}parseTransaction(e){let t=this.getFunction(e.data.substring(0,10).toLowerCase());return t?new Qt({args:this._abiCoder.decode(t.inputs,"0x"+e.data.substring(10)),functionFragment:t,name:t.name,signature:t.format(),sighash:this.getSighash(t),value:pe.from(e.value||"0")}):null}parseLog(e){let t=this.getEvent(e.topics[0]);return!t||t.anonymous?null:new Yt({eventFragment:t,name:t.name,signature:t.format(),topic:this.getEventTopic(t),args:this.decodeEventLog(t,e.data,e.topics)})}parseError(e){const t=ie(e);let n=this.getError(t.substring(0,10).toLowerCase());return n?new en({args:this._abiCoder.decode(n.inputs,"0x"+t.substring(10)),errorFragment:n,name:n.name,signature:n.format(),sighash:this.getSighash(n)}):null}static isInterface(e){return!(!e||!e._isInterface)}}var sn=function(e,t,n,a){return new(n||(n=Promise))((function(r,i){function s(e){try{c(a.next(e))}catch(e){i(e)}}function o(e){try{c(a.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,o)}c((a=a.apply(e,t||[])).next())}))};const on=new X("abstract-provider/5.7.0");class cn{constructor(){on.checkAbstract(new.target,cn),Te(this,"_isProvider",!0)}getFeeData(){return sn(this,void 0,void 0,(function*(){const{block:e,gasPrice:t}=yield ve({block:this.getBlock("latest"),gasPrice:this.getGasPrice().catch((e=>null))});let n=null,a=null,r=null;return e&&e.baseFeePerGas&&(n=e.baseFeePerGas,r=pe.from("1500000000"),a=e.baseFeePerGas.mul(2).add(r)),{lastBaseFeePerGas:n,maxFeePerGas:a,maxPriorityFeePerGas:r,gasPrice:t}}))}addListener(e,t){return this.on(e,t)}removeListener(e,t){return this.off(e,t)}static isProvider(e){return!(!e||!e._isProvider)}}var dn=function(e,t,n,a){return new(n||(n=Promise))((function(r,i){function s(e){try{c(a.next(e))}catch(e){i(e)}}function o(e){try{c(a.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,o)}c((a=a.apply(e,t||[])).next())}))};const un=new X("abstract-signer/5.7.0"),fn=["accessList","ccipReadEnabled","chainId","customData","data","from","gasLimit","gasPrice","maxFeePerGas","maxPriorityFeePerGas","nonce","to","type","value"],ln=[X.errors.INSUFFICIENT_FUNDS,X.errors.NONCE_EXPIRED,X.errors.REPLACEMENT_UNDERPRICED];class pn{constructor(){un.checkAbstract(new.target,pn),Te(this,"_isSigner",!0)}getBalance(e){return dn(this,void 0,void 0,(function*(){return this._checkProvider("getBalance"),yield this.provider.getBalance(this.getAddress(),e)}))}getTransactionCount(e){return dn(this,void 0,void 0,(function*(){return this._checkProvider("getTransactionCount"),yield this.provider.getTransactionCount(this.getAddress(),e)}))}estimateGas(e){return dn(this,void 0,void 0,(function*(){this._checkProvider("estimateGas");const t=yield ve(this.checkTransaction(e));return yield this.provider.estimateGas(t)}))}call(e,t){return dn(this,void 0,void 0,(function*(){this._checkProvider("call");const n=yield ve(this.checkTransaction(e));return yield this.provider.call(n,t)}))}sendTransaction(e){return dn(this,void 0,void 0,(function*(){this._checkProvider("sendTransaction");const t=yield this.populateTransaction(e),n=yield this.signTransaction(t);return yield this.provider.sendTransaction(n)}))}getChainId(){return dn(this,void 0,void 0,(function*(){this._checkProvider("getChainId");return(yield this.provider.getNetwork()).chainId}))}getGasPrice(){return dn(this,void 0,void 0,(function*(){return this._checkProvider("getGasPrice"),yield this.provider.getGasPrice()}))}getFeeData(){return dn(this,void 0,void 0,(function*(){return this._checkProvider("getFeeData"),yield this.provider.getFeeData()}))}resolveName(e){return dn(this,void 0,void 0,(function*(){return this._checkProvider("resolveName"),yield this.provider.resolveName(e)}))}checkTransaction(e){for(const t in e)-1===fn.indexOf(t)&&un.throwArgumentError("invalid transaction key: "+t,"transaction",e);const t=Re(e);return null==t.from?t.from=this.getAddress():t.from=Promise.all([Promise.resolve(t.from),this.getAddress()]).then((t=>(t[0].toLowerCase()!==t[1].toLowerCase()&&un.throwArgumentError("from address mismatch","transaction",e),t[0]))),t}populateTransaction(e){return dn(this,void 0,void 0,(function*(){const t=yield ve(this.checkTransaction(e));null!=t.to&&(t.to=Promise.resolve(t.to).then((e=>dn(this,void 0,void 0,(function*(){if(null==e)return null;const t=yield this.resolveName(e);return null==t&&un.throwArgumentError("provided ENS name resolves to null","tx.to",e),t})))),t.to.catch((e=>{})));const n=null!=t.maxFeePerGas||null!=t.maxPriorityFeePerGas;if(null==t.gasPrice||2!==t.type&&!n?0!==t.type&&1!==t.type||!n||un.throwArgumentError("pre-eip-1559 transaction do not support maxFeePerGas/maxPriorityFeePerGas","transaction",e):un.throwArgumentError("eip-1559 transaction do not support gasPrice","transaction",e),2!==t.type&&null!=t.type||null==t.maxFeePerGas||null==t.maxPriorityFeePerGas)if(0===t.type||1===t.type)null==t.gasPrice&&(t.gasPrice=this.getGasPrice());else{const e=yield this.getFeeData();if(null==t.type)if(null!=e.maxFeePerGas&&null!=e.maxPriorityFeePerGas)if(t.type=2,null!=t.gasPrice){const e=t.gasPrice;delete t.gasPrice,t.maxFeePerGas=e,t.maxPriorityFeePerGas=e}else null==t.maxFeePerGas&&(t.maxFeePerGas=e.maxFeePerGas),null==t.maxPriorityFeePerGas&&(t.maxPriorityFeePerGas=e.maxPriorityFeePerGas);else null!=e.gasPrice?(n&&un.throwError("network does not support EIP-1559",X.errors.UNSUPPORTED_OPERATION,{operation:"populateTransaction"}),null==t.gasPrice&&(t.gasPrice=e.gasPrice),t.type=0):un.throwError("failed to get consistent fee data",X.errors.UNSUPPORTED_OPERATION,{operation:"signer.getFeeData"});else 2===t.type&&(null==t.maxFeePerGas&&(t.maxFeePerGas=e.maxFeePerGas),null==t.maxPriorityFeePerGas&&(t.maxPriorityFeePerGas=e.maxPriorityFeePerGas))}else t.type=2;return null==t.nonce&&(t.nonce=this.getTransactionCount("pending")),null==t.gasLimit&&(t.gasLimit=this.estimateGas(t).catch((e=>{if(ln.indexOf(e.code)>=0)throw e;return un.throwError("cannot estimate gas; transaction may fail or may require manual gas limit",X.errors.UNPREDICTABLE_GAS_LIMIT,{error:e,tx:t})}))),null==t.chainId?t.chainId=this.getChainId():t.chainId=Promise.all([Promise.resolve(t.chainId),this.getChainId()]).then((t=>(0!==t[1]&&t[0]!==t[1]&&un.throwArgumentError("chainId address mismatch","transaction",e),t[0]))),yield ve(t)}))}_checkProvider(e){this.provider||un.throwError("missing provider",X.errors.UNSUPPORTED_OPERATION,{operation:e||"_checkProvider"})}static isSigner(e){return!(!e||!e._isSigner)}}class hn extends pn{constructor(e,t){super(),Te(this,"address",e),Te(this,"provider",t||null)}getAddress(){return Promise.resolve(this.address)}_fail(e,t){return Promise.resolve().then((()=>{un.throwError(e,X.errors.UNSUPPORTED_OPERATION,{operation:t})}))}signMessage(e){return this._fail("VoidSigner cannot sign messages","signMessage")}signTransaction(e){return this._fail("VoidSigner cannot sign transactions","signTransaction")}_signTypedData(e,t,n){return this._fail("VoidSigner cannot sign typed data","signTypedData")}connect(e){return new hn(this.address,e)}}const mn=new X("transactions/5.7.0");var bn;function yn(e,t){return{address:gt(e),storageKeys:(t||[]).map(((t,n)=>(32!==function(e){if("string"!=typeof e)e=ie(e);else if(!ae(e)||e.length%2)return null;return(e.length-2)/2}(t)&&mn.throwArgumentError("invalid access list storageKey",`accessList[${e}:${n}]`,t),t.toLowerCase())))}}!function(e){e[e.legacy=0]="legacy",e[e.eip2930=1]="eip2930",e[e.eip1559=2]="eip1559"}(bn||(bn={}));var gn=function(e,t,n,a){return new(n||(n=Promise))((function(r,i){function s(e){try{c(a.next(e))}catch(e){i(e)}}function o(e){try{c(a.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,o)}c((a=a.apply(e,t||[])).next())}))};const En=new X("contracts/5.7.0");function Tn(e,t){return gn(this,void 0,void 0,(function*(){const n=yield t;"string"!=typeof n&&En.throwArgumentError("invalid address or ENS name","name",n);try{return gt(n)}catch(e){}e||En.throwError("a provider or signer is needed to resolve ENS names",X.errors.UNSUPPORTED_OPERATION,{operation:"resolveName"});const a=yield e.resolveName(n);return null==a&&En.throwArgumentError("resolver or addr is not configured for ENS name","name",n),a}))}function wn(e,t,n){return gn(this,void 0,void 0,(function*(){return Array.isArray(n)?yield Promise.all(n.map(((n,a)=>wn(e,Array.isArray(t)?t[a]:t[n.name],n)))):"address"===n.type?yield Tn(e,t):"tuple"===n.type?yield wn(e,t,n.components):"array"===n.baseType?Array.isArray(t)?yield Promise.all(t.map((t=>wn(e,t,n.arrayChildren)))):Promise.reject(En.makeError("invalid value for array",X.errors.INVALID_ARGUMENT,{argument:"value",value:t})):t}))}function vn(e,t,n){return gn(this,void 0,void 0,(function*(){let a={};n.length===t.inputs.length+1&&"object"==typeof n[n.length-1]&&(a=Re(n.pop())),En.checkArgumentCount(n.length,t.inputs.length,"passed to contract"),e.signer?a.from?a.from=ve({override:Tn(e.signer,a.from),signer:e.signer.getAddress()}).then((e=>gn(this,void 0,void 0,(function*(){return gt(e.signer)!==e.override&&En.throwError("Contract with a Signer cannot override from",X.errors.UNSUPPORTED_OPERATION,{operation:"overrides.from"}),e.override})))):a.from=e.signer.getAddress():a.from&&(a.from=Tn(e.provider,a.from));const r=yield ve({args:wn(e.signer||e.provider,n,t.inputs),address:e.resolvedAddress,overrides:ve(a)||{}}),i=e.interface.encodeFunctionData(t,r.args),s={data:i,to:r.address},o=r.overrides;if(null!=o.nonce&&(s.nonce=pe.from(o.nonce).toNumber()),null!=o.gasLimit&&(s.gasLimit=pe.from(o.gasLimit)),null!=o.gasPrice&&(s.gasPrice=pe.from(o.gasPrice)),null!=o.maxFeePerGas&&(s.maxFeePerGas=pe.from(o.maxFeePerGas)),null!=o.maxPriorityFeePerGas&&(s.maxPriorityFeePerGas=pe.from(o.maxPriorityFeePerGas)),null!=o.from&&(s.from=o.from),null!=o.type&&(s.type=o.type),null!=o.accessList&&(s.accessList=function(e){if(Array.isArray(e))return e.map(((e,t)=>Array.isArray(e)?(e.length>2&&mn.throwArgumentError("access list expected to be [ address, storageKeys[] ]",`value[${t}]`,e),yn(e[0],e[1])):yn(e.address,e.storageKeys)));const t=Object.keys(e).map((t=>{const n=e[t].reduce(((e,t)=>(e[t]=!0,e)),{});return yn(t,Object.keys(n).sort())}));return t.sort(((e,t)=>e.address.localeCompare(t.address))),t}(o.accessList)),null==s.gasLimit&&null!=t.gas){let e=21e3;const n=te(i);for(let t=0;t<n.length;t++)e+=4,n[t]&&(e+=64);s.gasLimit=pe.from(t.gas).add(e)}if(o.value){const e=pe.from(o.value);e.isZero()||t.payable||En.throwError("non-payable method cannot override value",X.errors.UNSUPPORTED_OPERATION,{operation:"overrides.value",value:a.value}),s.value=e}o.customData&&(s.customData=Re(o.customData)),o.ccipReadEnabled&&(s.ccipReadEnabled=!!o.ccipReadEnabled),delete a.nonce,delete a.gasLimit,delete a.gasPrice,delete a.from,delete a.value,delete a.type,delete a.accessList,delete a.maxFeePerGas,delete a.maxPriorityFeePerGas,delete a.customData,delete a.ccipReadEnabled;const c=Object.keys(a).filter((e=>null!=a[e]));return c.length&&En.throwError(`cannot override ${c.map((e=>JSON.stringify(e))).join(",")}`,X.errors.UNSUPPORTED_OPERATION,{operation:"overrides",overrides:c}),s}))}function Rn(e,t,n){const a=e.signer||e.provider;return function(...r){return gn(this,void 0,void 0,(function*(){let i;if(r.length===t.inputs.length+1&&"object"==typeof r[r.length-1]){const e=Re(r.pop());null!=e.blockTag&&(i=yield e.blockTag),delete e.blockTag,r.push(e)}null!=e.deployTransaction&&(yield e._deployed(i));const s=yield vn(e,t,r),o=yield a.call(s,i);try{let a=e.interface.decodeFunctionResult(t,o);return n&&1===t.outputs.length&&(a=a[0]),a}catch(t){throw t.code===X.errors.CALL_EXCEPTION&&(t.address=e.address,t.args=r,t.transaction=s),t}}))}}function An(e,t){return function(...n){return gn(this,void 0,void 0,(function*(){e.signer||En.throwError("sending a transaction requires a signer",X.errors.UNSUPPORTED_OPERATION,{operation:"sendTransaction"}),null!=e.deployTransaction&&(yield e._deployed());const a=yield vn(e,t,n),r=yield e.signer.sendTransaction(a);return function(e,t){const n=t.wait.bind(t);t.wait=t=>n(t).then((t=>(t.events=t.logs.map((n=>{let a=Ie(n),r=null;try{r=e.interface.parseLog(n)}catch(e){}return r&&(a.args=r.args,a.decode=(t,n)=>e.interface.decodeEventLog(r.eventFragment,t,n),a.event=r.name,a.eventSignature=r.signature),a.removeListener=()=>e.provider,a.getBlock=()=>e.provider.getBlock(t.blockHash),a.getTransaction=()=>e.provider.getTransaction(t.transactionHash),a.getTransactionReceipt=()=>Promise.resolve(t),a})),t)))}(e,r),r}))}}function _n(e,t,n){return t.constant?Rn(e,t,n):An(e,t)}function Cn(e){return!e.address||null!=e.topics&&0!==e.topics.length?(e.address||"*")+"@"+(e.topics?e.topics.map((e=>Array.isArray(e)?e.join("|"):e)).join(":"):""):"*"}class In{constructor(e,t){Te(this,"tag",e),Te(this,"filter",t),this._listeners=[]}addListener(e,t){this._listeners.push({listener:e,once:t})}removeListener(e){let t=!1;this._listeners=this._listeners.filter((n=>!(!t&&n.listener===e)||(t=!0,!1)))}removeAllListeners(){this._listeners=[]}listeners(){return this._listeners.map((e=>e.listener))}listenerCount(){return this._listeners.length}run(e){const t=this.listenerCount();return this._listeners=this._listeners.filter((t=>{const n=e.slice();return setTimeout((()=>{t.listener.apply(this,n)}),0),!t.once})),t}prepareEvent(e){}getEmit(e){return[e]}}class Nn extends In{constructor(){super("error",null)}}class On extends In{constructor(e,t,n,a){const r={address:e};let i=t.getEventTopic(n);a?(i!==a[0]&&En.throwArgumentError("topic mismatch","topics",a),r.topics=a.slice()):r.topics=[i],super(Cn(r),r),Te(this,"address",e),Te(this,"interface",t),Te(this,"fragment",n)}prepareEvent(e){super.prepareEvent(e),e.event=this.fragment.name,e.eventSignature=this.fragment.format(),e.decode=(e,t)=>this.interface.decodeEventLog(this.fragment,e,t);try{e.args=this.interface.decodeEventLog(this.fragment,e.data,e.topics)}catch(t){e.args=null,e.decodeError=t}}getEmit(e){const t=function(e){const t=[],n=function(e,a){if(Array.isArray(a))for(let r in a){const i=e.slice();i.push(r);try{n(i,a[r])}catch(e){t.push({path:i,error:e})}}};return n([],e),t}(e.args);if(t.length)throw t[0].error;const n=(e.args||[]).slice();return n.push(e),n}}class Sn extends In{constructor(e,t){super("*",{address:e}),Te(this,"address",e),Te(this,"interface",t)}prepareEvent(e){super.prepareEvent(e);try{const t=this.interface.parseLog(e);e.event=t.name,e.eventSignature=t.signature,e.decode=(e,n)=>this.interface.decodeEventLog(t.eventFragment,e,n),e.args=t.args}catch(e){}}}class Mn{constructor(e,t,n){Te(this,"interface",we(new.target,"getInterface")(t)),null==n?(Te(this,"provider",null),Te(this,"signer",null)):pn.isSigner(n)?(Te(this,"provider",n.provider||null),Te(this,"signer",n)):cn.isProvider(n)?(Te(this,"provider",n),Te(this,"signer",null)):En.throwArgumentError("invalid signer or provider","signerOrProvider",n),Te(this,"callStatic",{}),Te(this,"estimateGas",{}),Te(this,"functions",{}),Te(this,"populateTransaction",{}),Te(this,"filters",{});{const e={};Object.keys(this.interface.events).forEach((t=>{const n=this.interface.events[t];Te(this.filters,t,((...e)=>({address:this.address,topics:this.interface.encodeFilterTopics(n,e)}))),e[n.name]||(e[n.name]=[]),e[n.name].push(t)})),Object.keys(e).forEach((t=>{const n=e[t];1===n.length?Te(this.filters,t,this.filters[n[0]]):En.warn(`Duplicate definition of ${t} (${n.join(", ")})`)}))}if(Te(this,"_runningEvents",{}),Te(this,"_wrappedEmits",{}),null==e&&En.throwArgumentError("invalid contract address or ENS name","addressOrName",e),Te(this,"address",e),this.provider)Te(this,"resolvedAddress",Tn(this.provider,e));else try{Te(this,"resolvedAddress",Promise.resolve(gt(e)))}catch(e){En.throwError("provider is required to use ENS name as contract address",X.errors.UNSUPPORTED_OPERATION,{operation:"new Contract"})}this.resolvedAddress.catch((e=>{}));const a={},r={};Object.keys(this.interface.functions).forEach((e=>{const t=this.interface.functions[e];if(r[e])En.warn(`Duplicate ABI entry for ${JSON.stringify(e)}`);else{r[e]=!0;{const n=t.name;a[`%${n}`]||(a[`%${n}`]=[]),a[`%${n}`].push(e)}null==this[e]&&Te(this,e,_n(this,t,!0)),null==this.functions[e]&&Te(this.functions,e,_n(this,t,!1)),null==this.callStatic[e]&&Te(this.callStatic,e,Rn(this,t,!0)),null==this.populateTransaction[e]&&Te(this.populateTransaction,e,function(e,t){return function(...n){return vn(e,t,n)}}(this,t)),null==this.estimateGas[e]&&Te(this.estimateGas,e,function(e,t){const n=e.signer||e.provider;return function(...a){return gn(this,void 0,void 0,(function*(){n||En.throwError("estimate require a provider or signer",X.errors.UNSUPPORTED_OPERATION,{operation:"estimateGas"});const r=yield vn(e,t,a);return yield n.estimateGas(r)}))}}(this,t))}})),Object.keys(a).forEach((e=>{const t=a[e];if(t.length>1)return;e=e.substring(1);const n=t[0];try{null==this[e]&&Te(this,e,this[n])}catch(e){}null==this.functions[e]&&Te(this.functions,e,this.functions[n]),null==this.callStatic[e]&&Te(this.callStatic,e,this.callStatic[n]),null==this.populateTransaction[e]&&Te(this.populateTransaction,e,this.populateTransaction[n]),null==this.estimateGas[e]&&Te(this.estimateGas,e,this.estimateGas[n])}))}static getContractAddress(e){return Tt(e)}static getInterface(e){return rn.isInterface(e)?e:new rn(e)}deployed(){return this._deployed()}_deployed(e){return this._deployedPromise||(this.deployTransaction?this._deployedPromise=this.deployTransaction.wait().then((()=>this)):this._deployedPromise=this.provider.getCode(this.address,e).then((e=>("0x"===e&&En.throwError("contract not deployed",X.errors.UNSUPPORTED_OPERATION,{contractAddress:this.address,operation:"getDeployed"}),this)))),this._deployedPromise}fallback(e){this.signer||En.throwError("sending a transactions require a signer",X.errors.UNSUPPORTED_OPERATION,{operation:"sendTransaction(fallback)"});const t=Re(e||{});return["from","to"].forEach((function(e){null!=t[e]&&En.throwError("cannot override "+e,X.errors.UNSUPPORTED_OPERATION,{operation:e})})),t.to=this.resolvedAddress,this.deployed().then((()=>this.signer.sendTransaction(t)))}connect(e){"string"==typeof e&&(e=new hn(e,this.provider));const t=new this.constructor(this.address,this.interface,e);return this.deployTransaction&&Te(t,"deployTransaction",this.deployTransaction),t}attach(e){return new this.constructor(e,this.interface,this.signer||this.provider)}static isIndexed(e){return tn.isIndexed(e)}_normalizeRunningEvent(e){return this._runningEvents[e.tag]?this._runningEvents[e.tag]:e}_getRunningEvent(e){if("string"==typeof e){if("error"===e)return this._normalizeRunningEvent(new Nn);if("event"===e)return this._normalizeRunningEvent(new In("event",null));if("*"===e)return this._normalizeRunningEvent(new Sn(this.address,this.interface));const t=this.interface.getEvent(e);return this._normalizeRunningEvent(new On(this.address,this.interface,t))}if(e.topics&&e.topics.length>0){try{const t=e.topics[0];if("string"!=typeof t)throw new Error("invalid topic");const n=this.interface.getEvent(t);return this._normalizeRunningEvent(new On(this.address,this.interface,n,e.topics))}catch(e){}const t={address:this.address,topics:e.topics};return this._normalizeRunningEvent(new In(Cn(t),t))}return this._normalizeRunningEvent(new Sn(this.address,this.interface))}_checkRunningEvents(e){if(0===e.listenerCount()){delete this._runningEvents[e.tag];const t=this._wrappedEmits[e.tag];t&&e.filter&&(this.provider.off(e.filter,t),delete this._wrappedEmits[e.tag])}}_wrapEvent(e,t,n){const a=Ie(t);return a.removeListener=()=>{n&&(e.removeListener(n),this._checkRunningEvents(e))},a.getBlock=()=>this.provider.getBlock(t.blockHash),a.getTransaction=()=>this.provider.getTransaction(t.transactionHash),a.getTransactionReceipt=()=>this.provider.getTransactionReceipt(t.transactionHash),e.prepareEvent(a),a}_addEventListener(e,t,n){if(this.provider||En.throwError("events require a provider or a signer with a provider",X.errors.UNSUPPORTED_OPERATION,{operation:"once"}),e.addListener(t,n),this._runningEvents[e.tag]=e,!this._wrappedEmits[e.tag]){const n=n=>{let a=this._wrapEvent(e,n,t);if(null==a.decodeError)try{const t=e.getEmit(a);this.emit(e.filter,...t)}catch(e){a.decodeError=e.error}null!=e.filter&&this.emit("event",a),null!=a.decodeError&&this.emit("error",a.decodeError,a)};this._wrappedEmits[e.tag]=n,null!=e.filter&&this.provider.on(e.filter,n)}}queryFilter(e,t,n){const a=this._getRunningEvent(e),r=Re(a.filter);return"string"==typeof t&&ae(t,32)?(null!=n&&En.throwArgumentError("cannot specify toBlock with blockhash","toBlock",n),r.blockHash=t):(r.fromBlock=null!=t?t:0,r.toBlock=null!=n?n:"latest"),this.provider.getLogs(r).then((e=>e.map((e=>this._wrapEvent(a,e,null)))))}on(e,t){return this._addEventListener(this._getRunningEvent(e),t,!1),this}once(e,t){return this._addEventListener(this._getRunningEvent(e),t,!0),this}emit(e,...t){if(!this.provider)return!1;const n=this._getRunningEvent(e),a=n.run(t)>0;return this._checkRunningEvents(n),a}listenerCount(e){return this.provider?null==e?Object.keys(this._runningEvents).reduce(((e,t)=>e+this._runningEvents[t].listenerCount()),0):this._getRunningEvent(e).listenerCount():0}listeners(e){if(!this.provider)return[];if(null==e){const e=[];for(let t in this._runningEvents)this._runningEvents[t].listeners().forEach((t=>{e.push(t)}));return e}return this._getRunningEvent(e).listeners()}removeAllListeners(e){if(!this.provider)return this;if(null==e){for(const e in this._runningEvents){const t=this._runningEvents[e];t.removeAllListeners(),this._checkRunningEvents(t)}return this}const t=this._getRunningEvent(e);return t.removeAllListeners(),this._checkRunningEvents(t),this}off(e,t){if(!this.provider)return this;const n=this._getRunningEvent(e);return n.removeListener(t),this._checkRunningEvents(n),this}removeListener(e,t){return this.off(e,t)}}class kn extends Mn{}var Pn;!function(e){e.SUCCESS="SUCCESS",e.PENDING="PENDING",e.FAILED="FAILED"}(Pn||(Pn={}));const Dn=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"rootToken",type:"address"},{indexed:!0,internalType:"address",name:"childToken",type:"address"},{indexed:!1,internalType:"address",name:"depositor",type:"address"},{indexed:!0,internalType:"address",name:"receiver",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ERC20Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"rootToken",type:"address"},{indexed:!0,internalType:"address",name:"childToken",type:"address"},{indexed:!1,internalType:"address",name:"withdrawer",type:"address"},{indexed:!0,internalType:"address",name:"receiver",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ERC20Withdraw",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint8",name:"version",type:"uint8"}],name:"Initialized",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"rootToken",type:"address"},{indexed:!0,internalType:"address",name:"childToken",type:"address"}],name:"TokenMapped",type:"event"},{inputs:[],name:"DEPOSIT_SIG",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"MAP_TOKEN_SIG",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"NATIVE_TOKEN",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"WITHDRAW_SIG",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"childERC20Predicate",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"childTokenTemplate",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20Metadata",name:"rootToken",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"receiver",type:"address"}],name:"depositNativeTo",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC20Metadata",name:"rootToken",type:"address"},{internalType:"address",name:"receiver",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"depositTo",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"exitHelper",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newStateSender",type:"address"},{internalType:"address",name:"newExitHelper",type:"address"},{internalType:"address",name:"newChildERC20Predicate",type:"address"},{internalType:"address",name:"newChildTokenTemplate",type:"address"},{internalType:"address",name:"nativeTokenRootAddress",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20Metadata",name:"rootToken",type:"address"}],name:"mapToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"},{internalType:"address",name:"sender",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"onL2StateReceive",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"rootTokenToChildToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"stateSender",outputs:[{internalType:"contract IStateSender",name:"",type:"address"}],stateMutability:"view",type:"function"}],Ln=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var xn;!function(e){e.UNSUPPORTED_ERROR="UNSUPPORTED_ERROR",e.INVALID_ADDRESS="INVALID_ADDRESS",e.INVALID_AMOUNT="INVALID_AMOUNT",e.INTERNAL_ERROR="INTERNAL_ERROR",e.PROVIDER_ERROR="PROVIDER_ERROR",e.TRANSACTION_REVERTED="TRANSACTION_REVERTED",e.INVALID_TOKEN="INVALID_TOKEN",e.INVALID_TRANSACTION="INVALID_TRANSACTION"}(xn||(xn={}));class Fn extends Error{type;constructor(e,t){super(e),this.type=t}}const Un=async(e,t,n)=>{try{return await e()}catch(e){let a=`${t}: ${e.message}`||"UnknownError";throw n&&(a=`${n}: ${a}`),new Fn(a,t)}},Bn=[{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"receiver",type:"address"},{indexed:!1,internalType:"bytes",name:"data",type:"bytes"}],name:"StateSynced",type:"event"},{inputs:[],name:"MAX_LENGTH",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"counter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"receiver",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"syncState",outputs:[],stateMutability:"nonpayable",type:"function"}],Vn=[{inputs:[{internalType:"string",name:"only",type:"string"}],name:"Unauthorized",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"startId",type:"uint256"},{indexed:!0,internalType:"uint256",name:"endId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"root",type:"bytes32"}],name:"NewCommitment",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"counter",type:"uint256"},{indexed:!0,internalType:"bool",name:"status",type:"bool"},{indexed:!1,internalType:"bytes",name:"message",type:"bytes"}],name:"StateSyncResult",type:"event"},{inputs:[],name:"NATIVE_TOKEN_CONTRACT",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"NATIVE_TRANSFER_PRECOMPILE",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"NATIVE_TRANSFER_PRECOMPILE_GAS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"SYSTEM",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"VALIDATOR_PKCHECK_PRECOMPILE",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"VALIDATOR_PKCHECK_PRECOMPILE_GAS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[][]",name:"proofs",type:"bytes32[][]"},{components:[{internalType:"uint256",name:"id",type:"uint256"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"receiver",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],internalType:"struct StateReceiver.StateSync[]",name:"objs",type:"tuple[]"}],name:"batchExecute",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"uint256",name:"startId",type:"uint256"},{internalType:"uint256",name:"endId",type:"uint256"},{internalType:"bytes32",name:"root",type:"bytes32"}],internalType:"struct StateReceiver.StateSyncCommitment",name:"commitment",type:"tuple"},{internalType:"bytes",name:"signature",type:"bytes"},{internalType:"bytes",name:"bitmap",type:"bytes"}],name:"commit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"commitmentCounter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"commitmentIds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"commitments",outputs:[{internalType:"uint256",name:"startId",type:"uint256"},{internalType:"uint256",name:"endId",type:"uint256"},{internalType:"bytes32",name:"root",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"proof",type:"bytes32[]"},{components:[{internalType:"uint256",name:"id",type:"uint256"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"receiver",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],internalType:"struct StateReceiver.StateSync",name:"obj",type:"tuple"}],name:"execute",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"getCommitmentByStateSyncId",outputs:[{components:[{internalType:"uint256",name:"startId",type:"uint256"},{internalType:"uint256",name:"endId",type:"uint256"},{internalType:"bytes32",name:"root",type:"bytes32"}],internalType:"struct StateReceiver.StateSyncCommitment",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"getRootByStateSyncId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"lastCommittedId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"processedStateSyncs",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"}];const Gn=[{inputs:[{internalType:"string",name:"only",type:"string"}],name:"Unauthorized",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint8",name:"version",type:"uint8"}],name:"Initialized",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"rootToken",type:"address"},{indexed:!0,internalType:"address",name:"childToken",type:"address"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"receiver",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"L2ERC20Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"rootToken",type:"address"},{indexed:!0,internalType:"address",name:"childToken",type:"address"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"receiver",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"L2ERC20Withdraw",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"rootToken",type:"address"},{indexed:!0,internalType:"address",name:"childToken",type:"address"}],name:"L2TokenMapped",type:"event"},{inputs:[],name:"DEPOSIT_SIG",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"MAP_TOKEN_SIG",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"NATIVE_TOKEN_CONTRACT",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"NATIVE_TRANSFER_PRECOMPILE",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"NATIVE_TRANSFER_PRECOMPILE_GAS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"SYSTEM",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"VALIDATOR_PKCHECK_PRECOMPILE",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"VALIDATOR_PKCHECK_PRECOMPILE_GAS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"WITHDRAW_SIG",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"childTokenTemplate",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newL2StateSender",type:"address"},{internalType:"address",name:"newStateReceiver",type:"address"},{internalType:"address",name:"newRootERC20Predicate",type:"address"},{internalType:"address",name:"newChildTokenTemplate",type:"address"},{internalType:"address",name:"newNativeTokenRootAddress",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"l2StateSender",outputs:[{internalType:"contract IStateSender",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"},{internalType:"address",name:"sender",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"onStateReceive",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"rootERC20Predicate",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"rootTokenToChildToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"stateReceiver",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IChildERC20",name:"childToken",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IChildERC20",name:"childToken",type:"address"},{internalType:"address",name:"receiver",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawTo",outputs:[],stateMutability:"nonpayable",type:"function"}],qn=[{anonymous:!1,inputs:[{indexed:!1,internalType:"uint8",name:"version",type:"uint8"}],name:"Initialized",type:"event"},{inputs:[],name:"DOMAIN",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"bls",outputs:[{internalType:"contract IBLS",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"bn256G2",outputs:[{internalType:"contract IBN256G2",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"checkpointBlockNumbers",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"checkpoints",outputs:[{internalType:"uint256",name:"epoch",type:"uint256"},{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"eventRoot",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"currentCheckpointBlockNumber",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"currentEpoch",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"currentValidatorSet",outputs:[{internalType:"address",name:"_address",type:"address"},{internalType:"uint256",name:"votingPower",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"currentValidatorSetHash",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"currentValidatorSetLength",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getCheckpointBlock",outputs:[{internalType:"bool",name:"",type:"bool"},{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"leaf",type:"bytes32"},{internalType:"uint256",name:"leafIndex",type:"uint256"},{internalType:"bytes32[]",name:"proof",type:"bytes32[]"}],name:"getEventMembershipByBlockNumber",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"epoch",type:"uint256"},{internalType:"bytes32",name:"leaf",type:"bytes32"},{internalType:"uint256",name:"leafIndex",type:"uint256"},{internalType:"bytes32[]",name:"proof",type:"bytes32[]"}],name:"getEventMembershipByEpoch",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getEventRootByBlock",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IBLS",name:"newBls",type:"address"},{internalType:"contract IBN256G2",name:"newBn256G2",type:"address"},{internalType:"uint256",name:"chainId_",type:"uint256"},{components:[{internalType:"address",name:"_address",type:"address"},{internalType:"uint256[4]",name:"blsKey",type:"uint256[4]"},{internalType:"uint256",name:"votingPower",type:"uint256"}],internalType:"struct ICheckpointManager.Validator[]",name:"newValidatorSet",type:"tuple[]"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"blockHash",type:"bytes32"},{internalType:"uint256",name:"blockRound",type:"uint256"},{internalType:"bytes32",name:"currentValidatorSetHash",type:"bytes32"}],internalType:"struct ICheckpointManager.CheckpointMetadata",name:"checkpointMetadata",type:"tuple"},{components:[{internalType:"uint256",name:"epoch",type:"uint256"},{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"eventRoot",type:"bytes32"}],internalType:"struct ICheckpointManager.Checkpoint",name:"checkpoint",type:"tuple"},{internalType:"uint256[2]",name:"signature",type:"uint256[2]"},{components:[{internalType:"address",name:"_address",type:"address"},{internalType:"uint256[4]",name:"blsKey",type:"uint256[4]"},{internalType:"uint256",name:"votingPower",type:"uint256"}],internalType:"struct ICheckpointManager.Validator[]",name:"newValidatorSet",type:"tuple[]"},{internalType:"bytes",name:"bitmap",type:"bytes"}],name:"submit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"totalVotingPower",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"}];function jn(e){const t=function(e){const t=te(e),n=lt(t,0);return n.consumed!==t.length&&ot.throwArgumentError("invalid rlp data","data",e),n.result}(`0x${e.substring(66)}`);return{validators:t[0],parent:t[1],committed:t[2],checkpoint:{blockRound:t[3][0],epochNumber:parseInt(t[3][1],16),currentValidatorHash:t[3][2],nextValidatorHash:t[3][3],eventRoot:t[3][4]}}}const $n=[{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"receiver",type:"address"},{indexed:!1,internalType:"bytes",name:"data",type:"bytes"}],name:"L2StateSynced",type:"event"},{inputs:[],name:"MAX_LENGTH",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"counter",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"receiver",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"syncState",outputs:[],stateMutability:"nonpayable",type:"function"}],Hn=[{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!0,internalType:"bool",name:"success",type:"bool"},{indexed:!1,internalType:"bytes",name:"returnData",type:"bytes"}],name:"ExitProcessed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint8",name:"version",type:"uint8"}],name:"Initialized",type:"event"},{inputs:[{components:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"uint256",name:"leafIndex",type:"uint256"},{internalType:"bytes",name:"unhashedLeaf",type:"bytes"},{internalType:"bytes32[]",name:"proof",type:"bytes32[]"}],internalType:"struct IExitHelper.BatchExitInput[]",name:"inputs",type:"tuple[]"}],name:"batchExit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"checkpointManager",outputs:[{internalType:"contract ICheckpointManager",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"uint256",name:"leafIndex",type:"uint256"},{internalType:"bytes",name:"unhashedLeaf",type:"bytes"},{internalType:"bytes32[]",name:"proof",type:"bytes32[]"}],name:"exit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract ICheckpointManager",name:"newCheckpointManager",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"processedExits",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"}],zn=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint8",name:"version",type:"uint8"}],name:"Initialized",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"userAddress",type:"address"},{indexed:!1,internalType:"address",name:"relayerAddress",type:"address"},{indexed:!1,internalType:"bytes",name:"functionSignature",type:"bytes"}],name:"MetaTransactionExecuted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"burn",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"userAddress",type:"address"},{internalType:"bytes",name:"functionSignature",type:"bytes"},{internalType:"bytes32",name:"sigR",type:"bytes32"},{internalType:"bytes32",name:"sigS",type:"bytes32"},{internalType:"uint8",name:"sigV",type:"uint8"}],name:"executeMetaTransaction",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"getNonce",outputs:[{internalType:"uint256",name:"nonce",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"rootToken_",type:"address"},{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"},{internalType:"uint8",name:"decimals_",type:"uint8"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"offset",type:"uint256"}],name:"invalidateNext",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"mint",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"predicate",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"rootToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class Wn{config;constructor(e){this.config=e}async getFee(e){if(this.validateChainConfiguration(),"NATIVE"!==e.token&&!Et(e.token))throw new Fn(`token address ${e.token} is not a valid address`,xn.INVALID_ADDRESS);return{bridgeable:!0,feeAmount:pe.from(0)}}async getUnsignedApproveDepositBridgeTx(e){if(this.validateChainConfiguration(),Wn.validateDepositArgs(e.depositorAddress,e.depositAmount,e.token),"NATIVE"===e.token)return{unsignedTx:null};const t=await Un((async()=>new kn(e.token,Ln,this.config.rootProvider)),xn.PROVIDER_ERROR),n=await Un((()=>t.allowance(e.depositorAddress,this.config.bridgeContracts.rootChainERC20Predicate)),xn.PROVIDER_ERROR);if(n.gte(e.depositAmount))return{unsignedTx:null};const a=e.depositAmount.sub(n);return{unsignedTx:{data:await Un((async()=>t.interface.encodeFunctionData("approve",[this.config.bridgeContracts.rootChainERC20Predicate,a])),xn.INTERNAL_ERROR),to:e.token,value:0,from:e.depositorAddress}}}async getUnsignedDepositTx(e){this.validateChainConfiguration(),Wn.validateDepositArgs(e.recipientAddress,e.depositAmount,e.token);const t=await Un((async()=>new kn(this.config.bridgeContracts.rootChainERC20Predicate,Dn)),xn.INTERNAL_ERROR),n=gt(e.recipientAddress);if("NATIVE"===e.token){return{unsignedTx:{data:await Un((async()=>t.interface.encodeFunctionData("depositNativeTo",[n])),xn.INTERNAL_ERROR),to:this.config.bridgeContracts.rootChainERC20Predicate,value:e.depositAmount}}}const a=gt(e.token);return{unsignedTx:{data:await Un((async()=>t.interface.encodeFunctionData("depositTo",[a,n,e.depositAmount])),xn.INTERNAL_ERROR),to:this.config.bridgeContracts.rootChainERC20Predicate,value:0}}}async waitForDeposit(e){this.validateChainConfiguration();const t=await Un((async()=>this.config.rootProvider.waitForTransaction(e.transactionHash,this.config.rootChainFinalityBlocks)),xn.PROVIDER_ERROR);if(1!==t.status)throw new Fn(`${t.transactionHash} on rootchain was reverted`,xn.TRANSACTION_REVERTED);const n=await Un((async()=>this.getRootStateSyncID(t)),xn.PROVIDER_ERROR),a=await Un((async()=>await this.config.rootProvider.getBlock(t.blockNumber)),xn.PROVIDER_ERROR,`failed to query block ${t.blockNumber} on rootchain`),r=await Un((async()=>async function(e,t,n,a){let r=0,i=await e.getBlockNumber();for(;i!==r+1;){const s=Math.floor((r+i)/2),o=await e.getBlock(s),c=t-o.timestamp;if(c>a&&c<n+a)return s;o.timestamp<t?r=s:i=s}return r}(this.config.childProvider,a.timestamp,this.config.blockTime,this.config.clockInaccuracy)),xn.PROVIDER_ERROR),i=r+this.config.maxDepositBlockDelay;return{status:await Un((async()=>this.waitForChildStateSync(n,this.config.pollInterval,r,i)),xn.PROVIDER_ERROR)}}async getChildToken(e){this.validateChainConfiguration();const t="NATIVE"===e.rootToken?k:e.rootToken;if(!Et(t))throw new Fn(`token address ${t} is not a valid address`,xn.INVALID_ADDRESS);return{childToken:await Un((async()=>{const e=new kn(this.config.bridgeContracts.rootChainERC20Predicate,Dn,this.config.rootProvider);return await e.rootTokenToChildToken(t)}),xn.PROVIDER_ERROR,"failed to query rootTokenToChildToken mapping")}}async getRootToken(e){this.validateChainConfiguration();const t=await Un((async()=>{const t=new kn(e.childToken,zn,this.config.childProvider);return await t.rootToken()}),xn.PROVIDER_ERROR,"failed to query the root token from the child token contract");return{rootToken:t===k?"NATIVE":t}}async getUnsignedWithdrawTx(e){this.validateChainConfiguration(),Wn.validateWithdrawArgs(e.recipientAddress,e.withdrawAmount,e.token);const t=await Un((async()=>new kn(this.config.bridgeContracts.childChainERC20Predicate,Gn)),xn.INTERNAL_ERROR);return{unsignedTx:{data:await Un((async()=>t.interface.encodeFunctionData("withdrawTo",[e.token,e.recipientAddress,e.withdrawAmount])),xn.INTERNAL_ERROR),to:this.config.bridgeContracts.childChainERC20Predicate,value:0}}}async waitForWithdrawal(e){this.validateChainConfiguration();const t=()=>new Promise((e=>{setTimeout(e,this.config.pollInterval)}));return await Un((async()=>{const n=await this.config.childProvider.getTransactionReceipt(e.transactionHash),a=jn((await this.config.childProvider.getBlock(n.blockNumber)).extraData),r=new kn(this.config.bridgeContracts.rootChainCheckpointManager,qn,this.config.rootProvider),i=async()=>await r.currentEpoch()>=a.checkpoint.epochNumber?null:(await t(),i());await i()}),xn.PROVIDER_ERROR),{}}async getUnsignedExitTx(e){this.validateChainConfiguration();const t=await Un((async()=>await this.config.childProvider.getTransactionReceipt(e.transactionHash)),xn.PROVIDER_ERROR),n=t.logs.filter((e=>e.address.toLowerCase()===M));if(1!==n.length)throw new Fn(`expected 1 log in tx ${t.transactionHash} from address ${M}`,xn.INVALID_TRANSACTION);const a=await Un((async()=>{const e=new rn($n).parseLog(n[0]);if("L2StateSynced(uint256,address,address,bytes)"!==e.signature)throw new Error(`expected L2StateSynced event in tx ${t.transactionHash}`);return e}),xn.INVALID_TRANSACTION),r=await Un((async()=>new kn(this.config.bridgeContracts.rootChainExitHelper,Hn,this.config.rootProvider)),xn.PROVIDER_ERROR),i=await Un((async()=>this.config.childProvider.send("bridge_generateExitProof",[a.args.id.toHexString()])),xn.PROVIDER_ERROR);return{unsignedTx:{data:await Un((async()=>{const e=Xt.encode(["uint256","address","address","bytes"],a.args);return r.interface.encodeFunctionData("exit",[i.Metadata.CheckpointBlock,i.Metadata.LeafIndex,e,i.Data])}),xn.INTERNAL_ERROR),to:this.config.bridgeContracts.rootChainExitHelper,value:0}}}async waitForChildStateSync(e,t,n,a){const r=new kn(this.config.bridgeContracts.childChainStateReceiver,Vn,this.config.childProvider),i=r.filters.StateSyncResult(e,null,null),s=async()=>{const o=await(async()=>r.queryFilter(i,n,a))();if(o.length>1)throw new Error(`expected maximum of 1 events with statesync id ${e} but found ${o.length}`);return 1===o.length?o[0]:(await new Promise((e=>{setTimeout(e,t)})),s())},o=await s();if(!o)throw new Error("failed to find child deposit event");if(!o.args)throw new Error("child deposit event has no args");if(null==o.args.status)throw new Error("child deposit event has no status");return o.args.status?Pn.SUCCESS:Pn.FAILED}async getRootStateSyncID(e){const t=new rn(Bn),n=e.logs.filter((e=>e.address.toLowerCase()===this.config.bridgeContracts.rootChainStateSender.toLowerCase()));if(1!==n.length)throw new Error(`expected at least 1 log in tx ${e.transactionHash}`);const a=t.parseLog(n[0]);if("StateSynced(uint256,address,address,bytes)"!==a.signature)throw new Error(`expected state sync event in tx ${e.transactionHash}`);return parseInt(a.args.id,10)}static validateDepositArgs(e,t,n){if(!Et(e))throw new Fn(`address ${e} is not a valid address`,xn.INVALID_ADDRESS);if(t.isNegative()||t.isZero())throw new Fn(`deposit amount ${t.toString()} is invalid`,xn.INVALID_AMOUNT);if("NATIVE"!==n&&!Et(n))throw new Fn(`token address ${n} is not a valid address`,xn.INVALID_ADDRESS)}static validateWithdrawArgs(e,t,n){if(!Et(e))throw new Fn(`withdrawer address ${e} is not a valid address`,xn.INVALID_ADDRESS);if(t.isNegative()||t.isZero())throw new Fn(`withdraw amount ${t.toString()} is invalid`,xn.INVALID_AMOUNT);if(!Et(n))throw new Fn(`token address ${n} is not a valid address`,xn.INVALID_ADDRESS)}async validateChainConfiguration(){const e="Please upgrade to the latest version of the Bridge SDK or provide valid configuration",t=await Un((async()=>this.config.rootProvider.getNetwork()),xn.PROVIDER_ERROR);if(t.chainId.toString()!==this.config.bridgeInstance.rootChainID)throw new Fn(`Rootchain provider chainID ${t.chainId} does not match expected chainID ${this.config.bridgeInstance.rootChainID}. ${e}`,xn.UNSUPPORTED_ERROR);const n=await this.config.childProvider.getNetwork();if(n.chainId.toString()!==this.config.bridgeInstance.childChainID)throw new Fn(`Childchain provider chainID ${n.chainId} does not match expected chainID ${this.config.bridgeInstance.childChainID}. ${e}`,xn.UNSUPPORTED_ERROR)}}var Kn;!function(e){e.PRODUCTION="production",e.SANDBOX="sandbox"}(Kn||(Kn={}));const Xn=[P,D],Zn={[Kn.SANDBOX]:Xn,[Kn.PRODUCTION]:[]},Jn=(new Map).set(P,{rootChainERC20Predicate:"0x75E468cF088F947B96422996132FbE71160F21F1",rootChainStateSender:"0xbdC11416f01b122b7621855e61c99C7ED986F894",rootChainCheckpointManager:"0x0721b564a96466b864A998D31846Ba409d21092B",rootChainExitHelper:"0x0a2cb3f90aE65429E5c516af500F59d8fed51844",childChainERC20Predicate:"0x0000000000000000000000000000000000001004",childChainStateReceiver:"0x0000000000000000000000000000000000001001"}).set(D,{rootChainERC20Predicate:"0x1118Cc83780d07ef99F84fD1C0E10CEd49AF3613",rootChainStateSender:"0x41716a0DD85ae257DD011A97cE1470F609871270",rootChainCheckpointManager:"0xfD69e3FCd72C6374623eeb156dd2C4159eBa7327",rootChainExitHelper:"0x270D2B290c8183De23eCD17C7DaAE59fd084fE70",childChainERC20Predicate:"0x0000000000000000000000000000000000001004",childChainStateReceiver:"0x0000000000000000000000000000000000001001"}).set(L,{rootChainERC20Predicate:"0x",rootChainStateSender:"0x",rootChainCheckpointManager:"0x",rootChainExitHelper:"0x",childChainERC20Predicate:"0x",childChainStateReceiver:"0x"});class Yn{baseConfig;bridgeInstance;bridgeContracts;rootProvider;childProvider;blockTime;pollInterval;maxDepositBlockDelay;clockInaccuracy;rootChainFinalityBlocks;constructor({bridgeInstance:e,rootProvider:t,childProvider:n,baseConfig:a,overrides:r}){if(this.baseConfig=a,this.bridgeInstance=e,this.rootProvider=t,this.childProvider=n,this.blockTime=12,this.pollInterval=5e3,this.maxDepositBlockDelay=250,this.clockInaccuracy=900,this.rootChainFinalityBlocks=3,r)return void(this.bridgeContracts=r.bridgeContracts);if(!Zn[a.environment].includes(e))throw new Error(`Bridge instance with rootchain ${e.rootChainID} and childchain ${e.childChainID} is not supported in environment ${a.environment}`);if(!Jn.has(e))throw new Error(`Bridge instance with rootchain ${e.rootChainID} and childchain ${e.childChainID} is not supported in environment ${a.environment}`);const i=Jn.get(e);if(!i)throw new Error(`Bridge instance with rootchain ${e.rootChainID} and childchain ${e.childChainID} is not supported in environment ${a.environment}`);this.bridgeContracts=i}}var Qn;!function(e){e.INVALID_CONFIGURATION="INVALID_CONFIGURATION",e.INVALID_SLIPPAGE="INVALID_SLIPPAGE",e.INVALID_MAX_HOPS="INVALID_MAX_HOPS",e.INVALID_ADDRESS="INVALID_ADDRESS",e.DUPLICATE_ADDRESSES="DUPLICATE_ADDRESSES",e.CHAIN_NOT_SUPPORTED="CHAIN_NOT_SUPPORTED",e.NO_ROUTES_AVAILABLE="NO_ROUTES_AVAILABLE",e.PROVIDER_CALL_ERROR="PROVIDER_CALL_ERROR",e.APPROVE_ERROR="APPROVE_ERROR",e.ALREADY_APPROVED_ERROR="ALREADY_APPROVED_ERROR"}(Qn||(Qn={}));class ea extends Error{message;code;constructor(e,t){super(e),this.message=e,this.code=t}}class ta extends ea{constructor(e){super(e||"Invalid configuration",Qn.INVALID_CONFIGURATION)}}class na extends ea{constructor(e,t){super(`Chain with ID ${e} is not a supported chain in environment ${t}`,Qn.CHAIN_NOT_SUPPORTED)}}class aa extends ea{constructor(e){super(e,Qn.INVALID_SLIPPAGE)}}class ra extends ea{constructor(e){super(e,Qn.INVALID_MAX_HOPS)}}class ia extends ea{constructor(e){super(e,Qn.INVALID_ADDRESS)}}class sa extends ea{constructor(){super("token in and token out addresses must be different",Qn.DUPLICATE_ADDRESSES)}}class oa extends ea{constructor(){super("no routes available",Qn.NO_ROUTES_AVAILABLE)}}class ca extends ea{constructor(e){super(e,Qn.PROVIDER_CALL_ERROR)}}class da extends ea{constructor(e){super(e,Qn.APPROVE_ERROR)}}const ua=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];class fa{static abi=ua;static createInterface(){return new r.Interface(ua)}static connect(e,t){return new i(e,ua,t)}}const la=[{inputs:[],name:"getCurrentBlockTimestamp",outputs:[{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"addr",type:"address"}],name:"getEthBalance",outputs:[{internalType:"uint256",name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"uint256",name:"gasLimit",type:"uint256"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct UniswapInterfaceMulticall.Call[]",name:"calls",type:"tuple[]"}],name:"multicall",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"uint256",name:"gasUsed",type:"uint256"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct UniswapInterfaceMulticall.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"nonpayable",type:"function"}],pa="0x608060405234801561001057600080fd5b50610567806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630f28c97d146100465780631749e1e3146100645780634d2301cc14610085575b600080fd5b61004e610098565b60405161005b919061041f565b60405180910390f35b6100776100723660046102a7565b61009c565b60405161005b929190610428565b61004e610093366004610286565b610220565b4290565b8051439060609067ffffffffffffffff811180156100b957600080fd5b506040519080825280602002602001820160405280156100f357816020015b6100e061023a565b8152602001906001900390816100d85790505b50905060005b835181101561021a57600080600086848151811061011357fe5b60200260200101516000015187858151811061012b57fe5b60200260200101516020015188868151811061014357fe5b60200260200101516040015192509250925060005a90506000808573ffffffffffffffffffffffffffffffffffffffff1685856040516101839190610403565b60006040518083038160008787f1925050503d80600081146101c1576040519150601f19603f3d011682016040523d82523d6000602084013e6101c6565b606091505b509150915060005a8403905060405180606001604052808415158152602001828152602001838152508989815181106101fb57fe5b60200260200101819052505050505050505080806001019150506100f9565b50915091565b73ffffffffffffffffffffffffffffffffffffffff163190565b604051806060016040528060001515815260200160008152602001606081525090565b803573ffffffffffffffffffffffffffffffffffffffff8116811461028157600080fd5b919050565b600060208284031215610297578081fd5b6102a08261025d565b9392505050565b600060208083850312156102b9578182fd5b823567ffffffffffffffff808211156102d0578384fd5b818501915085601f8301126102e3578384fd5b8135818111156102ef57fe5b6102fc8485830201610506565b81815284810190848601875b848110156103f457813587017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0606081838f03011215610346578a8bfd5b60408051606081018181108b8211171561035c57fe5b8252610369848d0161025d565b8152818401358c82015260608401358a811115610384578d8efd5b8085019450508e603f850112610398578c8dfd5b8b8401358a8111156103a657fe5b6103b68d85601f84011601610506565b93508084528f838287010111156103cb578d8efd5b808386018e86013783018c018d9052908101919091528552509287019290870190600101610308565b50909998505050505050505050565b6000825161041581846020870161052a565b9190910192915050565b90815260200190565b600060408083018584526020828186015281865180845260609350838701915083838202880101838901875b838110156104f6578983037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa001855281518051151584528681015187850152880151888401889052805188850181905260806104b582828801858c0161052a565b96880196601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01694909401909301925090850190600101610454565b50909a9950505050505050505050565b60405181810167ffffffffffffffff8111828210171561052257fe5b604052919050565b60005b8381101561054557818101518382015260200161052d565b83811115610554576000848401525b5050505056fea164736f6c6343000706000a";class ha extends a{constructor(...e){e.length>1?super(...e):super(la,pa,e[0])}deploy(e){return super.deploy(e||{})}getDeployTransaction(e){return super.getDeployTransaction(e||{})}attach(e){return super.attach(e)}connect(e){return super.connect(e)}static bytecode=pa;static abi=la;static createInterface(){return new r.Interface(la)}static connect(e,t){return new i(e,la,t)}}const ma=[{inputs:[{internalType:"address",name:"_admin",type:"address"},{internalType:"address",name:"_uniRouter",type:"address"},{internalType:"address",name:"_wimx",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"ContractPaused",type:"error"},{inputs:[],name:"DeadlinePassed",type:"error"},{inputs:[],name:"FailedToRefundNativeTokens",type:"error"},{inputs:[],name:"FailedToSendFees",type:"error"},{inputs:[],name:"FeeTooHigh",type:"error"},{inputs:[],name:"IncorrectRecipient",type:"error"},{inputs:[],name:"InputTokenNotWrapped",type:"error"},{inputs:[],name:"NativeTokenAmountMismatch",type:"error"},{inputs:[],name:"Unauthorized",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"feeToken",type:"address"},{indexed:!0,internalType:"address",name:"feePayer",type:"address"},{indexed:!0,internalType:"address",name:"feeRecipient",type:"address"},{indexed:!1,internalType:"uint256",name:"feeAmount",type:"uint256"}],name:"FeeTaken",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"feePayer",type:"address"},{indexed:!0,internalType:"address",name:"feeRecipient",type:"address"},{indexed:!1,internalType:"uint256",name:"feeAmount",type:"uint256"}],name:"FeeTaken",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"previousAdminRole",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"newAdminRole",type:"bytes32"}],name:"RoleAdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleGranted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleRevoked",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[],name:"DEFAULT_ADMIN_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"address payable",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBasisPoints",type:"uint256"}],internalType:"struct ISecondaryFee.SecondaryFeeParams[]",name:"secondaryFees",type:"tuple[]"},{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinimum",type:"uint256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IV3SwapRouter.ExactInputSingleParams",name:"swapParams",type:"tuple"}],name:"exactInputSingleWithSecondaryFee",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address payable",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBasisPoints",type:"uint256"}],internalType:"struct ISecondaryFee.SecondaryFeeParams[]",name:"secondaryFees",type:"tuple[]"},{components:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint256",name:"amountOutMinimum",type:"uint256"}],internalType:"struct IV3SwapRouter.ExactInputParams",name:"swapParams",type:"tuple"}],name:"exactInputWithSecondaryFee",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address payable",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBasisPoints",type:"uint256"}],internalType:"struct ISecondaryFee.SecondaryFeeParams[]",name:"secondaryFees",type:"tuple[]"},{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMaximum",type:"uint256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IV3SwapRouter.ExactOutputSingleParams",name:"swapParams",type:"tuple"}],name:"exactOutputSingleWithSecondaryFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address payable",name:"recipient",type:"address"},{internalType:"uint256",name:"feeBasisPoints",type:"uint256"}],internalType:"struct ISecondaryFee.SecondaryFeeParams[]",name:"secondaryFees",type:"tuple[]"},{components:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint256",name:"amountInMaximum",type:"uint256"}],internalType:"struct IV3SwapRouter.ExactOutputParams",name:"swapParams",type:"tuple"}],name:"exactOutputWithSecondaryFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"}],name:"getRoleAdmin",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"grantRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"hasRole",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"renounceRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"revokeRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountMinimum",type:"uint256"}],name:"unwrapNativeToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"address",name:"erc20",type:"address"}],name:"withdrawFunds",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}],ba="0x60806040523480156200001157600080fd5b506040516200310b3803806200310b83398101604081905262000034916200015c565b6001805460ff191690556200004b6000846200009e565b600180546001600160a01b039384166101008102610100600160a81b03199092169190911790915560038054929093166001600160a01b03199283161790925560028054909116909117905550620001a6565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200013b576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620000fa3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b03811681146200015757600080fd5b919050565b6000806000606084860312156200017257600080fd5b6200017d846200013f565b92506200018d602085016200013f565b91506200019d604085016200013f565b90509250925092565b612f5580620001b66000396000f3fe60806040526004361061010c5760003560e01c806358e81a50116100955780638456cb59116100645780638456cb591461029957806391d14854146102ae578063a217fddf146102ce578063ac9650d8146102e3578063d547741f1461030357600080fd5b806358e81a501461023b5780635ae401dc1461024e5780635c975abb1461026e5780635ebca7991461028657600080fd5b80632f2ff15d116100dc5780632f2ff15d146101c057806336568abe146101e0578063383ebb0b146102005780633f4ba83a146102135780635640f6591461022857600080fd5b80620fa9fb1461011857806301ffc9a71461013a578063116944b21461016f578063248a9ca31461019057600080fd5b3661011357005b600080fd5b34801561012457600080fd5b5061013861013336600461270a565b610323565b005b34801561014657600080fd5b5061015a610155366004612743565b6103ef565b60405190151581526020015b60405180910390f35b61018261017d3660046128d4565b610426565b604051908152602001610166565b34801561019c57600080fd5b506101826101ab366004612929565b60009081526020819052604090206001015490565b3480156101cc57600080fd5b506101386101db366004612942565b6106ab565b3480156101ec57600080fd5b506101386101fb366004612942565b6106d0565b61018261020e366004612a2a565b610753565b34801561021f57600080fd5b50610138610ac2565b610182610236366004612a2a565b610b12565b6101826102493660046128d4565b610d90565b61026161025c366004612ad6565b6110c5565b6040516101669190612b71565b34801561027a57600080fd5b5060015460ff1661015a565b610138610294366004612929565b6110fa565b3480156102a557600080fd5b506101386112aa565b3480156102ba57600080fd5b5061015a6102c9366004612942565b6112f8565b3480156102da57600080fd5b50610182600081565b3480156102ef57600080fd5b506102616102fe366004612bd3565b611321565b34801561030f57600080fd5b5061013861031e366004612942565b611415565b61034d7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e982869336112f8565b610369576040516282b42960e81b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156103b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d49190612c14565b90506103ea6001600160a01b038316848361143a565b505050565b60006001600160e01b03198216637965db0b60e01b148061042057506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061043460015460ff1690565b156104525760405163ab35696f60e01b815260040160405180910390fd5b60608201516001600160a01b0316331461047f5760405163519bdea760e01b815260040160405180910390fd5b4780156105bf57826080015181146104aa576040516342f7487960e11b815260040160405180910390fd5b60035483516001600160a01b039081169116146104da576040516324d0121760e01b815260040160405180910390fd5b61053a83608001518686808060200260200160405190810160405280939291908181526020016000905b828210156105305761052160408302860136819003810190612c2d565b81526020019060010190610504565b505050505061149d565b608084018190526001546040516304e45aaf60e01b81526101009091046001600160a01b0316916304e45aaf91610575908790600401612c84565b60206040518083038185885af1158015610593573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906105b89190612c14565b91506106a3565b610624836000015184608001518787808060200260200160405190810160405280939291908181526020016000905b8282101561061a5761060b60408302860136819003810190612c2d565b815260200190600101906105ee565b50505050506114ef565b60808401526001546040516304e45aaf60e01b81526101009091046001600160a01b0316906304e45aaf9061065d908690600401612c84565b6020604051808303816000875af115801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a09190612c14565b91505b509392505050565b6000828152602081905260409020600101546106c68161154c565b6103ea8383611559565b6001600160a01b03811633146107455760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61074f82826115dd565b5050565b600061076160015460ff1690565b1561077f5760405163ab35696f60e01b815260040160405180910390fd5b60208201516001600160a01b031633146107ac5760405163519bdea760e01b815260040160405180910390fd5b60006107bb8360000151611642565b905047801561096d576003546001600160a01b038381169116146107f2576040516324d0121760e01b815260040160405180910390fd5b83606001518114610816576040516342f7487960e11b815260040160405180910390fd5b60008061087986606001518989808060200260200160405190810160405280939291908181526020016000905b8282101561086f5761086060408302860136819003810190612c2d565b81526020019060010190610843565b5050505050611670565b606088018190526001546040516304dc09a360e11b81529294509092506000916101009091046001600160a01b0316906309b813469084906108bf908b90600401612d2a565b60206040518083038185885af11580156108dd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109029190612c14565b905061096181848b8b808060200260200160405190810160405280939291908181526020016000905b828210156109575761094860408302860136819003810190612c2d565b8152602001906001019061092b565b50505050506116c3565b95505050505050610abb565b6000806109d18487606001518a8a808060200260200160405190810160405280939291908181526020016000905b828210156109c7576109b860408302860136819003810190612c2d565b8152602001906001019061099b565b50505050506117b7565b606088018190526001546040516304dc09a360e11b81529294509092506000916101009091046001600160a01b0316906309b8134690610a15908a90600401612d2a565b6020604051808303816000875af1158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a589190612c14565b90506109618582858c8c808060200260200160405190810160405280939291908181526020016000905b82821015610aae57610a9f60408302860136819003810190612c2d565b81526020019060010190610a82565b5050505050611811565b50505b9392505050565b610aec7fe7276a2a84d8de556657ec9cf93a55a7d66f096e529d0582ed08e9e2208b92b5336112f8565b610b08576040516282b42960e81b815260040160405180910390fd5b610b1061186d565b565b6000610b2060015460ff1690565b15610b3e5760405163ab35696f60e01b815260040160405180910390fd5b60208201516001600160a01b03163314610b6b5760405163519bdea760e01b815260040160405180910390fd5b6000610b7a83600001516118bf565b9050478015610cb05783604001518114610ba7576040516342f7487960e11b815260040160405180910390fd5b6003546001600160a01b03838116911614610bd5576040516324d0121760e01b815260040160405180910390fd5b610c2b84604001518787808060200260200160405190810160405280939291908181526020016000905b8282101561053057610c1c60408302860136819003810190612c2d565b81526020019060010190610bff565b6040858101829052600154905163b858183f60e01b81526101009091046001600160a01b03169163b858183f91610c66908890600401612d2a565b60206040518083038185885af1158015610c84573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ca99190612c14565b9250610ab8565b610d078285604001518888808060200260200160405190810160405280939291908181526020016000905b8282101561061a57610cf860408302860136819003810190612c2d565b81526020019060010190610cdb565b604085810191909152600154905163b858183f60e01b81526101009091046001600160a01b03169063b858183f90610d43908790600401612d2a565b6020604051808303816000875af1158015610d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d869190612c14565b9695505050505050565b6000610d9e60015460ff1690565b15610dbc5760405163ab35696f60e01b815260040160405180910390fd5b60608201516001600160a01b03163314610de95760405163519bdea760e01b815260040160405180910390fd5b478015610f865760035483516001600160a01b03908116911614610e20576040516324d0121760e01b815260040160405180910390fd5b8260a001518114610e44576040516342f7487960e11b815260040160405180910390fd5b600080610e9d8560a001518888808060200260200160405190810160405280939291908181526020016000905b8282101561086f57610e8e60408302860136819003810190612c2d565b81526020019060010190610e71565b60a08701819052600154604051635023b4df60e01b81529294509092506000916101009091046001600160a01b031690635023b4df908490610ee3908a90600401612c84565b60206040518083038185885af1158015610f01573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f269190612c14565b9050610f7b81848a8a808060200260200160405190810160405280939291908181526020016000905b8282101561095757610f6c60408302860136819003810190612c2d565b81526020019060010190610f4f565b945050505050610abb565b600080610fe485600001518660a001518989808060200260200160405190810160405280939291908181526020016000905b828210156109c757610fd560408302860136819003810190612c2d565b81526020019060010190610fb8565b60a08701819052600154604051635023b4df60e01b81529294509092506000916101009091046001600160a01b031690635023b4df90611028908990600401612c84565b6020604051808303816000875af1158015611047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106b9190612c14565b9050610f7b866000015182858b8b808060200260200160405190810160405280939291908181526020016000905b82821015610aae576110b660408302860136819003810190612c2d565b81526020019060010190611099565b6060834211156110e85760405163387b2e5560e11b815260040160405180910390fd5b6110f28383611321565b949350505050565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190612c14565b9050818110156111ad5760405162461bcd60e51b8152602060048201526011602482015270092dce6eaccccd2c6d2cadce840ae929ab607b1b604482015260640161073c565b801561074f57600354604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156111f957600080fd5b505af115801561120d573d6000803e3d6000fd5b50506040805160008082526020820192839052935033925084916112319190612d3d565b60006040518083038185875af1925050503d806000811461126e576040519150601f19603f3d011682016040523d82523d6000602084013e611273565b606091505b50509050806103ea5760405162461bcd60e51b815260206004820152600360248201526253544560e81b604482015260640161073c565b6112d47ffcb9fcbfa83b897fb2d5cf4b58962164105c1e71489a37ef3ae0db3fdce576f6336112f8565b6112f0576040516282b42960e81b815260040160405180910390fd5b610b106118cb565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060816001600160401b0381111561133b5761133b6127b1565b60405190808252806020026020018201604052801561136e57816020015b60608152602001906001900390816113595790505b50905060005b8281101561140e576113de3085858481811061139257611392612d59565b90506020028101906113a49190612d6f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061190692505050565b8282815181106113f0576113f0612d59565b6020026020010181905250808061140690612dcb565b915050611374565b5092915050565b6000828152602081905260409020600101546114308161154c565b6103ea83836115dd565b6040516001600160a01b0383166024820152604481018290526103ea90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261192b565b60006114a882611a00565b506000806114b68585611a73565b90925090506114c58286612de4565b94506114d081611b9c565b6003546114e6906001600160a01b031686611cc6565b50929392505050565b60006114fa82611a00565b506000806115088585611a73565b90925090506115178286612de4565b94506115238682611dc3565b6115386001600160a01b038716333088611ecc565b6115428686611cc6565b5092949350505050565b6115568133611f0a565b50565b61156382826112f8565b61074f576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556115993390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6115e782826112f8565b1561074f576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080601483516116539190612de4565b9050600061166384836014611f63565b90506110f2816000612070565b600080600061167e84611a00565b9050600061168e82612710612df7565b905061169d86612710836120d5565b6003549093506116b6906001600160a01b031684611cc6565b85935050505b9250929050565b60008060006116d28685611a73565b915091506116df81611b9c565b600260009054906101000a90046001600160a01b03166001600160a01b03166312210e8a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561172f57600080fd5b505af1158015611743573d6000803e3d6000fd5b5050505060008287876117569190612de4565b6117609190612de4565b604051909150600090339083156108fc0290849084818181858888f193505050509050806117a1576040516382e4f46960e01b815260040160405180910390fd5b6117ab8489612df7565b98975050505050505050565b60008060006117c584611a00565b905060006117d582612710612df7565b90506117e486612710836120d5565b92506117f08784611cc6565b6118056001600160a01b038816333089611ecc565b50939590945092505050565b60008060006118208685611a73565b9150915061182e8782612115565b611858338361183d8989612de4565b6118479190612de4565b6001600160a01b038a16919061143a565b6118628287612df7565b979650505050505050565b61187561221c565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60006104208282612070565b6118d3612265565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336118a2565b6060610abb8383604051806060016040528060278152602001612ef9602791396122ab565b6000611980826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123199092919063ffffffff16565b90508051600014806119a15750808060200190518101906119a19190612e0a565b6103ea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161073c565b6000805b8251811015611a4a57828181518110611a1f57611a1f612d59565b60200260200101516020015182611a369190612df7565b915080611a4281612dcb565b915050611a04565b506103e8811115611a6e5760405163cd4e616760e01b815260040160405180910390fd5b919050565b6000606082516001600160401b03811115611a9057611a906127b1565b604051908082528060200260200182016040528015611ad557816020015b6040805180820190915260008082526020820152815260200190600190039081611aae5790505b50905060005b8351811015611b94576000611b1a858381518110611afb57611afb612d59565b602002602001015160200151612710886123289092919063ffffffff16565b90506040518060400160405280868481518110611b3957611b39612d59565b6020026020010151600001516001600160a01b0316815260200182815250838381518110611b6957611b69612d59565b6020908102919091010152611b7e8185612df7565b9350508080611b8c90612dcb565b915050611adb565b509250929050565b60005b815181101561074f576000828281518110611bbc57611bbc612d59565b6020026020010151600001516001600160a01b03166108fc848481518110611be657611be6612d59565b6020026020010151602001519081150290604051600060405180830381858888f19350505050905080611c2c5760405163647373e960e11b815260040160405180910390fd5b828281518110611c3e57611c3e612d59565b6020026020010151600001516001600160a01b0316336001600160a01b03167fe0e765ab26c1caf691c510426951246128b96830e49cc81d8c093fd551abac35858581518110611c9057611c90612d59565b602002602001015160200151604051611cab91815260200190565b60405180910390a35080611cbe81612dcb565b915050611b9f565b600154604051636eb1769f60e11b81523060048201526001600160a01b0361010090920482166024820152829184169063dd62ed3e90604401602060405180830381865afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d409190612c14565b101561074f5760015460405163095ea7b360e01b81526101009091046001600160a01b039081166004830152600019602483015283169063095ea7b3906044016020604051808303816000875af1158015611d9f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190612e0a565b60005b81518110156103ea57611e2933838381518110611de557611de5612d59565b602002602001015160000151848481518110611e0357611e03612d59565b602002602001015160200151866001600160a01b0316611ecc909392919063ffffffff16565b818181518110611e3b57611e3b612d59565b6020026020010151600001516001600160a01b0316336001600160a01b0316846001600160a01b03167f1f9a9fdac86b6ca3c5300bec0b61555cded1f1a234378602dcca6c27085eac8e858581518110611e9757611e97612d59565b602002602001015160200151604051611eb291815260200190565b60405180910390a480611ec481612dcb565b915050611dc6565b6040516001600160a01b0380851660248301528316604482015260648101829052611f049085906323b872dd60e01b90608401611466565b50505050565b611f1482826112f8565b61074f57611f21816123ca565b611f2c8360206123dc565b604051602001611f3d929190612e2c565b60408051601f198184030181529082905262461bcd60e51b825261073c91600401612ea1565b606081611f7181601f612df7565b1015611fb05760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161073c565b611fba8284612df7565b84511015611ffe5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161073c565b60608215801561201d5760405191506000825260208201604052612067565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561205657805183526020928301920161203e565b5050858452601f01601f1916604052505b50949350505050565b600061207d826014612df7565b835110156120c55760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b604482015260640161073c565b500160200151600160601b900490565b60006120e2848484612328565b9050600082806120f4576120f4612eb4565b8486091115610abb57600019811061210b57600080fd5b6001019392505050565b60005b81518110156103ea5761217982828151811061213657612136612d59565b60200260200101516000015183838151811061215457612154612d59565b602002602001015160200151856001600160a01b031661143a9092919063ffffffff16565b81818151811061218b5761218b612d59565b6020026020010151600001516001600160a01b0316336001600160a01b0316846001600160a01b03167f1f9a9fdac86b6ca3c5300bec0b61555cded1f1a234378602dcca6c27085eac8e8585815181106121e7576121e7612d59565b60200260200101516020015160405161220291815260200190565b60405180910390a48061221481612dcb565b915050612118565b60015460ff16610b105760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161073c565b60015460ff1615610b105760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161073c565b6060600080856001600160a01b0316856040516122c89190612d3d565b600060405180830381855af49150503d8060008114612303576040519150601f19603f3d011682016040523d82523d6000602084013e612308565b606091505b5091509150610d8686838387612577565b60606110f284846000856125f0565b6000838302816000198587098281108382030391505080841161234a57600080fd5b8060000361235d57508290049050610abb565b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60606104206001600160a01b03831660145b606060006123eb836002612eca565b6123f6906002612df7565b6001600160401b0381111561240d5761240d6127b1565b6040519080825280601f01601f191660200182016040528015612437576020820181803683370190505b509050600360fc1b8160008151811061245257612452612d59565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061248157612481612d59565b60200101906001600160f81b031916908160001a90535060006124a5846002612eca565b6124b0906001612df7565b90505b6001811115612528576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106124e4576124e4612d59565b1a60f81b8282815181106124fa576124fa612d59565b60200101906001600160f81b031916908160001a90535060049490941c9361252181612ee1565b90506124b3565b508315610abb5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161073c565b606083156125e65782516000036125df576001600160a01b0385163b6125df5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161073c565b50816110f2565b6110f283836126c0565b6060824710156126515760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161073c565b600080866001600160a01b0316858760405161266d9190612d3d565b60006040518083038185875af1925050503d80600081146126aa576040519150601f19603f3d011682016040523d82523d6000602084013e6126af565b606091505b509150915061186287838387612577565b8151156126d05781518083602001fd5b8060405162461bcd60e51b815260040161073c9190612ea1565b6001600160a01b038116811461155657600080fd5b8035611a6e816126ea565b6000806040838503121561271d57600080fd5b8235612728816126ea565b91506020830135612738816126ea565b809150509250929050565b60006020828403121561275557600080fd5b81356001600160e01b031981168114610abb57600080fd5b60008083601f84011261277f57600080fd5b5081356001600160401b0381111561279657600080fd5b6020830191508360208260061b85010111156116bc57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b03811182821017156127e9576127e96127b1565b60405290565b604051608081016001600160401b03811182821017156127e9576127e96127b1565b604051601f8201601f191681016001600160401b0381118282101715612839576128396127b1565b604052919050565b600060e0828403121561285357600080fd5b61285b6127c7565b90508135612868816126ea565b81526020820135612878816126ea565b6020820152604082013562ffffff8116811461289357600080fd5b60408201526128a4606083016126ff565b60608201526080820135608082015260a082013560a08201526128c960c083016126ff565b60c082015292915050565b600080600061010084860312156128ea57600080fd5b83356001600160401b0381111561290057600080fd5b61290c8682870161276d565b909450925061292090508560208601612841565b90509250925092565b60006020828403121561293b57600080fd5b5035919050565b6000806040838503121561295557600080fd5b823591506020830135612738816126ea565b60006080828403121561297957600080fd5b6129816127ef565b905081356001600160401b038082111561299a57600080fd5b818401915084601f8301126129ae57600080fd5b81356020828211156129c2576129c26127b1565b6129d4601f8301601f19168201612811565b925081835286818386010111156129ea57600080fd5b81818501828501376000818385010152828552612a088187016126ff565b8186015250505050604082013560408201526060820135606082015292915050565b600080600060408486031215612a3f57600080fd5b83356001600160401b0380821115612a5657600080fd5b612a628783880161276d565b90955093506020860135915080821115612a7b57600080fd5b50612a8886828701612967565b9150509250925092565b60008083601f840112612aa457600080fd5b5081356001600160401b03811115612abb57600080fd5b6020830191508360208260051b85010111156116bc57600080fd5b600080600060408486031215612aeb57600080fd5b8335925060208401356001600160401b03811115612b0857600080fd5b612b1486828701612a92565b9497909650939450505050565b60005b83811015612b3c578181015183820152602001612b24565b50506000910152565b60008151808452612b5d816020860160208601612b21565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612bc657603f19888603018452612bb4858351612b45565b94509285019290850190600101612b98565b5092979650505050505050565b60008060208385031215612be657600080fd5b82356001600160401b03811115612bfc57600080fd5b612c0885828601612a92565b90969095509350505050565b600060208284031215612c2657600080fd5b5051919050565b600060408284031215612c3f57600080fd5b604051604081018181106001600160401b0382111715612c6157612c616127b1565b6040528235612c6f816126ea565b81526020928301359281019290925250919050565b60e08101610420828480516001600160a01b03908116835260208083015182169084015260408083015162ffffff16908401526060808301518216908401526080808301519084015260a0828101519084015260c09182015116910152565b6000815160808452612cf86080850182612b45565b6020848101516001600160a01b0316908601526040808501519086015260609384015193909401929092525090919050565b602081526000610abb6020830184612ce3565b60008251612d4f818460208701612b21565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612d8657600080fd5b8301803591506001600160401b03821115612da057600080fd5b6020019150368190038213156116bc57600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612ddd57612ddd612db5565b5060010190565b8181038181111561042057610420612db5565b8082018082111561042057610420612db5565b600060208284031215612e1c57600080fd5b81518015158114610abb57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612e64816017850160208801612b21565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612e95816028840160208801612b21565b01602801949350505050565b602081526000610abb6020830184612b45565b634e487b7160e01b600052601260045260246000fd5b808202811582820484141761042057610420612db5565b600081612ef057612ef0612db5565b50600019019056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220eff696b5535ea5759815da07da267901ad15855b143752622fa478891337f65c64736f6c63430008130033";class ya extends a{constructor(...e){e.length>1?super(...e):super(ma,ba,e[0])}deploy(e,t,n,a){return super.deploy(e,t,n,a||{})}getDeployTransaction(e,t,n,a){return super.getDeployTransaction(e,t,n,a||{})}attach(e){return super.attach(e)}connect(e){return super.connect(e)}static bytecode=ba;static abi=ma;static createInterface(){return new r.Interface(ma)}static connect(e,t){return new i(e,ma,t)}}const ga=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Burn",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"Collect",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint128",name:"amount0",type:"uint128"},{indexed:!1,internalType:"uint128",name:"amount1",type:"uint128"}],name:"CollectProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"paid1",type:"uint256"}],name:"Flash",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint16",name:"observationCardinalityNextOld",type:"uint16"},{indexed:!1,internalType:"uint16",name:"observationCardinalityNextNew",type:"uint16"}],name:"IncreaseObservationCardinalityNext",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Initialize",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"int24",name:"tickLower",type:"int24"},{indexed:!0,internalType:"int24",name:"tickUpper",type:"int24"},{indexed:!1,internalType:"uint128",name:"amount",type:"uint128"},{indexed:!1,internalType:"uint256",name:"amount0",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount1",type:"uint256"}],name:"Mint",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint8",name:"feeProtocol0Old",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol1Old",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol0New",type:"uint8"},{indexed:!1,internalType:"uint8",name:"feeProtocol1New",type:"uint8"}],name:"SetFeeProtocol",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"int256",name:"amount0",type:"int256"},{indexed:!1,internalType:"int256",name:"amount1",type:"int256"},{indexed:!1,internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{indexed:!1,internalType:"uint128",name:"liquidity",type:"uint128"},{indexed:!1,internalType:"int24",name:"tick",type:"int24"}],name:"Swap",type:"event"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"}],name:"burn",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collect",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint128",name:"amount0Requested",type:"uint128"},{internalType:"uint128",name:"amount1Requested",type:"uint128"}],name:"collectProtocol",outputs:[{internalType:"uint128",name:"amount0",type:"uint128"},{internalType:"uint128",name:"amount1",type:"uint128"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"fee",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal0X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeGrowthGlobal1X128",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"flash",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"}],name:"increaseObservationCardinalityNext",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"liquidity",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"maxLiquidityPerTick",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"},{internalType:"uint128",name:"amount",type:"uint128"},{internalType:"bytes",name:"data",type:"bytes"}],name:"mint",outputs:[{internalType:"uint256",name:"amount0",type:"uint256"},{internalType:"uint256",name:"amount1",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"observations",outputs:[{internalType:"uint32",name:"blockTimestamp",type:"uint32"},{internalType:"int56",name:"tickCumulative",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityCumulativeX128",type:"uint160"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32[]",name:"secondsAgos",type:"uint32[]"}],name:"observe",outputs:[{internalType:"int56[]",name:"tickCumulatives",type:"int56[]"},{internalType:"uint160[]",name:"secondsPerLiquidityCumulativeX128s",type:"uint160[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"}],name:"positions",outputs:[{internalType:"uint128",name:"liquidity",type:"uint128"},{internalType:"uint256",name:"feeGrowthInside0LastX128",type:"uint256"},{internalType:"uint256",name:"feeGrowthInside1LastX128",type:"uint256"},{internalType:"uint128",name:"tokensOwed0",type:"uint128"},{internalType:"uint128",name:"tokensOwed1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"protocolFees",outputs:[{internalType:"uint128",name:"token0",type:"uint128"},{internalType:"uint128",name:"token1",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint8",name:"feeProtocol0",type:"uint8"},{internalType:"uint8",name:"feeProtocol1",type:"uint8"}],name:"setFeeProtocol",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"slot0",outputs:[{internalType:"uint160",name:"sqrtPriceX96",type:"uint160"},{internalType:"int24",name:"tick",type:"int24"},{internalType:"uint16",name:"observationIndex",type:"uint16"},{internalType:"uint16",name:"observationCardinality",type:"uint16"},{internalType:"uint16",name:"observationCardinalityNext",type:"uint16"},{internalType:"uint8",name:"feeProtocol",type:"uint8"},{internalType:"bool",name:"unlocked",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"tickLower",type:"int24"},{internalType:"int24",name:"tickUpper",type:"int24"}],name:"snapshotCumulativesInside",outputs:[{internalType:"int56",name:"tickCumulativeInside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityInsideX128",type:"uint160"},{internalType:"uint32",name:"secondsInside",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bool",name:"zeroForOne",type:"bool"},{internalType:"int256",name:"amountSpecified",type:"int256"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"},{internalType:"bytes",name:"data",type:"bytes"}],name:"swap",outputs:[{internalType:"int256",name:"amount0",type:"int256"},{internalType:"int256",name:"amount1",type:"int256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"int16",name:"",type:"int16"}],name:"tickBitmap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"tickSpacing",outputs:[{internalType:"int24",name:"",type:"int24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"int24",name:"",type:"int24"}],name:"ticks",outputs:[{internalType:"uint128",name:"liquidityGross",type:"uint128"},{internalType:"int128",name:"liquidityNet",type:"int128"},{internalType:"uint256",name:"feeGrowthOutside0X128",type:"uint256"},{internalType:"uint256",name:"feeGrowthOutside1X128",type:"uint256"},{internalType:"int56",name:"tickCumulativeOutside",type:"int56"},{internalType:"uint160",name:"secondsPerLiquidityOutsideX128",type:"uint160"},{internalType:"uint32",name:"secondsOutside",type:"uint32"},{internalType:"bool",name:"initialized",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"token0",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"token1",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}],Ea="0x6101606040523480156200001257600080fd5b503060601b60805260408051630890357360e41b81529051600091339163890357309160048082019260a092909190829003018186803b1580156200005657600080fd5b505afa1580156200006b573d6000803e3d6000fd5b505050506040513d60a08110156200008257600080fd5b508051602080830151604084015160608086015160809096015160e896871b6001600160e81b0319166101005291811b6001600160601b031990811660e05292811b831660c0529390931b1660a052600282810b900b90921b610120529150620000f79082906200010f811b62002b8417901c565b60801b6001600160801b03191661014052506200017d565b60008082600281900b620d89e719816200012557fe5b05029050600083600281900b620d89e8816200013d57fe5b0502905060008460020b83830360020b816200015557fe5b0560010190508062ffffff166001600160801b038016816200017357fe5b0495945050505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160e81c6101405160801c61567e6200024a60003980611fee5280614b5f5280614b96525080610c0052806128fd5280614bca5280614bfc525080610cef52806119cb5280611a0252806129455250806111c75280611a855280611ef4528061244452806129215280613e6b5250806108d252806112f55280611a545280611e8e52806123be5280613d2252508061207b528061227d52806128d9525080612bfb525061567e6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806370cf754a116100ee578063c45a015511610097578063ddca3f4311610071578063ddca3f4314610800578063f305839914610820578063f30dba9314610828578063f637731d146108aa576101ae565b8063c45a0155146107d1578063d0c93a7c146107d9578063d21220a7146107f8576101ae565b8063883bdbfd116100c8578063883bdbfd14610633578063a34123a71461073c578063a38807f214610776576101ae565b806370cf754a146105c65780638206a4d1146105ce57806385b66729146105f6576101ae565b80633850c7bd1161015b578063490e6cbc11610135578063490e6cbc146104705780634f1eb3d8146104fc578063514ea4bf1461054d5780635339c296146105a6576101ae565b80633850c7bd1461035b5780633c8a7d8d146103b45780634614131914610456576101ae565b80631ad8b03b1161018c5780631ad8b03b146102aa578063252c09d7146102e157806332148f6714610338576101ae565b80630dfe1681146101b3578063128acb08146101d75780631a68650214610286575b600080fd5b6101bb6108d0565b604080516001600160a01b039092168252519081900360200190f35b61026d600480360360a08110156101ed57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a08101608082013564010000000081111561022e57600080fd5b82018360208201111561024057600080fd5b8035906020019184600183028401116401000000008311171561026257600080fd5b5090925090506108f4565b6040805192835260208301919091528051918290030190f35b61028e6114ad565b604080516001600160801b039092168252519081900360200190f35b6102b26114bc565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102fe600480360360208110156102f757600080fd5b50356114d6565b6040805163ffffffff909516855260069390930b60208501526001600160a01b039091168383015215156060830152519081900360800190f35b6103596004803603602081101561034e57600080fd5b503561ffff1661151c565b005b610363611616565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61026d600480360360a08110156103ca57600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a08101608082013564010000000081111561041757600080fd5b82018360208201111561042957600080fd5b8035906020019184600183028401116401000000008311171561044b57600080fd5b509092509050611666565b61045e611922565b60408051918252519081900360200190f35b6103596004803603608081101561048657600080fd5b6001600160a01b0382351691602081013591604082013591908101906080810160608201356401000000008111156104bd57600080fd5b8201836020820111156104cf57600080fd5b803590602001918460018302840111640100000000831117156104f157600080fd5b509092509050611928565b6102b2600480360360a081101561051257600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516611d83565b61056a6004803603602081101561056357600080fd5b5035611f9d565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b61045e600480360360208110156105bc57600080fd5b503560010b611fda565b61028e611fec565b610359600480360360408110156105e457600080fd5b5060ff81358116916020013516612010565b6102b26004803603606081101561060c57600080fd5b506001600160a01b03813516906001600160801b036020820135811691604001351661220f565b6106a36004803603602081101561064957600080fd5b81019060208101813564010000000081111561066457600080fd5b82018360208201111561067657600080fd5b8035906020019184602083028401116401000000008311171561069857600080fd5b5090925090506124dc565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106e75781810151838201526020016106cf565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561072657818101518382015260200161070e565b5050505090500194505050505060405180910390f35b61026d6004803603606081101561075257600080fd5b508035600290810b91602081013590910b90604001356001600160801b0316612569565b6107a06004803603604081101561078c57600080fd5b508035600290810b9160200135900b6126e0565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff1682820152519081900360600190f35b6101bb6128d7565b6107e16128fb565b6040805160029290920b8252519081900360200190f35b6101bb61291f565b610808612943565b6040805162ffffff9092168252519081900360200190f35b61045e612967565b6108486004803603602081101561083e57600080fd5b503560020b61296d565b604080516001600160801b039099168952600f9790970b602089015287870195909552606087019390935260069190910b60808601526001600160a01b031660a085015263ffffffff1660c0840152151560e083015251908190036101000190f35b610359600480360360208110156108c057600080fd5b50356001600160a01b03166129db565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806108ff612bf0565b85610936576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526109ef576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610a3a5780600001516001600160a01b0316866001600160a01b0316118015610a35575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610a6c565b80600001516001600160a01b0316866001600160a01b0316108015610a6c57506401000276a36001600160a01b038716115b610aa3576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6000805460ff60f01b191681556040805160c08101909152808a610ad25760048460a0015160ff16901c610ae5565b60108460a0015160ff1681610ae357fe5b065b60ff1681526004546001600160801b03166020820152604001610b06612c27565b63ffffffff168152602001600060060b815260200160006001600160a01b031681526020016000151581525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610b8257600254610b86565b6001545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610bd55750886001600160a01b031681604001516001600160a01b031614155b15610f9f57610be261560e565b60408201516001600160a01b031681526060820151610c25906006907f00000000000000000000000000000000000000000000000000000000000000008f612c2b565b15156040830152600290810b810b60208301819052620d89e719910b1215610c5657620d89e7196020820152610c75565b6020810151620d89e860029190910b1315610c7557620d89e860208201525b610c828160200151612d6d565b6001600160a01b031660608201526040820151610d13908d610cbc578b6001600160a01b031683606001516001600160a01b031611610cd6565b8b6001600160a01b031683606001516001600160a01b0316105b610ce4578260600151610ce6565b8b5b60c085015185517f000000000000000000000000000000000000000000000000000000000000000061309f565b60c085015260a084015260808301526001600160a01b031660408301528215610d7557610d498160c00151826080015101613291565b825103825260a0810151610d6b90610d6090613291565b6020840151906132a7565b6020830152610db0565b610d828160a00151613291565b825101825260c08101516080820151610daa91610d9f9101613291565b6020840151906132c3565b60208301525b835160ff1615610df6576000846000015160ff168260c0015181610dd057fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610e3557610e298160c00151600160801b8460c001516001600160801b03166132d9565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610f5e57806040015115610f35578360a00151610ebf57610e9d846040015160008760200151886040015188602001518a606001516008613389909695949392919063ffffffff16565b6001600160a01b03166080860152600690810b900b6060850152600160a08501525b6000610f0b82602001518e610ed657600154610edc565b84608001515b8f610eeb578560800151610eef565b6002545b608089015160608a015160408b0151600595949392919061351c565b90508c15610f17576000035b610f258360c00151826135ef565b6001600160801b031660c0840152505b8b610f44578060200151610f4d565b60018160200151035b600290810b900b6060830152610f99565b80600001516001600160a01b031682604001516001600160a01b031614610f9957610f8c82604001516136a5565b600290810b900b60608301525b50610baf565b836020015160020b816060015160020b1461107a57600080610fed86604001518660400151886020015188602001518a606001518b6080015160086139d1909695949392919063ffffffff16565b604085015160608601516000805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b93909316929092029190911773ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116179055506110ac9050565b60408101516000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146110f25760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a1561114257608081015160015560a08101516001600160801b03161561113d5760a0810151600380546001600160801b031981166001600160801b03918216909301169190911790555b611188565b608081015160025560a08101516001600160801b0316156111885760a0810151600380546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b1515146111a157602081015181518b036111ae565b80600001518a0381602001515b90965094508a156112e75760008512156111f0576111f07f00000000000000000000000000000000000000000000000000000000000000008d87600003613b86565b60006111fa613cd4565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561127e57600080fd5b505af1158015611292573d6000803e3d6000fd5b5050505061129e613cd4565b6112a88289613e0d565b11156112e1576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611411565b600086121561131e5761131e7f00000000000000000000000000000000000000000000000000000000000000008d88600003613b86565b6000611328613e1d565b9050336001600160a01b031663fa461e3388888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156113ac57600080fd5b505af11580156113c0573d6000803e3d6000fd5b505050506113cc613e1d565b6113d68288613e0d565b111561140f576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b6004546001600160801b031681565b6003546001600160801b0380821691600160801b90041682565b60088161ffff81106114e757600080fd5b015463ffffffff81169150640100000000810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b600054600160f01b900460ff16611560576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611575612bf0565b60008054600160d81b900461ffff169061159160088385613eb5565b6000805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115fe576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506000805460ff60f01b1916600160f01b17905550565b6000546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b600080548190600160f01b900460ff166116ad576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b191690556001600160801b0385166116cd57600080fd5b60008061171b60405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b81526020016117118a6001600160801b0316613f58565b600f0b9052613f69565b9250925050819350809250600080600086111561173d5761173a613cd4565b91505b841561174e5761174b613e1d565b90505b336001600160a01b031663d348799787878b8b6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b50505050600086111561183b576117f9613cd4565b6118038388613e0d565b111561183b576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b841561188b57611849613e1d565b6118538287613e0d565b111561188b576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8960020b8b60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338d8b8b60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506000805460ff60f01b1916600160f01b17905550919890975095505050505050565b60025481565b600054600160f01b900460ff1661196c576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19169055611981612bf0565b6004546001600160801b0316806119c3576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b60006119f8867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a2f867f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f42406141a9565b90506000611a3b613cd4565b90506000611a47613e1d565b90508815611a7a57611a7a7f00000000000000000000000000000000000000000000000000000000000000008b8b613b86565b8715611aab57611aab7f00000000000000000000000000000000000000000000000000000000000000008b8a613b86565b336001600160a01b031663e9cbafb085858a8a6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611b2d57600080fd5b505af1158015611b41573d6000803e3d6000fd5b505050506000611b4f613cd4565b90506000611b5b613e1d565b905081611b688588613e0d565b1115611ba0576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b80611bab8487613e0d565b1115611be3576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b8382038382038115611c725760008054600160e81b9004600f16908115611c16578160ff168481611c1057fe5b04611c19565b60005b90506001600160801b03811615611c4c57600380546001600160801b038082168401166001600160801b03199091161790555b611c66818503600160801b8d6001600160801b03166132d9565b60018054909101905550505b8015611cfd5760008054600160e81b900460041c600f16908115611ca2578160ff168381611c9c57fe5b04611ca5565b60005b90506001600160801b03811615611cd757600380546001600160801b03600160801b8083048216850182160291161790555b611cf1818403600160801b8d6001600160801b03166132d9565b60028054909101905550505b8d6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338f8f86866040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506000805460ff60f01b1916600160f01b179055505050505050505050505050565b600080548190600160f01b900460ff16611dca576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b19168155611de460073389896141e3565b60038101549091506001600160801b0390811690861611611e055784611e14565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611e3c5783611e52565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611eb7576003810180546001600160801b031981166001600160801b03918216869003821617909155611eb7907f0000000000000000000000000000000000000000000000000000000000000000908a908616613b86565b6001600160801b03821615611f1d576003810180546001600160801b03600160801b808304821686900382160291811691909117909155611f1d907f0000000000000000000000000000000000000000000000000000000000000000908a908516613b86565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506000805460ff60f01b1916600160f01b17905590969095509350505050565b60076020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160f01b900460ff16612054576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156120c157600080fd5b505afa1580156120d5573d6000803e3d6000fd5b505050506040513d60208110156120eb57600080fd5b50516001600160a01b0316331461210157600080fd5b60ff82161580612124575060048260ff16101580156121245750600a8260ff1611155b801561214e575060ff8116158061214e575060048160ff161015801561214e5750600a8160ff1611155b61215757600080fd5b60008054610ff0600484901b16840160ff908116600160e81b9081027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841617909355919004167f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1336010826040805160ff9390920683168252600f600486901c16602083015286831682820152918516606082015290519081900360800190a150506000805460ff60f01b1916600160f01b17905550565b600080548190600160f01b900460ff16612256576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638da5cb5b916004808301926020929190829003018186803b1580156122c357600080fd5b505afa1580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b50516001600160a01b0316331461230357600080fd5b6003546001600160801b039081169085161161231f578361232c565b6003546001600160801b03165b6003549092506001600160801b03600160801b9091048116908416116123525782612366565b600354600160801b90046001600160801b03165b90506001600160801b038216156123e7576003546001600160801b038381169116141561239557600019909101905b600380546001600160801b031981166001600160801b039182168590038216179091556123e7907f00000000000000000000000000000000000000000000000000000000000000009087908516613b86565b6001600160801b0381161561246d576003546001600160801b03828116600160801b90920416141561241857600019015b600380546001600160801b03600160801b80830482168590038216029181169190911790915561246d907f00000000000000000000000000000000000000000000000000000000000000009087908416613b86565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36000805460ff60f01b1916600160f01b1790559094909350915050565b6060806124e7612bf0565b61255e6124f2612c27565b858580806020026020016040519081016040528093929190818152602001838360200280828437600092018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b900416614247565b915091509250929050565b600080548190600160f01b900460ff166125b0576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6000805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b918101919091528190819061260990606081016125fc6001600160801b038a16613f58565b600003600f0b9052613f69565b925092509250816000039450806000039350600085118061262a5750600084115b15612669576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506000805460ff60f01b1916600160f01b179055509094909350915050565b60008060006126ed612bf0565b6126f785856143a1565b600285810b810b60009081526005602052604080822087840b90930b825281206003830154600681900b9367010000000000000082046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff168061275f57600080fd5b6003820154600681900b985067010000000000000081046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff16806127a457600080fd5b50506040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e810b91900b1215905061284d575093909403965090039350900390506128d0565b8a60020b816020015160020b12156128c1576000612869612c27565b602083015160408401516004546060860151939450600093849361289f936008938893879392916001600160801b031690613389565b9a9003989098039b5050949096039290920396509091030392506128d0915050565b50949093039650039350900390505b9250925092565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60056020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b9067010000000000000081046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b6000546001600160a01b031615612a1e576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612a29826136a5565b9050600080612a41612a39612c27565b60089061446a565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a08801839052600160c0909801979097528154600160f01b73ffffffffffffffffffffffffffffffffffffffff19909116871762ffffff60a01b1916600160a01b62ffffff9787900b9790971696909602959095177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9091021761ffff60d81b1916600160d81b909602959095177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b60008082600281900b620d89e71981612b9957fe5b05029050600083600281900b620d89e881612bb057fe5b0502905060008460020b83830360020b81612bc757fe5b0560010190508062ffffff166001600160801b03801681612be457fe5b0493505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c2557600080fd5b565b4290565b60008060008460020b8660020b81612c3f57fe5b05905060008660020b128015612c6657508460020b8660020b81612c5f57fe5b0760020b15155b15612c7057600019015b8315612ce557600080612c82836144b6565b600182810b810b600090815260208d9052604090205460ff83169190911b80016000190190811680151597509294509092509085612cc757888360ff16860302612cda565b88612cd1826144c8565b840360ff168603025b965050505050612d63565b600080612cf4836001016144b6565b91509150600060018260ff166001901b031990506000818b60008660010b60010b8152602001908152602001600020541690508060001415955085612d4657888360ff0360ff16866001010102612d5c565b8883612d5183614568565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612d84578260020b612d8c565b8260020b6000035b9050620d89e8811115612dca576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612dde57600160801b612df0565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612e24576ffff97272373d413259a46990580e213a0260801c5b6004821615612e43576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e62576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e81576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612ea0576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612ebf576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612ede576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612efe576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f1e576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f3e576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f5e576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f7e576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612f9e576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612fbe576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fde576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612fff576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561301f576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561303e576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561305b576b048a170391f7dc42444e8fa20260801c5b60008460020b131561307657806000198161307257fe5b0490505b64010000000081061561308a57600161308d565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906131245760006130d88989620f42400362ffffff16620f42406132d9565b9050826130f1576130ec8c8c8c6001614652565b6130fe565b6130fe8b8d8c60016146cd565b955085811061310f578a965061311e565b61311b8c8b838661478a565b96505b5061316e565b8161313b576131368b8b8b60006146cd565b613148565b6131488a8c8b6000614652565b935083886000031061315c5789955061316e565b61316b8b8a8a600003856147d6565b95505b6001600160a01b038a81169087161482156131d15780801561318d5750815b6131a35761319e878d8c60016146cd565b6131a5565b855b95508080156131b2575081155b6131c8576131c3878d8c6000614652565b6131ca565b845b945061321b565b8080156131db5750815b6131f1576131ec8c888c6001614652565b6131f3565b855b9550808015613200575081155b613216576132118c888c60006146cd565b613218565b845b94505b8115801561322b57508860000385115b15613237578860000394505b81801561325657508a6001600160a01b0316876001600160a01b031614155b15613265578589039350613282565b61327f868962ffffff168a620f42400362ffffff166141a9565b93505b50505095509550955095915050565b6000600160ff1b82106132a357600080fd5b5090565b808203828113156000831215146132bd57600080fd5b92915050565b818101828112156000831215146132bd57600080fd5b600080806000198587098686029250828110908390030390508061330f576000841161330457600080fd5b508290049050613382565b80841161331b57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60008063ffffffff8716613430576000898661ffff1661ffff81106133aa57fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461341c57613419818a8988614822565b90505b806020015181604001519250925050613510565b8688036000806134458c8c858c8c8c8c6148d2565b91509150816000015163ffffffff168363ffffffff161415613477578160200151826040015194509450505050613510565b805163ffffffff8481169116141561349f578060200151816040015194509450505050613510565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b816134cd57fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b031602816134ff57fe5b048560400151019650965050505050505b97509795505050505050565b600295860b860b60009081526020979097526040909620600181018054909503909455938301805490920390915560038201805463ffffffff600160d81b6001600160a01b036701000000000000008085048216909603169094027fffffffffff0000000000000000000000000000000000000000ffffffffffffff90921691909117600681810b90960390950b66ffffffffffffff1666ffffffffffffff199095169490941782810485169095039093160263ffffffff60d81b1990931692909217905554600160801b9004600f0b90565b60008082600f0b121561365457826001600160801b03168260000384039150816001600160801b03161061364f576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b6132bd565b826001600160801b03168284019150816001600160801b031610156132bd576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906136e1575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613716576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106137b757607f810383901c91506137c1565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146139c257886001600160a01b03166139a682612d6d565b6001600160a01b031611156139bb57816139bd565b805b6139c4565b815b9998505050505050505050565b6000806000898961ffff1661ffff81106139e757fe5b60408051608081018252919092015463ffffffff8082168084526401000000008304600690810b810b900b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089161415613a575788859250925050613510565b8461ffff168461ffff16118015613a7857506001850361ffff168961ffff16145b15613a8557839150613a89565b8491505b8161ffff168960010161ffff1681613a9d57fe5b069250613aac81898989614822565b8a8461ffff1661ffff8110613abd57fe5b825191018054602084015160408501516060909501511515600160f81b027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001600160a01b03909616600160581b027fff0000000000000000000000000000000000000000ffffffffffffffffffffff60069390930b66ffffffffffffff16640100000000026affffffffffffff000000001963ffffffff90971663ffffffff199095169490941795909516929092171692909217929092161790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613c025780518252601f199092019160209182019101613be3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c64576040519150601f19603f3d011682016040523d82523d6000602084013e613c69565b606091505b5091509150818015613c97575080511580613c975750808060200190516020811015613c9457600080fd5b50515b613ccd576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693919290918291908083835b60208310613d6d5780518252601f199092019160209182019101613d4e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613dcd576040519150601f19603f3d011682016040523d82523d6000602084013e613dd2565b606091505b5091509150818015613de657506020815110155b613def57600080fd5b808060200190516020811015613e0457600080fd5b50519250505090565b808201828110156132bd57600080fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17815291518151600093849384936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016939192909182919080838360208310613d6d5780518252601f199092019160209182019101613d4e565b6000808361ffff1611613ef3576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff1611613f09575081613382565b825b8261ffff168161ffff161015613f4f576001858261ffff1661ffff8110613f2e57fe5b01805463ffffffff191663ffffffff92909216919091179055600101613f0b565b50909392505050565b80600f81900b8114612beb57600080fd5b6000806000613f76612bf0565b613f88846020015185604001516143a1565b6040805160e0810182526000546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c08501528851908901519489015192890151939461402c9491939092909190614acf565b93508460600151600f0b6000146141a157846020015160020b816020015160020b12156140815761407a6140638660200151612d6d565b6140708760400151612d6d565b8760600151614c84565b92506141a1565b846040015160020b816020015160020b12156141775760045460408201516001600160801b03909116906140d3906140b7612c27565b60208501516060860151608087015160089493929187916139d1565b6000805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151614123919061411990612d6d565b8860600151614c84565b93506141416141358760200151612d6d565b83516060890151614cc8565b92506141518187606001516135ef565b600480546001600160801b0319166001600160801b0392909216919091179055506141a1565b61419e6141878660200151612d6d565b6141948760400151612d6d565b8760600151614cc8565b91505b509193909250565b60006141b68484846132d9565b9050600082806141c257fe5b84860911156133825760001981106141d957600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b60608060008361ffff1611614287576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b865167ffffffffffffffff8111801561429f57600080fd5b506040519080825280602002602001820160405280156142c9578160200160208202803683370190505b509150865167ffffffffffffffff811180156142e457600080fd5b5060405190808252806020026020018201604052801561430e578160200160208202803683370190505b50905060005b87518110156143945761433f8a8a8a848151811061432e57fe5b60200260200101518a8a8a8a613389565b84838151811061434b57fe5b6020026020010184848151811061435e57fe5b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508080600101915050614314565b5097509795505050505050565b8060020b8260020b126143e1576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b1215614424576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614466576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160808101825263ffffffff9283168082526000602083018190529282019290925260016060909101819052835463ffffffff1916909117909116600160f81b17909155908190565b60020b600881901d9161010090910790565b60008082116144d657600080fd5b600160801b82106144e957608091821c91015b68010000000000000000821061450157604091821c91015b640100000000821061451557602091821c91015b62010000821061452757601091821c91015b610100821061453857600891821c91015b6010821061454857600491821c91015b6004821061455857600291821c91015b60028210612beb57600101919050565b600080821161457657600080fd5b5060ff6001600160801b0382161561459157607f1901614599565b608082901c91505b67ffffffffffffffff8216156145b257603f19016145ba565b604082901c91505b63ffffffff8216156145cf57601f19016145d7565b602082901c91505b61ffff8216156145ea57600f19016145f2565b601082901c91505b60ff821615614604576007190161460c565b600882901c91505b600f82161561461e5760031901614626565b600482901c91505b60038216156146385760011901614640565b600282901c91505b6001821615612beb5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614672579293925b8161469f5761469a836001600160801b03168686036001600160a01b0316600160601b6132d9565b6146c2565b6146c2836001600160801b03168686036001600160a01b0316600160601b6141a9565b90505b949350505050565b6000836001600160a01b0316856001600160a01b031611156146ed579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b03868603811690871661472957600080fd5b8361475957866001600160a01b031661474c8383896001600160a01b03166132d9565b8161475357fe5b0461477f565b61477f6147708383896001600160a01b03166141a9565b886001600160a01b0316614cf7565b979650505050505050565b600080856001600160a01b0316116147a157600080fd5b6000846001600160801b0316116147b757600080fd5b816147c95761469a8585856001614d02565b6146c28585856001614de3565b600080856001600160a01b0316116147ed57600080fd5b6000846001600160801b03161161480357600080fd5b816148155761469a8585856000614de3565b6146c28585856000614d02565b61482a61564a565b600085600001518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020016000856001600160801b03161161487e576001614880565b845b6001600160801b031673ffffffff00000000000000000000000000000000608085901b16816148ab57fe5b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b6148da61564a565b6148e261564a565b888561ffff1661ffff81106148f357fe5b60408051608081018252919092015463ffffffff81168083526401000000008204600690810b810b900b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff1615156060820152925061495890899089614ed8565b15614990578663ffffffff16826000015163ffffffff16141561497a57613510565b8161498783898988614822565b91509150613510565b888361ffff168660010161ffff16816149a557fe5b0661ffff1661ffff81106149b557fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614a6c57604080516080810182528a5463ffffffff811682526401000000008104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614a7b88836000015189614ed8565b614ab2576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b614abf8989898887614f9b565b9150915097509795505050505050565b6000614ade60078787876141e3565b60015460025491925090600080600f87900b15614c24576000614aff612c27565b6000805460045492935090918291614b499160089186918591600160a01b810460020b9161ffff600160b81b83048116926001600160801b0390921691600160c81b900416613389565b9092509050614b8360058d8b8d8b8b87898b60007f000000000000000000000000000000000000000000000000000000000000000061513b565b9450614bba60058c8b8d8b8b87898b60017f000000000000000000000000000000000000000000000000000000000000000061513b565b93508415614bee57614bee60068d7f0000000000000000000000000000000000000000000000000000000000000000615325565b8315614c2057614c2060068c7f0000000000000000000000000000000000000000000000000000000000000000615325565b5050505b600080614c3660058c8c8b8a8a61538b565b9092509050614c47878a8484615437565b600089600f0b1215614c75578315614c6457614c6460058c6155cc565b8215614c7557614c7560058b6155cc565b50505050505095945050505050565b60008082600f0b12614caa57614ca5614ca085858560016146cd565b613291565b6146c5565b614cbd614ca085858560000360006146cd565b600003949350505050565b60008082600f0b12614ce457614ca5614ca08585856001614652565b614cbd614ca08585856000036000614652565b808204910615150190565b60008115614d755760006001600160a01b03841115614d3857614d3384600160601b876001600160801b03166132d9565b614d50565b6001600160801b038516606085901b81614d4e57fe5b045b9050614d6d614d686001600160a01b03881683613e0d565b6155f8565b9150506146c5565b60006001600160a01b03841115614da357614d9e84600160601b876001600160801b03166141a9565b614dba565b614dba606085901b6001600160801b038716614cf7565b905080866001600160a01b031611614dd157600080fd5b6001600160a01b0386160390506146c5565b600082614df15750836146c5565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b168215614e91576001600160a01b03861684810290858281614e3157fe5b041415614e6257818101828110614e6057614e5683896001600160a01b0316836141a9565b93505050506146c5565b505b614e8882614e83878a6001600160a01b03168681614e7c57fe5b0490613e0d565b614cf7565b925050506146c5565b6001600160a01b03861684810290858281614ea857fe5b04148015614eb557508082115b614ebe57600080fd5b808203614e56614d68846001600160a01b038b16846141a9565b60008363ffffffff168363ffffffff1611158015614f0257508363ffffffff168263ffffffff1611155b15614f1e578163ffffffff168363ffffffff1611159050613382565b60008463ffffffff168463ffffffff1611614f46578363ffffffff1664010000000001614f4e565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611614f7f578363ffffffff1664010000000001614f87565b8363ffffffff165b64ffffffffff169091111595945050505050565b614fa361564a565b614fab61564a565b60008361ffff168560010161ffff1681614fc157fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff87168281614fee57fe5b0661ffff8110614ffa57fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061506557806001019250614fd9565b898661ffff16826001018161507657fe5b0661ffff811061508257fe5b60408051608081018252929091015463ffffffff811683526401000000008104600690810b810b900b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094506000906150ed908b908b614ed8565b905080801561510657506151068a8a8760000151614ed8565b15615111575061512e565b8061512157600182039250615128565b8160010193505b50614fd9565b5050509550959350505050565b60028a810b900b600090815260208c90526040812080546001600160801b031682615166828d6135ef565b9050846001600160801b0316816001600160801b031611156151b4576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b03828116159082161581141594501561528a578c60020b8e60020b1361525a57600183018b9055600283018a90556003830180547fffffffffff0000000000000000000000000000000000000000ffffffffffffff166701000000000000006001600160a01b038c16021766ffffffffffffff191666ffffffffffffff60068b900b161763ffffffff60d81b1916600160d81b63ffffffff8a16021790555b6003830180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790555b82546001600160801b0319166001600160801b038216178355856152d35782546152ce906152c990600160801b9004600f90810b810b908f900b6132c3565b613f58565b6152f4565b82546152f4906152c990600160801b9004600f90810b810b908f900b6132a7565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909c9b505050505050505050505050565b8060020b8260020b8161533457fe5b0760020b1561534257600080fd5b60008061535d8360020b8560020b8161535757fe5b056144b6565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b126153d1575050600182015460028301546153e4565b8360010154880391508360020154870390505b6000808b60020b8b60020b121561540657505060018301546002840154615419565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b6154d65781516001600160801b03166154ce576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b5080516154e5565b81516154e290866135ef565b90505b60006155098360200151860384600001516001600160801b0316600160801b6132d9565b9050600061552f8460400151860385600001516001600160801b0316600160801b6132d9565b905086600f0b6000146155565787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061558457506000816001600160801b0316115b156155c2576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b6000908152602092909252604082208281556001810183905590810182905560030155565b806001600160a01b0381168114612beb57600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160808101825260008082526020820181905291810182905260608101919091529056fea164736f6c6343000706000a";class Ta extends a{constructor(...e){e.length>1?super(...e):super(ga,Ea,e[0])}deploy(e){return super.deploy(e||{})}getDeployTransaction(e){return super.getDeployTransaction(e||{})}attach(e){return super.attach(e)}connect(e){return super.connect(e)}static bytecode=Ea;static abi=ga;static createInterface(){return new r.Interface(ga)}static connect(e,t){return new i(e,ga,t)}}const wa=2e6;async function va(e,t,n){const a=Ta.createInterface(),r=Ra(t,a),i=[];return r&&n.forEach((e=>{e&&i.push({target:e,callData:r,gasLimit:s.from("1000000")})})),e.callStatic.multicall(i)}const Ra=(e,t)=>{const n=t?.getFunction(e);return n?t?.encodeFunctionData(n):void 0},Aa={"0xcdca1753":["uint256","uint160[]","uint32[]","uint256"],"0xc6a5026a":["uint256","uint160","uint32","uint256"],"0x2f80bb1d":["uint256","uint160[]","uint32[]","uint256"],"0xbd21704a":["uint256","uint160","uint32","uint256"]};const _a=n.utils.id("decimals()").substring(0,10);async function Ca(e,t,n){if("native"===e)return n.decimals;try{const n=await t.call({to:e,data:_a});return parseInt(n,16)}catch(e){const t=e instanceof Error?e.message:"Unknown Error";throw new ca(`failed to get ERC20 decimals: ${t}`)}}function Ia(e){if(e===n.constants.AddressZero)return!1;try{return n.utils.getAddress(e),!0}catch(e){return!1}}const Na=e=>"native"===e||Ia(e),Oa=e=>new l.Token(e.chainId,e.address,e.decimals,e.symbol,e.name),Sa=e=>({chainId:e.chainId,address:e.address,decimals:e.decimals,symbol:e.symbol,name:e.name,type:"erc20"}),Ma=e=>{const t=Oa(e.token);return l.CurrencyAmount.fromRawAmount(t,e.value.toString())},ka=(e,t)=>({value:e,token:t}),Pa=e=>"erc20"===e.token.type,Da=e=>"native"===e.token.type,La=e=>"native"===e.type,xa=(e,t)=>{if(Pa(e)&&Pa(t))return((e,t)=>{if(e.token.address!==t.token.address)throw new Error("Token mismatch: token addresses must be the same");return{value:e.value.add(t.value),token:e.token}})(e,t);if(Da(e)&&Da(t))return((e,t)=>({value:e.value.add(t.value),token:e.token}))(e,t);throw new Error("Token mismatch: token types must be the same")},Fa=(e,t)=>{if(Pa(e)&&Pa(t))return((e,t)=>{if(e.token.address!==t.token.address)throw new Error("Token mismatch: token addresses must be the same");return{value:e.value.sub(t.value),token:e.token}})(e,t);if(Da(e)&&Da(t))return((e,t)=>({value:e.value.sub(t.value),token:e.token}))(e,t);throw new Error("Token mismatch: token types must be the same")},Ua=e=>{return{token:(t=e.token,"native"===t.type?{address:"",chainId:t.chainId,decimals:t.decimals,symbol:t.symbol,name:t.name}:t),value:e.value};var t};async function Ba(e,t,a,r,i){const o=a.map((e=>g.quoteCallParameters(e,Ma(r),i,{useQuoterV2:!0}).calldata));let c;try{c=await async function(e,t,n,a){const r=new Array(t.length);for(const e in t)r[e]={target:n,callData:t[e],gasLimit:a?.gasRequired??wa};return e.callStatic.multicall(r)}(e,o,t)}catch(e){const t=e instanceof Error?e.message:"Unknown Error";throw new ca(`failed multicall: ${t}`)}const d=[];for(const e in c.returnData){const t=o[e].substring(0,10),u=Aa[t];if(!u)throw new Error("No quoting function signature found");if("0x"!==c.returnData[e].returnData)try{const t=n.utils.defaultAbiCoder.decode(u,c.returnData[e].returnData);if(t){const o=t[0];if(!(o instanceof s))throw new Error("Expected BigNumber");const c=Sa(a[e].input),u=Sa(a[e].output);d.push({route:a[e],amountIn:i===p.EXACT_INPUT?r:ka(o,c),amountOut:i===p.EXACT_INPUT?ka(o,u):r,gasEstimate:n.BigNumber.from(t[3]),tradeType:i})}}catch{}}return d}function Va({factoryAddress:e,erc20Pair:t,fee:a,initCodeHashManualOverride:r}){return t=Ga(t),n.utils.getCreate2Address(e,R(["bytes"],[n.utils.defaultAbiCoder.encode(["address","address","uint24"],[t[0].address,t[1].address,a])]),r??"0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54")}const Ga=e=>{if(e[0].address.toLowerCase()>e[1].address.toLowerCase()){const t=e[0];e[0]=e[1],e[1]=t}return e},qa=[b.LOWEST,b.LOW,b.MEDIUM,b.HIGH],ja=(e,t,n)=>{const a=((e,t)=>{const n=new Map,a=[];[...e,...t].forEach((e=>{n.set(e.address,e),a.push(e.address)}));const r=[...new Set([...a])],i=[];for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){const a=n.get(r[e]),s=n.get(r[t]);a&&s&&i.push([a,s])}return i})(e,t),r=[];for(let e=0;e<a.length;e++)for(let t=0;t<qa.length;t++){const i=Va({factoryAddress:n,erc20Pair:a[e],fee:qa[t]});r.push({erc20Pair:a[e],fee:qa[t],poolAddress:i})}return r},$a="liquidity",Ha="slot0";class za{provider;routingTokens;routingContracts;constructor(e,t,n){this.provider=e,this.routingTokens=t,this.routingContracts=n}async findOptimalRoute(e,t,n,a=2){const[r,i]=this.determineERC20InAndERC20Out(n,e,t),s=ha.connect(this.routingContracts.multicallAddress,this.provider),o=[r,i],c=await(async(e,t,n,a)=>{const r=ja(t,n,a),i=r.map((e=>e.poolAddress));let s,o;try{[s,o]=await Promise.all([va(e,Ha,i),va(e,$a,i)])}catch(e){const t=e instanceof Error?e.message:"Unknown Error";throw new ca(`failed multicall: ${t}`)}const c=s.returnData,d=o.returnData,u=Ta.createInterface(),f=[];return r.forEach(((e,t)=>{const n="0x"===s.returnData[t].returnData,a="0x"===o.returnData[t].returnData;if(n||a)return;const r=u.decodeFunctionResult(Ha,c[t].returnData),i=u.decodeFunctionResult($a,d[t].returnData),l=r.sqrtPriceX96.isZero(),p=i[0].isZero();if(l||p)return;const h=new E(Oa(e.erc20Pair[0]),Oa(e.erc20Pair[1]),e.fee,r.sqrtPriceX96.toString(),i.toString(),r.tick);f.push(h)})),f})(s,o,this.routingTokens,this.routingContracts.factoryAddress);if(0===c.length)throw new oa;const d=Wa(r,i,c,a,[],[],r);if(0===d.length)throw new oa;return await this.getBestQuoteFromRoutes(s,d,e,n)}async getBestQuoteFromRoutes(e,t,n,a){const r=await Ba(e,this.routingContracts.quoterAddress,t,n,a);if(0===r.length)throw new oa;if(a===p.EXACT_INPUT)return this.bestQuoteForAmountIn(r);if(a===p.EXACT_OUTPUT)return this.bestQuoteForAmountOut(r);throw new Error("Invalid trade type")}bestQuoteForAmountIn(e){let t=e[0];for(let n=1;n<e.length;n++)e[n].amountOut.value.gt(t.amountOut.value)&&(t=e[n]);return t}bestQuoteForAmountOut(e){let t=e[0];for(let n=1;n<e.length;n++)e[n].amountIn.value.lt(t.amountIn.value)&&(t=e[n]);return t}determineERC20InAndERC20Out(e,t,n){return e===p.EXACT_INPUT?[t.token,n]:[n,t.token]}}const Wa=(e,t,n,a,r=[],i=[],s=e)=>{const o=Oa(e),c=Oa(t),d=Oa(s);for(const e of n){const u=e.involvesToken(o),f=r.find((t=>{return(n=e)===(a=t)||n.token0.equals(a.token0)&&n.token1.equals(a.token1)&&n.fee===a.fee;var n,a}));if(!u||f)continue;const l=e.token0.equals(o)?e.token1:e.token0;l.equals(c)?i.push(new y([...r,e],d,c)):a>1&&Wa(Sa(l),t,n,a-1,[...r,e],i,s)}return i},Ka=async(e,t)=>{const n=await e.getFeeData().catch((()=>null));return n?(a=n).maxFeePerGas&&a.maxPriorityFeePerGas?ka(n.maxFeePerGas.add(n.maxPriorityFeePerGas),t):n.gasPrice?ka(n.gasPrice,t):null:null;var a},Xa=(e,t)=>ka(t.mul(e.value),e.token),Za=async(e,t,n,a)=>{const r=await(async(e,t,n,a)=>{const r=fa.connect(n.token.address,e);let i;try{i=await r.allowance(t,a)}catch(e){const t=e instanceof Error?e.message:"Unknown Error";throw new da(`failed to get allowance: ${t}`)}const s=n.value.sub(i);return!s.isNegative()&&!s.isZero()})(e,t,n,a);return r?((e,t,n)=>{if(e===n)throw new da("owner and spender addresses are the same");return{data:fa.createInterface().encodeFunctionData("approve",[n,t.value]),to:t.token.address,value:0,from:e}})(t,n,a):null};const Ja=async(e,t,a,r)=>{const i=await Za(e,t,a.amount,a.spender);if(!i)return null;const s=await async function(e,t,a,r){const i=fa.connect(r,e);return await i.estimateGas.approve(a,n.constants.MaxUint256,{from:t})}(e,t,a.spender,a.amount.token.address),o=r?Xa(r,s):null;return{transaction:i,gasFeeEstimate:o?Ua(o):null}},Ya=e=>"native"===e.type;class Qa{nativeToken;wrappedToken;constructor(e,t){this.nativeToken=e,this.wrappedToken=t}wrapAmount(e){if(!Ya(e.token))throw new Error(`cannot wrap non-native token: ${e.token.address}`);return ka(e.value,this.wrappedToken)}unwrapAmount(e){if(e.token.address.toLowerCase()!==this.wrappedToken.address.toLowerCase())throw new Error(`cannot unwrap non-wrapped token ${e.token.address}`);return ka(e.value,this.nativeToken)}maybeWrapToken(e){return Ya(e)?this.wrappedToken:e}maybeWrapAmount(e){return ka(e.value,this.maybeWrapToken(e.token))}}const er=e=>{if(1===e.toString().split(".").length)return new h(e,100);const t=(e/100).toString().split("."),n=t[0]+t[1],a=10**t[1].length;return new h(n,a)};const tr=(e,t,a,r)=>{const i=function(e){return e.tradeType===p.EXACT_INPUT?e.amountOut:e.amountIn}(t),s=Ya(r)?e.unwrapAmount(i):i,o=ka(function(e,t,a){const r=er(a).add(1),i=(e===p.EXACT_INPUT?r.invert():r).multiply(t.toString()).quotient;return n.BigNumber.from(i.toString())}(t.tradeType,s.value,a),r);return{quotedAmount:s,quotedAmountWithMaxSlippage:o}};const nr=Math.floor(Date.now()/1e3)+900;class ar{secondaryFees;amount;constructor(e,t){this.secondaryFees=e,this.amount=ka(s.from(0),t)}get token(){return this.amount.token}addAmount(e){this.amount=xa(this.amount,e)}amountWithFeesApplied(){return xa(this.amount,this.total())}amountLessFees(){return Fa(this.amount,this.total())}withAmounts(){return this.secondaryFees.map((e=>{const t=this.amount.value.mul(e.basisPoints).div(1e4);return{...e,amount:ka(t,this.amount.token)}}))}total(){let e=ka(s.from(0),this.amount.token);for(const t of this.secondaryFees){const n=this.amount.value.mul(t.basisPoints).div(1e4);e=xa(e,ka(n,this.amount.token))}return e}}const rr=13473,ir={chainId:rr,address:"0x1CcCa691501174B4A623CeDA58cC8f1a76dc3439",decimals:18,symbol:"WIMX",name:"Wrapped Immutable Testnet Token",type:"erc20"},sr="multicall(uint256,bytes[])";function or(e,t,n,a,r,i,s,o,c,d){const{route:u}=a.swaps[0],f=1===u.pools.length,p=r.length>0;return f?p?function(e,t,n,a,r,i,s,o){const c=i.map((e=>({feeBasisPoints:e.basisPoints,recipient:e.recipient}))),d=[];return t.tradeType===l.TradeType.EXACT_INPUT&&d.push(s.encodeFunctionData("exactInputSingleWithSecondaryFee",[c,{tokenIn:n.tokenPath[0].address,tokenOut:n.tokenPath[1].address,fee:n.pools[0].fee,recipient:e,amountIn:a,amountOutMinimum:r,sqrtPriceLimitX96:0}])),t.tradeType===l.TradeType.EXACT_OUTPUT&&d.push(s.encodeFunctionData("exactOutputSingleWithSecondaryFee",[c,{tokenIn:n.tokenPath[0].address,tokenOut:n.tokenPath[1].address,fee:n.pools[0].fee,recipient:e,amountInMaximum:a,amountOut:r,sqrtPriceLimitX96:0}])),La(o)&&d.push(s.encodeFunctionData("unwrapNativeToken",[r])),d}(n,a,u,c,d,r,i,t):function(e,t,n,a,r,i,s,o,c){const d=[];return a.tradeType===l.TradeType.EXACT_INPUT&&d.push(o.encodeFunctionData("exactInputSingle",[{tokenIn:r.tokenPath[0].address,tokenOut:r.tokenPath[1].address,fee:r.pools[0].fee,recipient:n,amountIn:i,amountOutMinimum:s,sqrtPriceLimitX96:0}])),a.tradeType===l.TradeType.EXACT_OUTPUT&&d.push(o.encodeFunctionData("exactOutputSingle",[{tokenIn:r.tokenPath[0].address,tokenOut:r.tokenPath[1].address,fee:r.pools[0].fee,recipient:n,amountInMaximum:i,amountOut:s,sqrtPriceLimitX96:0}])),a.tradeType===l.TradeType.EXACT_OUTPUT&&La(e)&&d.push(c.encodeFunctionData("refundETH")),La(t)&&d.push(c.encodeFunctionData("unwrapWETH9(uint256)",[s])),d}(e,t,n,a,u,c,d,s,o):p?function(e,t,n,a,r,i,s,o){const c=v(n,t.tradeType===l.TradeType.EXACT_OUTPUT),d=i.map((e=>({feeBasisPoints:e.basisPoints,recipient:e.recipient}))),u=[];return t.tradeType===l.TradeType.EXACT_INPUT&&u.push(s.encodeFunctionData("exactInputWithSecondaryFee",[d,{path:c,recipient:e,amountIn:a,amountOutMinimum:r}])),t.tradeType===l.TradeType.EXACT_OUTPUT&&u.push(s.encodeFunctionData("exactOutputWithSecondaryFee",[d,{path:c,recipient:e,amountInMaximum:a,amountOut:r}])),La(o)&&u.push(s.encodeFunctionData("unwrapNativeToken",[r])),u}(n,a,u,c,d,r,i,t):function(e,t,n,a,r,i,s,o,c){const d=v(r,a.tradeType===l.TradeType.EXACT_OUTPUT),u=[];return a.tradeType===l.TradeType.EXACT_INPUT&&u.push(o.encodeFunctionData("exactInput",[{path:d,recipient:n,amountIn:i,amountOutMinimum:s}])),a.tradeType===l.TradeType.EXACT_OUTPUT&&u.push(o.encodeFunctionData("exactOutput",[{path:d,recipient:n,amountInMaximum:i,amountOut:s}])),a.tradeType===l.TradeType.EXACT_OUTPUT&&La(e)&&u.push(c.encodeFunctionData("refundETH")),La(t)&&u.push(c.encodeFunctionData("unwrapWETH9(uint256)",[s])),u}(e,t,n,a,u,c,d,s,o)}function cr(e,t,n,a,r,i,s,o){const c=ya.createInterface(),d=or(e,t,a,n,i,c,A.INTERFACE,_.INTERFACE,s,o);return c.encodeFunctionData(sr,[r.deadlineOrPreviousBlockhash,d])}function dr(e,t,n,a,r,i,s,o,c,d){const u=((e,t,n,a,r)=>La(e)?0===r.length?n:a:t)(t,a,s,o,d),{calldata:f,maximumAmountIn:l}=function(e,t,n,a,r,i,s){const o=T.createUncheckedTrade({route:n.route,inputAmount:Ma(n.amountIn),outputAmount:Ma(n.amountOut),tradeType:n.tradeType}),c={slippageTolerance:er(r),recipient:a,deadlineOrPreviousBlockhash:i},d=w(o.maximumAmountIn(c.slippageTolerance).quotient),u=w(o.minimumAmountOut(c.slippageTolerance).quotient);return{calldata:cr(e,t,o,a,c,s,d,u),maximumAmountIn:d}}(e,t,n,u,r,i,d),p=c?Xa(c,n.gasEstimate):null,h=((e,t)=>"native"===e.type?t:"0x00")(e,l);return{transaction:{data:f,to:d.length>0?o:s,value:h,from:a},gasFeeEstimate:p?Ua(p):null}}function ur(e,t,n,a){const r=((e,t,n,a)=>{if(e.tradeType===l.TradeType.EXACT_OUTPUT){const t=Ya(n.token)?a.unwrapAmount(e.amountIn):e.amountIn;return n.addAmount(t),a.maybeWrapAmount(n.amountWithFeesApplied())}return a.maybeWrapAmount(t)})(e,t,n,a);return{gasEstimate:e.gasEstimate,route:e.route,amountIn:r,amountOut:e.amountOut,tradeType:e.tradeType}}const fr={[rr]:{chainId:rr,rpcUrl:"https://rpc.testnet.immutable.com",contracts:{[rr]:{multicall:"0x4DB567A44451b27C1fAd7f52e1cDf64b915d62f9",coreFactory:"0xb18c44b211065E69844FbA9AE146DA362104AfBf",quoterV2:"0x87854A7D4b9BaC3D37f4516A1Ac7F36fB5ad539f",peripheryRouter:"0x786ec643F231960D4C1A4E336990F8E7bF8f1277",secondaryFee:"0x1938B5B8313E1b64C2c577491Ef5441f9eD33204"}}[13473],commonRoutingTokens:[ir],nativeToken:{chainId:rr,decimals:18,symbol:"tIMX",name:"Immutable Testnet Token",type:"native"},wrappedNativeToken:ir}},lr={[N.SANDBOX]:fr,[N.PRODUCTION]:{}};class pr{baseConfig;chain;secondaryFees=[];constructor({chainId:e,baseConfig:t,secondaryFees:n,overrides:a}){if(this.baseConfig=t,this.secondaryFees=n||[],function(e){let t=0;for(const n of e){if(!Ia(n.recipient))throw new ta(`Invalid secondary fee recipient address: ${n.recipient}`);if(n.basisPoints<=0||n.basisPoints>1e3)throw new ta(`Invalid secondary fee basis points: ${n.basisPoints}`);t+=n.basisPoints}if(t>1e3)throw new ta(`Invalid total secondary fee basis points: ${t}`)}(this.secondaryFees),a)return function(e){const t=["rpcURL","exchangeContracts","commonRoutingTokens","nativeToken"];for(const n of t)if(!e[n])throw new ta(`Missing override: ${n}`);Object.entries(e.exchangeContracts).forEach((([e,t])=>{if(!Ia(t))throw new ta(`Invalid exchange contract address for ${e}`)}))}(a),this.chain={chainId:e,rpcUrl:a.rpcURL,contracts:a.exchangeContracts,commonRoutingTokens:a.commonRoutingTokens,nativeToken:a.nativeToken,wrappedNativeToken:a.wrappedNativeToken},void(this.secondaryFees=n||[]);const r=lr[t.environment][e];if(!r)throw new na(e,t.environment);this.chain=r}}class hr{provider;router;chainId;nativeToken;wrappedNativeToken;secondaryFees;nativeTokenService;secondaryFeeContractAddress;routerContractAddress;constructor(e){const t=new pr(e);this.chainId=t.chain.chainId,this.nativeToken=t.chain.nativeToken,this.wrappedNativeToken=t.chain.wrappedNativeToken,this.nativeTokenService=new Qa(this.nativeToken,this.wrappedNativeToken),this.secondaryFees=t.secondaryFees,this.routerContractAddress=t.chain.contracts.peripheryRouter,this.secondaryFeeContractAddress=t.chain.contracts.secondaryFee,this.provider=new n.providers.JsonRpcProvider(t.chain.rpcUrl),this.router=new za(this.provider,t.chain.commonRoutingTokens,{multicallAddress:t.chain.contracts.multicall,factoryAddress:t.chain.contracts.coreFactory,quoterAddress:t.chain.contracts.quoterV2})}static validate(e,t,n,a,r){m(Ia(r),new ia("invalid from address")),m(Na(e),new ia("invalid token in address")),m(Na(t),new ia("invalid token out address")),m(e.toLocaleLowerCase()!==t.toLocaleLowerCase(),new sa),m(n<=10,new ra("max hops must be less than or equal to 10")),m(n>=1,new ra("max hops must be greater than or equal to 1")),m(a<=50,new aa("slippage percent must be less than or equal to 50")),m(a>=0,new aa("slippage percent must be greater than or equal to 0"))}async getSecondaryFees(){if(0===this.secondaryFees.length)return[];const e=ya.connect(this.secondaryFeeContractAddress,this.provider);return await e.paused()?[]:this.secondaryFees}parseTokenLiteral(e,t){return"native"===e?this.nativeToken:{type:"erc20",address:e,chainId:this.chainId,decimals:t}}async getUnsignedSwapTx(e,t,n,a,r,i,s,o){hr.validate(t,n,i,r,e);const[c,d,u]=await Promise.all([Ca(t,this.provider,this.nativeToken),Ca(n,this.provider,this.nativeToken),this.getSecondaryFees()]),f=this.parseTokenLiteral(t,c),l=this.parseTokenLiteral(n,d),[h,m]=o===p.EXACT_INPUT?[f,l]:[l,f],b=ka(a,h),y=new ar(u,f),g=function(e,t,n,a){return n===p.EXACT_OUTPUT?a.maybeWrapAmount(e):(t.addAmount(e),a.maybeWrapAmount(t.amountLessFees()))}(b,y,o,this.nativeTokenService),[E,T]=await Promise.all([this.router.findOptimalRoute(g,this.nativeTokenService.maybeWrapToken(m),o,i),Ka(this.provider,this.nativeToken)]),w=ur(E,b,y,this.nativeTokenService),v=dr(f,l,w,e,r,s,this.routerContractAddress,this.secondaryFeeContractAddress,T,u),{quotedAmount:R,quotedAmountWithMaxSlippage:A}=tr(this.nativeTokenService,w,r,m),_=((e,t,n,a,r)=>{const i=e===p.EXACT_INPUT?t:n;return Pa(i)?{spender:0===r.length?a.routerAddress:a.secondaryFeeAddress,amount:i}:null})(o,b,A,{routerAddress:this.routerContractAddress,secondaryFeeAddress:this.secondaryFeeContractAddress},u),C=_?await Ja(this.provider,e,_,T):null,I=((e,t,n,a)=>({amount:Ua(e),amountWithMaxSlippage:Ua(t),slippage:n,fees:a.withAmounts().map((e=>({...e,amount:Ua(e.amount)})))}))(R,A,r,y);return{quote:I,approval:C,swap:v}}async getUnsignedSwapTxFromAmountIn(e,t,a,r,i=.1,s=2,o=nr){return await this.getUnsignedSwapTx(e,t,a,n.BigNumber.from(r),i,s,o,p.EXACT_INPUT)}async getUnsignedSwapTxFromAmountOut(e,t,a,r,i=.1,s=2,o=nr){return await this.getUnsignedSwapTx(e,t,a,n.BigNumber.from(r),i,s,o,p.EXACT_OUTPUT)}}class mr{config;constructor(e){this.config=e}}class br extends Error{url;status;statusText;body;request;constructor(e,t,n){super(n),this.name="ApiError",this.url=t.url,this.status=t.status,this.statusText=t.statusText,this.body=t.body,this.request=e}}class yr extends Error{constructor(e){super(e),this.name="CancelError"}get isCancelled(){return!0}}class gr{[Symbol.toStringTag];_isResolved;_isRejected;_isCancelled;_cancelHandlers;_promise;_resolve;_reject;constructor(e){this._isResolved=!1,this._isRejected=!1,this._isCancelled=!1,this._cancelHandlers=[],this._promise=new Promise(((t,n)=>{this._resolve=t,this._reject=n;const a=e=>{this._isResolved||this._isRejected||this._isCancelled||this._cancelHandlers.push(e)};return Object.defineProperty(a,"isResolved",{get:()=>this._isResolved}),Object.defineProperty(a,"isRejected",{get:()=>this._isRejected}),Object.defineProperty(a,"isCancelled",{get:()=>this._isCancelled}),e((e=>{this._isResolved||this._isRejected||this._isCancelled||(this._isResolved=!0,this._resolve?.(e))}),(e=>{this._isResolved||this._isRejected||this._isCancelled||(this._isRejected=!0,this._reject?.(e))}),a)}))}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(){if(!(this._isResolved||this._isRejected||this._isCancelled)){if(this._isCancelled=!0,this._cancelHandlers.length)try{for(const e of this._cancelHandlers)e()}catch(e){return void console.warn("Cancellation threw an error",e)}this._cancelHandlers.length=0,this._reject?.(new yr("Request aborted"))}}get isCancelled(){return this._isCancelled}}const Er=e=>null!=e,Tr=e=>"string"==typeof e,wr=e=>Tr(e)&&""!==e,vr=e=>"object"==typeof e&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.arrayBuffer&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag]),Rr=e=>{const t=[],n=(e,a)=>{Er(a)&&(Array.isArray(a)?a.forEach((t=>{n(e,t)})):"object"==typeof a?Object.entries(a).forEach((([t,a])=>{n(`${e}[${t}]`,a)})):((e,n)=>{t.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(n))}`)})(e,a))};return Object.entries(e).forEach((([e,t])=>{n(e,t)})),t.length>0?`?${t.join("&")}`:""},Ar=async(e,t)=>"function"==typeof t?t(e):t,_r=async(e,t,n)=>{const a=await Ar(t,e.TOKEN),r=await Ar(t,e.USERNAME),i=await Ar(t,e.PASSWORD),s=await Ar(t,e.HEADERS),o="function"==typeof n?.getHeaders&&n?.getHeaders()||{},c=Object.entries({Accept:"application/json",...s,...t.headers,...o}).filter((([e,t])=>Er(t))).reduce(((e,[t,n])=>({...e,[t]:String(n)})),{});if(wr(a)&&(c.Authorization=`Bearer ${a}`),wr(r)&&wr(i)){const e=(e=>{try{return btoa(e)}catch(t){return Buffer.from(e).toString("base64")}})(`${r}:${i}`);c.Authorization=`Basic ${e}`}return t.body&&(t.mediaType?c["Content-Type"]=t.mediaType:vr(t.body)?c["Content-Type"]=t.body.type||"application/octet-stream":Tr(t.body)?c["Content-Type"]="text/plain":t.body instanceof C||(c["Content-Type"]="application/json")),c},Cr=(t,n)=>new gr((async(a,r,i)=>{try{const r=((e,t)=>{const n=e.ENCODE_PATH||encodeURI,a=t.url.replace("{api-version}",e.VERSION).replace(/{(.*?)}/g,((e,a)=>t.path?.hasOwnProperty(a)?n(String(t.path[a])):e)),r=`${e.BASE}${a}`;return t.query?`${r}${Rr(t.query)}`:r})(t,n),o=(e=>{if(e.formData){const t=new C,n=(e,n)=>{Tr(n)||vr(n)?t.append(e,n):t.append(e,JSON.stringify(n))};return Object.entries(e.formData).filter((([e,t])=>Er(t))).forEach((([e,t])=>{Array.isArray(t)?t.forEach((t=>n(e,t))):n(e,t)})),t}})(n),c=(e=>{if(e.body)return e.body})(n),d=await _r(t,n,o);if(!i.isCancelled){const u=await(async(t,n,a,r,i,s,o)=>{const c=e.CancelToken.source(),d={url:a,headers:s,data:r??i,method:n.method,withCredentials:t.WITH_CREDENTIALS,cancelToken:c.token};o((()=>c.cancel("The user aborted a request.")));try{return await e.request(d)}catch(e){const t=e;if(t.response)return t.response;throw e}})(t,n,r,c,o,d,i),f=(e=>{if(204!==e.status)return e.data})(u),l=((e,t)=>{if(t){const n=e.headers[t];if(Tr(n))return n}})(u,n.responseHeader),p={url:r,ok:(s=u.status,s>=200&&s<300),status:u.status,statusText:u.statusText,body:l??f};((e,t)=>{const n={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...e.errors}[t.status];if(n)throw new br(e,t,n);if(!t.ok)throw new br(e,t,"Generic Error")})(n,p),a(p.body)}}catch(e){r(e)}var s}));class Ir extends mr{constructor(e){super(e)}request(e){return Cr(this.config,e)}}class Nr{httpRequest;constructor(e){this.httpRequest=e}cancelOrders({chainName:e,requestBody:t}){return this.httpRequest.request({method:"POST",url:"/v1/chains/{chain_name}/orders/cancel",path:{chain_name:e},body:t,mediaType:"application/json",errors:{400:"Bad Request (400)",401:"Unauthorised Request (401)",404:"The specified resource was not found (404)",429:"Too Many Requests (429)",500:"Internal Server Error (500)",501:"Not Implemented Error (501)"}})}listListings({chainName:e,status:t,sellItemContractAddress:n,buyItemContractAddress:a,sellItemTokenId:r,fromUpdatedAt:i,pageSize:s,sortBy:o,sortDirection:c,pageCursor:d}){return this.httpRequest.request({method:"GET",url:"/v1/chains/{chain_name}/orders/listings",path:{chain_name:e},query:{status:t,sell_item_contract_address:n,buy_item_contract_address:a,sell_item_token_id:r,from_updated_at:i,page_size:s,sort_by:o,sort_direction:c,page_cursor:d},errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}createListing({chainName:e,requestBody:t}){return this.httpRequest.request({method:"POST",url:"/v1/chains/{chain_name}/orders/listings",path:{chain_name:e},body:t,mediaType:"application/json",errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}getListing({chainName:e,listingId:t}){return this.httpRequest.request({method:"GET",url:"/v1/chains/{chain_name}/orders/listings/{listing_id}",path:{chain_name:e,listing_id:t},errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}fulfillmentData({chainName:e,requestBody:t}){return this.httpRequest.request({method:"POST",url:"/v1/chains/{chain_name}/orders/fulfillment-data",path:{chain_name:e},body:t,mediaType:"application/json",errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}listTrades({chainName:e,accountAddress:t,fromIndexedAt:n,pageSize:a,sortBy:r,sortDirection:i,pageCursor:s}){return this.httpRequest.request({method:"GET",url:"/v1/chains/{chain_name}/trades",path:{chain_name:e},query:{account_address:t,from_indexed_at:n,page_size:a,sort_by:r,sort_direction:i,page_cursor:s},errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}getTrade({chainName:e,tradeId:t}){return this.httpRequest.request({method:"GET",url:"/v1/chains/{chain_name}/trades/{trade_id}",path:{chain_name:e,trade_id:t},errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}}class Or{orders;request;constructor(e,t=Ir){this.request=new t({BASE:e?.BASE??"https://api.sandbox.immutable.com",VERSION:e?.VERSION??"1.0.0",WITH_CREDENTIALS:e?.WITH_CREDENTIALS??!1,CREDENTIALS:e?.CREDENTIALS??"include",TOKEN:e?.TOKEN,USERNAME:e?.USERNAME,PASSWORD:e?.PASSWORD,HEADERS:e?.HEADERS,ENCODE_PATH:e?.ENCODE_PATH}),this.orders=new Nr(this.request)}}var Sr,Mr,kr,Pr,Dr,Lr,xr,Fr,Ur;function Br(e){const t=e.buy.map((e=>{if("ERC20"===e.item_type)return{type:"ERC20",contractAddress:e.contract_address,amount:e.amount};if("NATIVE"===e.item_type)return{type:"NATIVE",amount:e.amount};throw new Error("Buy items must be either ERC20 or NATIVE")})),n=e.sell.map((e=>{if("ERC721"===e.item_type)return{type:"ERC721",contractAddress:e.contract_address,tokenId:e.token_id};throw new Error("Sell items must ERC721")}));return{id:e.id,accountAddress:e.account_address,buy:t,sell:n,fees:e.fees.map((e=>({amount:e.amount,recipient:e.recipient,type:e.fee_type}))),chain:e.chain,createdAt:e.created_at,endAt:e.end_at,protocolData:{counter:e.protocol_data.counter,orderType:e.protocol_data.order_type,seaportAddress:e.protocol_data.seaport_address,seaportVersion:e.protocol_data.seaport_version,zoneAddress:e.protocol_data.zone_address},salt:e.salt,signature:e.signature,startAt:e.start_at,status:e.status,updatedAt:e.updated_at}}function Vr(e){const t=e.buy.map((e=>{if("ERC20"===e.item_type)return{type:"ERC20",contractAddress:e.contract_address,amount:e.amount};if("NATIVE"===e.item_type)return{type:"NATIVE",amount:e.amount};throw new Error("Buy items must be either ERC20 or NATIVE")})),n=e.sell.map((e=>{if("ERC721"===e.item_type)return{type:"ERC721",contractAddress:e.contract_address,tokenId:e.token_id};throw new Error("Sell items must ERC721")}));return{id:e.id,orderId:e.order_id,buy:t,sell:n,buyerFees:e.buyer_fees.map((e=>({amount:e.amount,recipient:e.recipient,type:e.fee_type}))),chain:e.chain,indexedAt:e.indexed_at,blockchainMetadata:{blockNumber:e.blockchain_metadata.block_number,logIndex:e.blockchain_metadata.log_index,transactionHash:e.blockchain_metadata.transaction_hash,transactionIndex:e.blockchain_metadata.transaction_index},buyerAddress:e.buyer_address,makerAddress:e.maker_address,sellerAddress:e.seller_address,takerAddress:e.taker_address}}function Gr(e){return{nextCursor:e.next_cursor,previousCursor:e.previous_cursor}}!function(e){var t;(t=e.cancellation_type||(e.cancellation_type={})).ON_CHAIN="ON_CHAIN",t.OFF_CHAIN="OFF_CHAIN"}(Sr||(Sr={})),function(e){(e.reason_code||(e.reason_code={})).FILLED="FILLED"}(Mr||(Mr={})),function(e){var t;(t=e.fee_type||(e.fee_type={})).ROYALTY="ROYALTY",t.MAKER_ECOSYSTEM="MAKER_ECOSYSTEM",t.TAKER_ECOSYSTEM="TAKER_ECOSYSTEM",t.PROTOCOL="PROTOCOL"}(kr||(kr={})),function(e){e.PENDING="PENDING",e.ACTIVE="ACTIVE",e.INACTIVE="INACTIVE",e.FILLED="FILLED",e.EXPIRED="EXPIRED",e.CANCELLED="CANCELLED"}(Pr||(Pr={})),function(e){(e.order_type||(e.order_type={})).FULL_RESTRICTED="FULL_RESTRICTED"}(Dr||(Dr={})),function(e){e.MAKER_ECOSYSTEM="MAKER_ECOSYSTEM",e.TAKER_ECOSYSTEM="TAKER_ECOSYSTEM",e.PROTOCOL="PROTOCOL",e.ROYALTY="ROYALTY"}(Lr||(Lr={})),function(e){e.APPROVAL="APPROVAL",e.FULFILL_ORDER="FULFILL_ORDER",e.CANCEL="CANCEL"}(xr||(xr={})),function(e){e.CREATE_LISTING="CREATE_LISTING",e.OFF_CHAIN_CANCELLATION="OFF_CHAIN_CANCELLATION"}(Fr||(Fr={})),function(e){e.TRANSACTION="TRANSACTION",e.SIGNABLE="SIGNABLE"}(Ur||(Ur={}));const qr="1.5",jr={OrderComponents:[{name:"offerer",type:"address"},{name:"zone",type:"address"},{name:"offer",type:"OfferItem[]"},{name:"consideration",type:"ConsiderationItem[]"},{name:"orderType",type:"uint8"},{name:"startTime",type:"uint256"},{name:"endTime",type:"uint256"},{name:"zoneHash",type:"bytes32"},{name:"salt",type:"uint256"},{name:"conduitKey",type:"bytes32"},{name:"counter",type:"uint256"}],OfferItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"}],ConsiderationItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"},{name:"recipient",type:"address"}]};var $r,Hr,zr,Wr;function Kr(e,t){return async()=>{const n=await e.buildTransaction();return n.gasLimit=await e.estimateGas(),n.gasLimit=n.gasLimit.add(n.gasLimit.div(5)),n.chainId=t,n}}!function(e){e[e.FULL_OPEN=0]="FULL_OPEN",e[e.PARTIAL_OPEN=1]="PARTIAL_OPEN",e[e.FULL_RESTRICTED=2]="FULL_RESTRICTED",e[e.PARTIAL_RESTRICTED=3]="PARTIAL_RESTRICTED"}($r||($r={})),function(e){e[e.NATIVE=0]="NATIVE",e[e.ERC20=1]="ERC20",e[e.ERC721=2]="ERC721",e[e.ERC1155=3]="ERC1155",e[e.ERC721_WITH_CRITERIA=4]="ERC721_WITH_CRITERIA",e[e.ERC1155_WITH_CRITERIA=5]="ERC1155_WITH_CRITERIA"}(Hr||(Hr={})),function(e){e[e.OFFER=0]="OFFER",e[e.CONSIDERATION=1]="CONSIDERATION"}(zr||(zr={})),function(e){e[e.ETH_TO_ERC721=0]="ETH_TO_ERC721",e[e.ETH_TO_ERC1155=1]="ETH_TO_ERC1155",e[e.ERC20_TO_ERC721=2]="ERC20_TO_ERC721",e[e.ERC20_TO_ERC1155=3]="ERC20_TO_ERC1155",e[e.ERC721_TO_ERC20=4]="ERC721_TO_ERC20",e[e.ERC1155_TO_ERC20=5]="ERC1155_TO_ERC20"}(Wr||(Wr={}));class Xr{seaportLibFactory;provider;seaportContractAddress;zoneContractAddress;constructor(e,t,n,a){this.seaportLibFactory=e,this.provider=t,this.seaportContractAddress=n,this.zoneContractAddress=a}async prepareSeaportOrder(e,t,n,a,r){const{actions:i}=await this.createSeaportOrder(e,t,n,a,r),o=[],c=i.find((e=>"approval"===e.type));c&&o.push({type:Ur.TRANSACTION,purpose:xr.APPROVAL,buildTransaction:Kr(c.transactionMethods,(await this.provider.getNetwork()).chainId)});const d=i.find((e=>"create"===e.type));if(!d)throw new Error("No create order action found");const u=function(e){const t=JSON.parse(e).message;return t.salt=s.from(t.salt).toHexString(),t}(await d.getMessageToSign());return o.push({type:Ur.SIGNABLE,purpose:Fr.CREATE_LISTING,message:await this.getTypedDataFromOrderComponents(u)}),{actions:o,orderComponents:u,orderHash:this.getSeaportLib().getOrderHash(u)}}async fulfillOrder(e,t,n){const{orderComponents:a,tips:r}=this.mapImmutableOrderToSeaportOrderComponents(e),i=this.getSeaportLib(e),{actions:s}=await i.fulfillOrders({accountAddress:t,fulfillOrderDetails:[{order:{parameters:a,signature:e.signature},extraData:n,tips:r}]}),o=[],c=s.find((e=>"approval"===e.type));c&&o.push({type:Ur.TRANSACTION,buildTransaction:Kr(c.transactionMethods,(await this.provider.getNetwork()).chainId),purpose:xr.APPROVAL});const d=s.find((e=>"exchange"===e.type));if(!d)throw new Error("No exchange action found");return o.push({type:Ur.TRANSACTION,buildTransaction:Kr(d.transactionMethods,(await this.provider.getNetwork()).chainId),purpose:xr.FULFILL_ORDER}),{actions:o,expiration:Xr.getExpirationISOTimeFromExtraData(n),order:Br(e)}}async fulfillBulkOrders(e,t){const n=e.map((e=>{const{orderComponents:t,tips:n}=this.mapImmutableOrderToSeaportOrderComponents(e.order);return{order:{parameters:t,signature:e.order.signature},extraData:e.extra_data,tips:n}})),{actions:a}=await this.getSeaportLib().fulfillOrders({fulfillOrderDetails:n,accountAddress:t}),r=[],i=a.find((e=>"approval"===e.type));i&&r.push({type:Ur.TRANSACTION,buildTransaction:Kr(i.transactionMethods,(await this.provider.getNetwork()).chainId),purpose:xr.APPROVAL});const s=a.find((e=>"exchange"===e.type));if(!s)throw new Error("No exchange action found");return r.push({type:Ur.TRANSACTION,buildTransaction:Kr(s.transactionMethods,(await this.provider.getNetwork()).chainId),purpose:xr.FULFILL_ORDER}),{actions:r,expiration:n.map((e=>Xr.getExpirationISOTimeFromExtraData(e.extraData))).reduce(((e,t)=>new Date(e)<new Date(t)?e:t))}}async cancelOrders(e,t){const n=e.map((e=>this.mapImmutableOrderToSeaportOrderComponents(e).orderComponents)),a=this.getSeaportLib(e[0]),r=await a.cancelOrders(n,t);return{type:Ur.TRANSACTION,buildTransaction:Kr(r,(await this.provider.getNetwork()).chainId),purpose:xr.CANCEL}}mapImmutableOrderToSeaportOrderComponents(e){return function(e,t,n){const a=e.buy.map((t=>{switch(t.item_type){case"NATIVE":return{startAmount:t.amount,endAmount:t.amount,itemType:Hr.NATIVE,recipient:e.account_address,token:c.AddressZero,identifierOrCriteria:"0"};case"ERC20":return{startAmount:t.amount,endAmount:t.amount,itemType:Hr.ERC20,recipient:e.account_address,token:t.contract_address||c.AddressZero,identifierOrCriteria:"0"};default:return{startAmount:"1",endAmount:"1",itemType:Hr.ERC721,recipient:e.account_address,token:t.contract_address||c.AddressZero,identifierOrCriteria:"0"}}})),r=e.fees.map((t=>({amount:t.amount,itemType:"ERC20"===e.buy[0].item_type?Hr.ERC20:Hr.NATIVE,recipient:t.recipient,token:"ERC20"===e.buy[0].item_type?e.buy[0].contract_address:c.AddressZero,identifierOrCriteria:"0"})));return{orderComponents:{conduitKey:c.HashZero,consideration:[...a],offer:e.sell.map((e=>{const t=e;return{startAmount:"1",endAmount:"1",itemType:Hr.ERC721,token:t.contract_address,identifierOrCriteria:t.token_id}})),counter:t,endTime:Math.round(new Date(e.end_at).getTime()/1e3).toString(),startTime:Math.round(new Date(e.start_at).getTime()/1e3).toString(),salt:e.salt,offerer:e.account_address,zone:n,totalOriginalConsiderationItems:a.length,orderType:$r.FULL_RESTRICTED,zoneHash:c.HashZero},tips:r}}(e,e.protocol_data.counter,this.zoneContractAddress)}createSeaportOrder(e,t,n,a,r){return this.getSeaportLib().createOrder({allowPartialFills:!1,offer:[{itemType:Hr.ERC721,token:t.contractAddress,identifier:t.tokenId}],consideration:[{token:"ERC20"===n.type?n.contractAddress:void 0,amount:n.amount,recipient:e}],startTime:(a.getTime()/1e3).toFixed(0),endTime:(r.getTime()/1e3).toFixed(0),zone:this.zoneContractAddress,restrictedByZone:!0},e)}async getTypedDataFromOrderComponents(e){const{chainId:t}=await this.provider.getNetwork();return{domain:{name:"ImmutableSeaport",version:qr,chainId:t,verifyingContract:this.seaportContractAddress},types:jr,value:e}}getSeaportLib(e){const t=e?.protocol_data?.seaport_address??this.seaportContractAddress,n=qr;return this.seaportLibFactory.create(n,t)}static getExpirationISOTimeFromExtraData(e){const t=e.slice(44,60),n=parseInt(t,16);return new Date(1e3*n).toISOString()}}class Zr{orderbookService;chainName;seaportAddress;constructor(e,t,n){this.orderbookService=e,this.chainName=t,this.seaportAddress=n}async fulfillmentData(e){return this.orderbookService.fulfillmentData({chainName:this.chainName,requestBody:e})}async getListing(e){return this.orderbookService.getListing({chainName:this.chainName,listingId:e})}async getTrade(e){return this.orderbookService.getTrade({chainName:this.chainName,tradeId:e})}async listListings(e){return this.orderbookService.listListings({chainName:this.chainName,...e})}async listTrades(e){return this.orderbookService.listTrades({chainName:this.chainName,...e})}async cancelOrders(e,t,n){return this.orderbookService.cancelOrders({chainName:this.chainName,requestBody:{account_address:t,orders:e,signature:n}})}async createListing({orderHash:e,orderComponents:t,orderSignature:n,makerFees:a}){if(1!==t.offer.length)throw new Error("Only one item can be listed at a time");if(Number(t.offer[0].itemType)!==Hr.ERC721)throw new Error("Only ERC721 tokens can be listed");const r=[...t.consideration.map((e=>e.itemType))];if(!(1===new Set(r).size))throw new Error("All consideration items must be of the same type");return this.orderbookService.createListing({chainName:this.chainName,requestBody:{order_hash:e,account_address:t.offerer,buy:[{item_type:Number(t.consideration[0].itemType)===Hr.NATIVE?"NATIVE":"ERC20",amount:t.consideration[0].startAmount,contract_address:t.consideration[0].token}],fees:a.map((e=>({amount:e.amount,fee_type:Lr.MAKER_ECOSYSTEM,recipient:e.recipient}))),end_at:new Date(parseInt(`${t.endTime.toString()}000`,10)).toISOString(),protocol_data:{order_type:Dr.order_type.FULL_RESTRICTED,zone_address:t.zone,seaport_address:this.seaportAddress,seaport_version:qr,counter:t.counter.toString()},salt:t.salt,sell:[{contract_address:t.offer[0].token,token_id:t.offer[0].identifierOrCriteria,item_type:"ERC721"}],signature:n,start_at:new Date(parseInt(`${t.startTime.toString()}000`,10)).toISOString()}})}}class Jr{chainName;seaportAddress;orderbookClient;constructor(e,t,n){this.chainName=t,this.seaportAddress=n,this.orderbookClient=new Or({BASE:e})}create(){return new Zr(this.orderbookClient.orders,this.chainName,this.seaportAddress)}}class Yr{defaultSeaportContractAddress;provider;constructor(e,t){this.defaultSeaportContractAddress=e,this.provider=t}create(e,t){const n=e??qr,a=t??this.defaultSeaportContractAddress;return new I(this.provider,{seaportVersion:n,balanceAndApprovalChecksOnOrderCreation:!0,overrides:{contractAddress:a}})}}class Qr{apiClient;seaport;orderbookConfig;constructor(e){const t={...function(e){switch(e){case N.SANDBOX:return{seaportContractAddress:"0x2CFA8f64e1B49A2DF28532D1D30Cda45117cF778",zoneContractAddress:"0x1Bb4Fb11Ba021Bd0104F0Ee8E5F5c728Bc83d7F1",apiEndpoint:"https://api.sandbox.immutable.com",chainName:"imtbl-zkevm-testnet",provider:new o.JsonRpcProvider("https://rpc.testnet.immutable.com")};case N.PRODUCTION:return{seaportContractAddress:"",zoneContractAddress:"",apiEndpoint:"https://api.immutable.com",chainName:"imtbl-zkevm-mainnet",provider:new o.JsonRpcProvider("https://rpc.immutable.com")};default:return null}}(e.baseConfig.environment),...e.overrides};if(!t)throw new Error("Orderbook configuration not passed, please specify the environment under config.baseConfig.environment");this.orderbookConfig=t;const{apiEndpoint:n,chainName:a}=this.orderbookConfig;if(!n)throw new Error("API endpoint must be provided");this.apiClient=new Jr(n,a,this.orderbookConfig.seaportContractAddress).create();const r=new Yr(this.orderbookConfig.seaportContractAddress,this.orderbookConfig.provider);this.seaport=new Xr(r,this.orderbookConfig.provider,this.orderbookConfig.seaportContractAddress,this.orderbookConfig.zoneContractAddress)}config(){return this.orderbookConfig}async getListing(e){return{result:Br((await this.apiClient.getListing(e)).result)}}async getTrade(e){return{result:Vr((await this.apiClient.getTrade(e)).result)}}async listListings(e){const t=await this.apiClient.listListings(e);return{page:Gr(t.page),result:t.result.map(Br)}}async listTrades(e){const t=await this.apiClient.listTrades(e);return{page:Gr(t.page),result:t.result.map(Vr)}}async prepareListing({makerAddress:e,sell:t,buy:n,orderExpiry:a}){return this.seaport.prepareSeaportOrder(e,t,n,new Date,a||new Date(Date.now()+63072e6))}async createListing(e){return{result:Br((await this.apiClient.createListing({...e})).result)}}async fulfillOrder(e,t,n){const a=await this.apiClient.fulfillmentData([{order_id:e,fees:n.map((e=>({amount:e.amount,fee_type:Lr.TAKER_ECOSYSTEM,recipient:e.recipient})))}]);if(a.result.unfulfillable_orders?.length>0)throw new Error(`Unable to prepare fulfillment date: ${a.result.unfulfillable_orders[0].reason}`);if(1!==a.result.fulfillable_orders?.length)throw new Error("unexpected fulfillable order result length");const r=a.result.fulfillable_orders[0].extra_data,i=a.result.fulfillable_orders[0].order;if(i.status.name!==Pr.ACTIVE)throw new Error(`Cannot fulfil order that is not active. Current status: ${i.status}`);return this.seaport.fulfillOrder(i,t,r)}async fulfillBulkOrders(e,t){const n=await this.apiClient.fulfillmentData(e.map((e=>({order_id:e.listingId,fees:e.takerFees.map((e=>({amount:e.amount,fee_type:Lr.TAKER_ECOSYSTEM,recipient:e.recipient})))}))));try{return{...await this.seaport.fulfillBulkOrders(n.result.fulfillable_orders,t),fulfillableOrders:n.result.fulfillable_orders.map((e=>Br(e.order))),unfulfillableOrders:n.result.unfulfillable_orders.map((e=>({orderId:e.order_id,reason:e.reason}))),sufficientBalance:!0}}catch(e){if(String(e).includes("The fulfiller does not have the balances needed to fulfill."))return{fulfillableOrders:n.result.fulfillable_orders.map((e=>Br(e.order))),unfulfillableOrders:n.result.unfulfillable_orders.map((e=>({orderId:e.order_id,reason:e.reason}))),sufficientBalance:!1};throw e}}async prepareOrderCancellations(e){const t={name:"imtbl-order-book",chainId:(await this.orderbookConfig.provider.getNetwork()).chainId,verifyingContract:this.orderbookConfig.seaportContractAddress},n={orders:e.map((e=>({id:e})))};return{signableAction:{purpose:Fr.OFF_CHAIN_CANCELLATION,type:Ur.SIGNABLE,message:{domain:t,types:{CancelPayload:[{name:"orders",type:"Order[]"}],Order:[{name:"id",type:"string"}]},value:n}}}}async cancelOrders(e,t,n){return this.apiClient.cancelOrders(e,t,n)}async cancelOrdersOnChain(e,t){const n=await Promise.all(e.map((e=>this.apiClient.getListing(e))));for(const e of n){if(e.result.status.name!==Pr.ACTIVE&&e.result.status.name!==Pr.INACTIVE&&e.result.status.name!==Pr.PENDING)throw new Error(`Cannot cancel order with status ${e.result.status}`);if(e.result.account_address!==t.toLowerCase())throw new Error(`Only account ${e.result.account_address} can cancel order ${e.result.id}`)}const a=n.map((e=>e.result)),r=a.map((e=>e.protocol_data.seaport_address));if(1!==new Set(...[r]).size)throw new Error("Cannot cancel multiple orders from different seaport contracts. Please group your orderIds accordingly");return{cancellationAction:await this.seaport.cancelOrders(a,t)}}}const ei=4e5,ti="https://api.sandbox.immutable.com".replace(/\/+$/,"");class ni{basePath;axios;configuration;constructor(t,n=ti,a=e){this.basePath=n,this.axios=a,t&&(this.configuration=t,this.basePath=t.basePath||this.basePath)}}class ai extends Error{field;constructor(e,t){super(t),this.field=e,this.name="RequiredError"}}const ri="https://example.com",ii=function(e,t,n){if(null==n)throw new ai(t,`Required parameter ${t} was null or undefined when calling ${e}.`)},si=async function(e,t,n){if(n&&n.apiKey){const a="function"==typeof n.apiKey?await n.apiKey(t):await n.apiKey;e[t]=a}},oi=async function(e,t){if(t&&t.accessToken){const n="function"==typeof t.accessToken?await t.accessToken():await t.accessToken;e.Authorization="Bearer "+n}};function ci(e,t,n=""){null!=t&&("object"==typeof t?Array.isArray(t)?t.forEach((t=>ci(e,t,n))):Object.keys(t).forEach((a=>ci(e,t[a],`${n}${""!==n?".":""}${a}`))):e.has(n)?e.append(n,t):e.set(n,t))}const di=function(e,...t){const n=new URLSearchParams(e.search);ci(n,t),e.search=n.toString()},ui=function(e,t,n){const a="string"!=typeof e;return(a&&n&&n.isJsonMime?n.isJsonMime(t.headers["Content-Type"]):a)?JSON.stringify(void 0!==e?e:{}):e||""},fi=function(e){return e.pathname+e.search+e.hash},li=function(e,t,n,a){return(r=t,i=n)=>{const s={...e.options,url:(a?.basePath||r.defaults.baseURL||i)+e.url};return r.request(s)}},pi=function(e){return{getActivity:async(t,n,a={})=>{ii("getActivity","chainName",t),ii("getActivity","activityId",n);const r="/v1/chains/{chain_name}/activities/{activity_id}".replace("{chain_name}",encodeURIComponent(String(t))).replace("{activity_id}",encodeURIComponent(String(n))),i=new URL(r,ri);let s;e&&(s=e.baseOptions);const o={method:"GET",...s,...a};di(i,{});let c=s&&s.headers?s.headers:{};return o.headers={...c,...a.headers},{url:fi(i),options:o}},listActivities:async(t,n,a,r,i,s,o,c,d,u,f={})=>{ii("listActivities","chainName",t);const l="/v1/chains/{chain_name}/activities".replace("{chain_name}",encodeURIComponent(String(t))),p=new URL(l,ri);let h;e&&(h=e.baseOptions);const m={method:"GET",...h,...f},b={};void 0!==n&&(b.contract_address=n),void 0!==a&&(b.token_id=a),void 0!==r&&(b.account_address=r),void 0!==i&&(b.activity_type=i),void 0!==s&&(b.from_indexed_at=s instanceof Date?s.toISOString():s),void 0!==o&&(b.to_indexed_at=o instanceof Date?o.toISOString():o),void 0!==c&&(b.transaction_hash=c),void 0!==d&&(b.page_cursor=d),void 0!==u&&(b.page_size=u),di(p,b);let y=h&&h.headers?h.headers:{};return m.headers={...y,...f.headers},{url:fi(p),options:m}}}},hi=function(t){const n=pi(t);return{async getActivity(a,r,i){const s=await n.getActivity(a,r,i);return li(s,e,ti,t)},async listActivities(a,r,i,s,o,c,d,u,f,l,p){const h=await n.listActivities(a,r,i,s,o,c,d,u,f,l,p);return li(h,e,ti,t)}}};const mi=function(e){return{listChains:async(t,n,a={})=>{const r=new URL("/v1/chains",ri);let i;e&&(i=e.baseOptions);const s={method:"GET",...i,...a},o={};void 0!==t&&(o.page_cursor=t),void 0!==n&&(o.page_size=n),di(r,o);let c=i&&i.headers?i.headers:{};return s.headers={...c,...a.headers},{url:fi(r),options:s}}}},bi=function(t){const n=mi(t);return{async listChains(a,r,i){const s=await n.listChains(a,r,i);return li(s,e,ti,t)}}};const yi=function(e){return{getCollection:async(t,n,a={})=>{ii("getCollection","contractAddress",t),ii("getCollection","chainName",n);const r="/v1/chains/{chain_name}/collections/{contract_address}".replace("{contract_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),i=new URL(r,ri);let s;e&&(s=e.baseOptions);const o={method:"GET",...s,...a};di(i,{});let c=s&&s.headers?s.headers:{};return o.headers={...c,...a.headers},{url:fi(i),options:o}},listCollections:async(t,n,a,r,i,s={})=>{ii("listCollections","chainName",t);const o="/v1/chains/{chain_name}/collections".replace("{chain_name}",encodeURIComponent(String(t))),c=new URL(o,ri);let d;e&&(d=e.baseOptions);const u={method:"GET",...d,...s},f={};n&&(f.contract_address=n),void 0!==a&&(f.from_updated_at=a instanceof Date?a.toISOString():a),void 0!==r&&(f.page_cursor=r),void 0!==i&&(f.page_size=i),di(c,f);let l=d&&d.headers?d.headers:{};return u.headers={...l,...s.headers},{url:fi(c),options:u}},listCollectionsByNFTOwner:async(t,n,a,r,i={})=>{ii("listCollectionsByNFTOwner","accountAddress",t),ii("listCollectionsByNFTOwner","chainName",n);const s="/v1/chains/{chain_name}/accounts/{account_address}/collections".replace("{account_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),o=new URL(s,ri);let c;e&&(c=e.baseOptions);const d={method:"GET",...c,...i},u={};void 0!==a&&(u.page_cursor=a),void 0!==r&&(u.page_size=r),di(o,u);let f=c&&c.headers?c.headers:{};return d.headers={...f,...i.headers},{url:fi(o),options:d}},refreshCollectionMetadata:async(t,n,a,r={})=>{ii("refreshCollectionMetadata","contractAddress",t),ii("refreshCollectionMetadata","chainName",n),ii("refreshCollectionMetadata","refreshCollectionMetadataRequest",a);const i="/v1/chains/{chain_name}/collections/{contract_address}/refresh-metadata".replace("{contract_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),s=new URL(i,ri);let o;e&&(o=e.baseOptions);const c={method:"POST",...o,...r},d={};await si(d,"x-immutable-api-key",e),d["Content-Type"]="application/json",di(s,{});let u=o&&o.headers?o.headers:{};return c.headers={...d,...u,...r.headers},c.data=ui(a,c,e),{url:fi(s),options:c}}}},gi=function(t){const n=yi(t);return{async getCollection(a,r,i){const s=await n.getCollection(a,r,i);return li(s,e,ti,t)},async listCollections(a,r,i,s,o,c){const d=await n.listCollections(a,r,i,s,o,c);return li(d,e,ti,t)},async listCollectionsByNFTOwner(a,r,i,s,o){const c=await n.listCollectionsByNFTOwner(a,r,i,s,o);return li(c,e,ti,t)},async refreshCollectionMetadata(a,r,i,s){const o=await n.refreshCollectionMetadata(a,r,i,s);return li(o,e,ti,t)}}};const Ei=function(e){return{getMetadata:async(t,n,a,r={})=>{ii("getMetadata","chainName",t),ii("getMetadata","contractAddress",n),ii("getMetadata","metadataId",a);const i="/v1/chains/{chain_name}/collections/{contract_address}/metadata/{metadata_id}".replace("{chain_name}",encodeURIComponent(String(t))).replace("{contract_address}",encodeURIComponent(String(n))).replace("{metadata_id}",encodeURIComponent(String(a))),s=new URL(i,ri);let o;e&&(o=e.baseOptions);const c={method:"GET",...o,...r};di(s,{});let d=o&&o.headers?o.headers:{};return c.headers={...d,...r.headers},{url:fi(s),options:c}},listMetadata:async(t,n,a,r,i,s={})=>{ii("listMetadata","chainName",t),ii("listMetadata","contractAddress",n);const o="/v1/chains/{chain_name}/collections/{contract_address}/metadata".replace("{chain_name}",encodeURIComponent(String(t))).replace("{contract_address}",encodeURIComponent(String(n))),c=new URL(o,ri);let d;e&&(d=e.baseOptions);const u={method:"GET",...d,...s},f={};void 0!==a&&(f.from_updated_at=a instanceof Date?a.toISOString():a),void 0!==r&&(f.page_cursor=r),void 0!==i&&(f.page_size=i),di(c,f);let l=d&&d.headers?d.headers:{};return u.headers={...l,...s.headers},{url:fi(c),options:u}},refreshMetadataByID:async(t,n,a,r={})=>{ii("refreshMetadataByID","chainName",t),ii("refreshMetadataByID","contractAddress",n),ii("refreshMetadataByID","refreshMetadataByIDRequest",a);const i="/v1/chains/{chain_name}/collections/{contract_address}/metadata/refresh-metadata".replace("{chain_name}",encodeURIComponent(String(t))).replace("{contract_address}",encodeURIComponent(String(n))),s=new URL(i,ri);let o;e&&(o=e.baseOptions);const c={method:"POST",...o,...r},d={};await si(d,"x-immutable-api-key",e),d["Content-Type"]="application/json",di(s,{});let u=o&&o.headers?o.headers:{};return c.headers={...d,...u,...r.headers},c.data=ui(a,c,e),{url:fi(s),options:c}},refreshNFTMetadataByTokenID:async(t,n,a,r={})=>{ii("refreshNFTMetadataByTokenID","contractAddress",t),ii("refreshNFTMetadataByTokenID","chainName",n),ii("refreshNFTMetadataByTokenID","refreshNFTMetadataByTokenIDRequest",a);const i="/v1/chains/{chain_name}/collections/{contract_address}/nfts/refresh-metadata".replace("{contract_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),s=new URL(i,ri);let o;e&&(o=e.baseOptions);const c={method:"POST",...o,...r},d={};await si(d,"x-immutable-api-key",e),d["Content-Type"]="application/json",di(s,{});let u=o&&o.headers?o.headers:{};return c.headers={...d,...u,...r.headers},c.data=ui(a,c,e),{url:fi(s),options:c}}}},Ti=function(t){const n=Ei(t);return{async getMetadata(a,r,i,s){const o=await n.getMetadata(a,r,i,s);return li(o,e,ti,t)},async listMetadata(a,r,i,s,o,c){const d=await n.listMetadata(a,r,i,s,o,c);return li(d,e,ti,t)},async refreshMetadataByID(a,r,i,s){const o=await n.refreshMetadataByID(a,r,i,s);return li(o,e,ti,t)},async refreshNFTMetadataByTokenID(a,r,i,s){const o=await n.refreshNFTMetadataByTokenID(a,r,i,s);return li(o,e,ti,t)}}};const wi=function(e){return{listNFTOwners:async(t,n,a,r,i,s={})=>{ii("listNFTOwners","contractAddress",t),ii("listNFTOwners","tokenId",n),ii("listNFTOwners","chainName",a);const o="/v1/chains/{chain_name}/collections/{contract_address}/nfts/{token_id}/owners".replace("{contract_address}",encodeURIComponent(String(t))).replace("{token_id}",encodeURIComponent(String(n))).replace("{chain_name}",encodeURIComponent(String(a))),c=new URL(o,ri);let d;e&&(d=e.baseOptions);const u={method:"GET",...d,...s},f={};void 0!==r&&(f.page_cursor=r),void 0!==i&&(f.page_size=i),di(c,f);let l=d&&d.headers?d.headers:{};return u.headers={...l,...s.headers},{url:fi(c),options:u}},listOwnersByContractAddress:async(t,n,a,r,i,s={})=>{ii("listOwnersByContractAddress","contractAddress",t),ii("listOwnersByContractAddress","chainName",n);const o="/v1/chains/{chain_name}/collections/{contract_address}/owners".replace("{contract_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),c=new URL(o,ri);let d;e&&(d=e.baseOptions);const u={method:"GET",...d,...s},f={};void 0!==a&&(f.from_updated_at=a instanceof Date?a.toISOString():a),void 0!==r&&(f.page_cursor=r),void 0!==i&&(f.page_size=i),di(c,f);let l=d&&d.headers?d.headers:{};return u.headers={...l,...s.headers},{url:fi(c),options:u}}}},vi=function(t){const n=wi(t);return{async listNFTOwners(a,r,i,s,o,c){const d=await n.listNFTOwners(a,r,i,s,o,c);return li(d,e,ti,t)},async listOwnersByContractAddress(a,r,i,s,o,c){const d=await n.listOwnersByContractAddress(a,r,i,s,o,c);return li(d,e,ti,t)}}};const Ri=function(e){return{getNFT:async(t,n,a,r={})=>{ii("getNFT","contractAddress",t),ii("getNFT","tokenId",n),ii("getNFT","chainName",a);const i="/v1/chains/{chain_name}/collections/{contract_address}/nfts/{token_id}".replace("{contract_address}",encodeURIComponent(String(t))).replace("{token_id}",encodeURIComponent(String(n))).replace("{chain_name}",encodeURIComponent(String(a))),s=new URL(i,ri);let o;e&&(o=e.baseOptions);const c={method:"GET",...o,...r};di(s,{});let d=o&&o.headers?o.headers:{};return c.headers={...d,...r.headers},{url:fi(s),options:c}},listAllNFTOwners:async(t,n,a,r,i={})=>{ii("listAllNFTOwners","chainName",t),ii("listAllNFTOwners","fromUpdatedAt",n);const s="/v1/chains/{chain_name}/nft-owners".replace("{chain_name}",encodeURIComponent(String(t))),o=new URL(s,ri);let c;e&&(c=e.baseOptions);const d={method:"GET",...c,...i},u={};void 0!==n&&(u.from_updated_at=n instanceof Date?n.toISOString():n),void 0!==a&&(u.page_cursor=a),void 0!==r&&(u.page_size=r),di(o,u);let f=c&&c.headers?c.headers:{};return d.headers={...f,...i.headers},{url:fi(o),options:d}},listAllNFTs:async(t,n,a,r,i={})=>{ii("listAllNFTs","chainName",t);const s="/v1/chains/{chain_name}/nfts".replace("{chain_name}",encodeURIComponent(String(t))),o=new URL(s,ri);let c;e&&(c=e.baseOptions);const d={method:"GET",...c,...i},u={};void 0!==n&&(u.from_updated_at=n instanceof Date?n.toISOString():n),void 0!==a&&(u.page_cursor=a),void 0!==r&&(u.page_size=r),di(o,u);let f=c&&c.headers?c.headers:{};return d.headers={...f,...i.headers},{url:fi(o),options:d}},listNFTs:async(t,n,a,r,i,s={})=>{ii("listNFTs","contractAddress",t),ii("listNFTs","chainName",n);const o="/v1/chains/{chain_name}/collections/{contract_address}/nfts".replace("{contract_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),c=new URL(o,ri);let d;e&&(d=e.baseOptions);const u={method:"GET",...d,...s},f={};void 0!==a&&(f.from_updated_at=a instanceof Date?a.toISOString():a),void 0!==r&&(f.page_cursor=r),void 0!==i&&(f.page_size=i),di(c,f);let l=d&&d.headers?d.headers:{};return u.headers={...l,...s.headers},{url:fi(c),options:u}},listNFTsByAccountAddress:async(t,n,a,r,i,s={})=>{ii("listNFTsByAccountAddress","accountAddress",t),ii("listNFTsByAccountAddress","chainName",n);const o="/v1/chains/{chain_name}/accounts/{account_address}/nfts".replace("{account_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),c=new URL(o,ri);let d;e&&(d=e.baseOptions);const u={method:"GET",...d,...s},f={};void 0!==a&&(f.contract_address=a),void 0!==r&&(f.page_cursor=r),void 0!==i&&(f.page_size=i),di(c,f);let l=d&&d.headers?d.headers:{};return u.headers={...l,...s.headers},{url:fi(c),options:u}}}},Ai=function(t){const n=Ri(t);return{async getNFT(a,r,i,s){const o=await n.getNFT(a,r,i,s);return li(o,e,ti,t)},async listAllNFTOwners(a,r,i,s,o){const c=await n.listAllNFTOwners(a,r,i,s,o);return li(c,e,ti,t)},async listAllNFTs(a,r,i,s,o){const c=await n.listAllNFTs(a,r,i,s,o);return li(c,e,ti,t)},async listNFTs(a,r,i,s,o,c){const d=await n.listNFTs(a,r,i,s,o,c);return li(d,e,ti,t)},async listNFTsByAccountAddress(a,r,i,s,o,c){const d=await n.listNFTsByAccountAddress(a,r,i,s,o,c);return li(d,e,ti,t)}}};const _i=function(e){return{cancelOrders:async(t,n,a={})=>{ii("cancelOrders","chainName",t),ii("cancelOrders","cancelOrdersRequestBody",n);const r="/v1/chains/{chain_name}/orders/cancel".replace("{chain_name}",encodeURIComponent(String(t))),i=new URL(r,ri);let s;e&&(s=e.baseOptions);const o={method:"POST",...s,...a},c={};c["Content-Type"]="application/json",di(i,{});let d=s&&s.headers?s.headers:{};return o.headers={...c,...d,...a.headers},o.data=ui(n,o,e),{url:fi(i),options:o}},createListing:async(t,n,a={})=>{ii("createListing","chainName",t),ii("createListing","createListingRequestBody",n);const r="/v1/chains/{chain_name}/orders/listings".replace("{chain_name}",encodeURIComponent(String(t))),i=new URL(r,ri);let s;e&&(s=e.baseOptions);const o={method:"POST",...s,...a},c={};c["Content-Type"]="application/json",di(i,{});let d=s&&s.headers?s.headers:{};return o.headers={...c,...d,...a.headers},o.data=ui(n,o,e),{url:fi(i),options:o}},fulfillmentData:async(t,n,a={})=>{ii("fulfillmentData","chainName",t),ii("fulfillmentData","fulfillmentDataRequest",n);const r="/v1/chains/{chain_name}/orders/fulfillment-data".replace("{chain_name}",encodeURIComponent(String(t))),i=new URL(r,ri);let s;e&&(s=e.baseOptions);const o={method:"POST",...s,...a},c={};c["Content-Type"]="application/json",di(i,{});let d=s&&s.headers?s.headers:{};return o.headers={...c,...d,...a.headers},o.data=ui(n,o,e),{url:fi(i),options:o}},getListing:async(t,n,a={})=>{ii("getListing","chainName",t),ii("getListing","listingId",n);const r="/v1/chains/{chain_name}/orders/listings/{listing_id}".replace("{chain_name}",encodeURIComponent(String(t))).replace("{listing_id}",encodeURIComponent(String(n))),i=new URL(r,ri);let s;e&&(s=e.baseOptions);const o={method:"GET",...s,...a};di(i,{});let c=s&&s.headers?s.headers:{};return o.headers={...c,...a.headers},{url:fi(i),options:o}},getTrade:async(t,n,a={})=>{ii("getTrade","chainName",t),ii("getTrade","tradeId",n);const r="/v1/chains/{chain_name}/trades/{trade_id}".replace("{chain_name}",encodeURIComponent(String(t))).replace("{trade_id}",encodeURIComponent(String(n))),i=new URL(r,ri);let s;e&&(s=e.baseOptions);const o={method:"GET",...s,...a};di(i,{});let c=s&&s.headers?s.headers:{};return o.headers={...c,...a.headers},{url:fi(i),options:o}},listListings:async(t,n,a,r,i,s,o,c,d,u={})=>{ii("listListings","chainName",t);const f="/v1/chains/{chain_name}/orders/listings".replace("{chain_name}",encodeURIComponent(String(t))),l=new URL(f,ri);let p;e&&(p=e.baseOptions);const h={method:"GET",...p,...u},m={};void 0!==n&&(m.status=n),void 0!==a&&(m.sell_item_contract_address=a),void 0!==r&&(m.buy_item_contract_address=r),void 0!==i&&(m.sell_item_token_id=i),void 0!==s&&(m.page_size=s),void 0!==o&&(m.sort_by=o),void 0!==c&&(m.sort_direction=c),void 0!==d&&(m.page_cursor=d),di(l,m);let b=p&&p.headers?p.headers:{};return h.headers={...b,...u.headers},{url:fi(l),options:h}},listTrades:async(t,n,a,r,i,s,o={})=>{ii("listTrades","chainName",t);const c="/v1/chains/{chain_name}/trades".replace("{chain_name}",encodeURIComponent(String(t))),d=new URL(c,ri);let u;e&&(u=e.baseOptions);const f={method:"GET",...u,...o},l={};void 0!==n&&(l.account_address=n),void 0!==a&&(l.page_size=a),void 0!==r&&(l.sort_by=r),void 0!==i&&(l.sort_direction=i),void 0!==s&&(l.page_cursor=s),di(d,l);let p=u&&u.headers?u.headers:{};return f.headers={...p,...o.headers},{url:fi(d),options:f}}}},Ci=function(t){const n=_i(t);return{async cancelOrders(a,r,i){const s=await n.cancelOrders(a,r,i);return li(s,e,ti,t)},async createListing(a,r,i){const s=await n.createListing(a,r,i);return li(s,e,ti,t)},async fulfillmentData(a,r,i){const s=await n.fulfillmentData(a,r,i);return li(s,e,ti,t)},async getListing(a,r,i){const s=await n.getListing(a,r,i);return li(s,e,ti,t)},async getTrade(a,r,i){const s=await n.getTrade(a,r,i);return li(s,e,ti,t)},async listListings(a,r,i,s,o,c,d,u,f,l){const p=await n.listListings(a,r,i,s,o,c,d,u,f,l);return li(p,e,ti,t)},async listTrades(a,r,i,s,o,c,d){const u=await n.listTrades(a,r,i,s,o,c,d);return li(u,e,ti,t)}}};const Ii=function(e){return{createCounterfactualAddress:async(t,n,a={})=>{ii("createCounterfactualAddress","chainName",t),ii("createCounterfactualAddress","createCounterfactualAddressRequest",n);const r="/v1/chains/{chain_name}/passport/counterfactual-address".replace("{chain_name}",encodeURIComponent(String(t))),i=new URL(r,ri);let s;e&&(s=e.baseOptions);const o={method:"POST",...s,...a},c={};await oi(c,e),c["Content-Type"]="application/json",di(i,{});let d=s&&s.headers?s.headers:{};return o.headers={...c,...d,...a.headers},o.data=ui(n,o,e),{url:fi(i),options:o}},createCounterfactualAddressDeprecated:async(t,n={})=>{ii("createCounterfactualAddressDeprecated","createCounterfactualAddressRequestDeprecated",t);const a=new URL("/passport-mr/v1/counterfactual-address",ri);let r;e&&(r=e.baseOptions);const i={method:"POST",...r,...n},s={};await oi(s,e),s["Content-Type"]="application/json",di(a,{});let o=r&&r.headers?r.headers:{};return i.headers={...s,...o,...n.headers},i.data=ui(t,i,e),{url:fi(a),options:i}},getLinkedAddresses:async(t,n,a={})=>{ii("getLinkedAddresses","userId",t),ii("getLinkedAddresses","chainName",n);const r="/v1/chains/{chain_name}/passport/users/{user_id}/linked-addresses".replace("{user_id}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),i=new URL(r,ri);let s;e&&(s=e.baseOptions);const o={method:"GET",...s,...a},c={};await oi(c,e),di(i,{});let d=s&&s.headers?s.headers:{};return o.headers={...c,...d,...a.headers},{url:fi(i),options:o}},getLinkedAddressesDeprecated:async(t,n={})=>{ii("getLinkedAddressesDeprecated","userId",t);const a="/passport-mr/v1/users/{userId}/linked-addresses".replace("{userId}",encodeURIComponent(String(t))),r=new URL(a,ri);let i;e&&(i=e.baseOptions);const s={method:"GET",...i,...n},o={};await oi(o,e),di(r,{});let c=i&&i.headers?i.headers:{};return s.headers={...o,...c,...n.headers},{url:fi(r),options:s}}}},Ni=function(t){const n=Ii(t);return{async createCounterfactualAddress(a,r,i){const s=await n.createCounterfactualAddress(a,r,i);return li(s,e,ti,t)},async createCounterfactualAddressDeprecated(a,r){const i=await n.createCounterfactualAddressDeprecated(a,r);return li(i,e,ti,t)},async getLinkedAddresses(a,r,i){const s=await n.getLinkedAddresses(a,r,i);return li(s,e,ti,t)},async getLinkedAddressesDeprecated(a,r){const i=await n.getLinkedAddressesDeprecated(a,r);return li(i,e,ti,t)}}};const Oi=function(e){return{getERC20Token:async(t,n,a={})=>{ii("getERC20Token","contractAddress",t),ii("getERC20Token","chainName",n);const r="/v1/chains/{chain_name}/tokens/{contract_address}".replace("{contract_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),i=new URL(r,ri);let s;e&&(s=e.baseOptions);const o={method:"GET",...s,...a};di(i,{});let c=s&&s.headers?s.headers:{};return o.headers={...c,...a.headers},{url:fi(i),options:o}},listERC20Tokens:async(t,n,a,r,i={})=>{ii("listERC20Tokens","chainName",t);const s="/v1/chains/{chain_name}/tokens".replace("{chain_name}",encodeURIComponent(String(t))),o=new URL(s,ri);let c;e&&(c=e.baseOptions);const d={method:"GET",...c,...i},u={};void 0!==n&&(u.from_updated_at=n instanceof Date?n.toISOString():n),void 0!==a&&(u.page_cursor=a),void 0!==r&&(u.page_size=r),di(o,u);let f=c&&c.headers?c.headers:{};return d.headers={...f,...i.headers},{url:fi(o),options:d}}}},Si=function(t){const n=Oi(t);return{async getERC20Token(a,r,i){const s=await n.getERC20Token(a,r,i);return li(s,e,ti,t)},async listERC20Tokens(a,r,i,s,o){const c=await n.listERC20Tokens(a,r,i,s,o);return li(c,e,ti,t)}}};var Mi=Object.freeze({__proto__:null,ActiveOrderStatusNameEnum:{Active:"ACTIVE"},ActivitiesApi:class extends ni{getActivity(e,t){return hi(this.configuration).getActivity(e.chainName,e.activityId,t).then((e=>e(this.axios,this.basePath)))}listActivities(e,t){return hi(this.configuration).listActivities(e.chainName,e.contractAddress,e.tokenId,e.accountAddress,e.activityType,e.fromIndexedAt,e.toIndexedAt,e.transactionHash,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}},ActivitiesApiAxiosParamCreator:pi,ActivitiesApiFactory:function(e,t,n){const a=hi(e);return{getActivity:(e,r)=>a.getActivity(e.chainName,e.activityId,r).then((e=>e(n,t))),listActivities:(e,r)=>a.listActivities(e.chainName,e.contractAddress,e.tokenId,e.accountAddress,e.activityType,e.fromIndexedAt,e.toIndexedAt,e.transactionHash,e.pageCursor,e.pageSize,r).then((e=>e(n,t)))}},ActivitiesApiFp:hi,ActivityType:{Mint:"mint",Burn:"burn",Transfer:"transfer",Sale:"sale",Deposit:"deposit",Withdrawal:"withdrawal"},CancelledOrderStatusCancellationTypeEnum:{OnChain:"ON_CHAIN",OffChain:"OFF_CHAIN"},CancelledOrderStatusNameEnum:{Cancelled:"CANCELLED"},ChainsApi:class extends ni{listChains(e={},t){return bi(this.configuration).listChains(e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}},ChainsApiAxiosParamCreator:mi,ChainsApiFactory:function(e,t,n){const a=bi(e);return{listChains:(e={},r)=>a.listChains(e.pageCursor,e.pageSize,r).then((e=>e(n,t)))}},ChainsApiFp:bi,CollectionContractType:{Erc721:"ERC721"},CollectionsApi:class extends ni{getCollection(e,t){return gi(this.configuration).getCollection(e.contractAddress,e.chainName,t).then((e=>e(this.axios,this.basePath)))}listCollections(e,t){return gi(this.configuration).listCollections(e.chainName,e.contractAddress,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}listCollectionsByNFTOwner(e,t){return gi(this.configuration).listCollectionsByNFTOwner(e.accountAddress,e.chainName,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}refreshCollectionMetadata(e,t){return gi(this.configuration).refreshCollectionMetadata(e.contractAddress,e.chainName,e.refreshCollectionMetadataRequest,t).then((e=>e(this.axios,this.basePath)))}},CollectionsApiAxiosParamCreator:yi,CollectionsApiFactory:function(e,t,n){const a=gi(e);return{getCollection:(e,r)=>a.getCollection(e.contractAddress,e.chainName,r).then((e=>e(n,t))),listCollections:(e,r)=>a.listCollections(e.chainName,e.contractAddress,e.fromUpdatedAt,e.pageCursor,e.pageSize,r).then((e=>e(n,t))),listCollectionsByNFTOwner:(e,r)=>a.listCollectionsByNFTOwner(e.accountAddress,e.chainName,e.pageCursor,e.pageSize,r).then((e=>e(n,t))),refreshCollectionMetadata:(e,r)=>a.refreshCollectionMetadata(e.contractAddress,e.chainName,e.refreshCollectionMetadataRequest,r).then((e=>e(n,t)))}},CollectionsApiFp:gi,Configuration:class{apiKey;username;password;accessToken;basePath;baseOptions;formDataCtor;constructor(e={}){this.apiKey=e.apiKey,this.username=e.username,this.password=e.password,this.accessToken=e.accessToken,this.basePath=e.basePath,this.baseOptions=e.baseOptions,this.formDataCtor=e.formDataCtor}isJsonMime(e){const t=new RegExp("^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$","i");return null!==e&&(t.test(e)||"application/json-patch+json"===e.toLowerCase())}},ERC20ItemItemTypeEnum:{Erc20:"ERC20"},ERC721ItemItemTypeEnum:{Erc721:"ERC721"},ExpiredOrderStatusNameEnum:{Expired:"EXPIRED"},FailedOrderCancellationReasonCodeEnum:{AlreadyFilled:"ALREADY_FILLED"},FeeFeeTypeEnum:{Royalty:"ROYALTY",MakerEcosystem:"MAKER_ECOSYSTEM",TakerEcosystem:"TAKER_ECOSYSTEM",Protocol:"PROTOCOL"},FilledOrderStatusNameEnum:{Filled:"FILLED"},InactiveOrderStatusNameEnum:{Inactive:"INACTIVE"},ListListingsSortByEnum:{CreatedAt:"created_at",UpdatedAt:"updated_at",BuyItemAmount:"buy_item_amount"},ListListingsSortDirectionEnum:{Asc:"asc",Desc:"desc"},ListTradesSortByEnum:{IndexedAt:"indexed_at"},ListTradesSortDirectionEnum:{Asc:"asc",Desc:"desc"},MetadataApi:class extends ni{getMetadata(e,t){return Ti(this.configuration).getMetadata(e.chainName,e.contractAddress,e.metadataId,t).then((e=>e(this.axios,this.basePath)))}listMetadata(e,t){return Ti(this.configuration).listMetadata(e.chainName,e.contractAddress,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}refreshMetadataByID(e,t){return Ti(this.configuration).refreshMetadataByID(e.chainName,e.contractAddress,e.refreshMetadataByIDRequest,t).then((e=>e(this.axios,this.basePath)))}refreshNFTMetadataByTokenID(e,t){return Ti(this.configuration).refreshNFTMetadataByTokenID(e.contractAddress,e.chainName,e.refreshNFTMetadataByTokenIDRequest,t).then((e=>e(this.axios,this.basePath)))}},MetadataApiAxiosParamCreator:Ei,MetadataApiFactory:function(e,t,n){const a=Ti(e);return{getMetadata:(e,r)=>a.getMetadata(e.chainName,e.contractAddress,e.metadataId,r).then((e=>e(n,t))),listMetadata:(e,r)=>a.listMetadata(e.chainName,e.contractAddress,e.fromUpdatedAt,e.pageCursor,e.pageSize,r).then((e=>e(n,t))),refreshMetadataByID:(e,r)=>a.refreshMetadataByID(e.chainName,e.contractAddress,e.refreshMetadataByIDRequest,r).then((e=>e(n,t))),refreshNFTMetadataByTokenID:(e,r)=>a.refreshNFTMetadataByTokenID(e.contractAddress,e.chainName,e.refreshNFTMetadataByTokenIDRequest,r).then((e=>e(n,t)))}},MetadataApiFp:Ti,NFTContractType:{Erc721:"ERC721"},NativeItemItemTypeEnum:{Native:"NATIVE"},NftOwnersApi:class extends ni{listNFTOwners(e,t){return vi(this.configuration).listNFTOwners(e.contractAddress,e.tokenId,e.chainName,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}listOwnersByContractAddress(e,t){return vi(this.configuration).listOwnersByContractAddress(e.contractAddress,e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}},NftOwnersApiAxiosParamCreator:wi,NftOwnersApiFactory:function(e,t,n){const a=vi(e);return{listNFTOwners:(e,r)=>a.listNFTOwners(e.contractAddress,e.tokenId,e.chainName,e.pageCursor,e.pageSize,r).then((e=>e(n,t))),listOwnersByContractAddress:(e,r)=>a.listOwnersByContractAddress(e.contractAddress,e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,r).then((e=>e(n,t)))}},NftOwnersApiFp:vi,NftsApi:class extends ni{getNFT(e,t){return Ai(this.configuration).getNFT(e.contractAddress,e.tokenId,e.chainName,t).then((e=>e(this.axios,this.basePath)))}listAllNFTOwners(e,t){return Ai(this.configuration).listAllNFTOwners(e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}listAllNFTs(e,t){return Ai(this.configuration).listAllNFTs(e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}listNFTs(e,t){return Ai(this.configuration).listNFTs(e.contractAddress,e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}listNFTsByAccountAddress(e,t){return Ai(this.configuration).listNFTsByAccountAddress(e.accountAddress,e.chainName,e.contractAddress,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}},NftsApiAxiosParamCreator:Ri,NftsApiFactory:function(e,t,n){const a=Ai(e);return{getNFT:(e,r)=>a.getNFT(e.contractAddress,e.tokenId,e.chainName,r).then((e=>e(n,t))),listAllNFTOwners:(e,r)=>a.listAllNFTOwners(e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,r).then((e=>e(n,t))),listAllNFTs:(e,r)=>a.listAllNFTs(e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,r).then((e=>e(n,t))),listNFTs:(e,r)=>a.listNFTs(e.contractAddress,e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,r).then((e=>e(n,t))),listNFTsByAccountAddress:(e,r)=>a.listNFTsByAccountAddress(e.accountAddress,e.chainName,e.contractAddress,e.pageCursor,e.pageSize,r).then((e=>e(n,t)))}},NftsApiFp:Ai,OrderStatusName:{Pending:"PENDING",Active:"ACTIVE",Inactive:"INACTIVE",Filled:"FILLED",Expired:"EXPIRED",Cancelled:"CANCELLED"},OrdersApi:class extends ni{cancelOrders(e,t){return Ci(this.configuration).cancelOrders(e.chainName,e.cancelOrdersRequestBody,t).then((e=>e(this.axios,this.basePath)))}createListing(e,t){return Ci(this.configuration).createListing(e.chainName,e.createListingRequestBody,t).then((e=>e(this.axios,this.basePath)))}fulfillmentData(e,t){return Ci(this.configuration).fulfillmentData(e.chainName,e.fulfillmentDataRequest,t).then((e=>e(this.axios,this.basePath)))}getListing(e,t){return Ci(this.configuration).getListing(e.chainName,e.listingId,t).then((e=>e(this.axios,this.basePath)))}getTrade(e,t){return Ci(this.configuration).getTrade(e.chainName,e.tradeId,t).then((e=>e(this.axios,this.basePath)))}listListings(e,t){return Ci(this.configuration).listListings(e.chainName,e.status,e.sellItemContractAddress,e.buyItemContractAddress,e.sellItemTokenId,e.pageSize,e.sortBy,e.sortDirection,e.pageCursor,t).then((e=>e(this.axios,this.basePath)))}listTrades(e,t){return Ci(this.configuration).listTrades(e.chainName,e.accountAddress,e.pageSize,e.sortBy,e.sortDirection,e.pageCursor,t).then((e=>e(this.axios,this.basePath)))}},OrdersApiAxiosParamCreator:_i,OrdersApiFactory:function(e,t,n){const a=Ci(e);return{cancelOrders:(e,r)=>a.cancelOrders(e.chainName,e.cancelOrdersRequestBody,r).then((e=>e(n,t))),createListing:(e,r)=>a.createListing(e.chainName,e.createListingRequestBody,r).then((e=>e(n,t))),fulfillmentData:(e,r)=>a.fulfillmentData(e.chainName,e.fulfillmentDataRequest,r).then((e=>e(n,t))),getListing:(e,r)=>a.getListing(e.chainName,e.listingId,r).then((e=>e(n,t))),getTrade:(e,r)=>a.getTrade(e.chainName,e.tradeId,r).then((e=>e(n,t))),listListings:(e,r)=>a.listListings(e.chainName,e.status,e.sellItemContractAddress,e.buyItemContractAddress,e.sellItemTokenId,e.pageSize,e.sortBy,e.sortDirection,e.pageCursor,r).then((e=>e(n,t))),listTrades:(e,r)=>a.listTrades(e.chainName,e.accountAddress,e.pageSize,e.sortBy,e.sortDirection,e.pageCursor,r).then((e=>e(n,t)))}},OrdersApiFp:Ci,PassportApi:class extends ni{createCounterfactualAddress(e,t){return Ni(this.configuration).createCounterfactualAddress(e.chainName,e.createCounterfactualAddressRequest,t).then((e=>e(this.axios,this.basePath)))}createCounterfactualAddressDeprecated(e,t){return Ni(this.configuration).createCounterfactualAddressDeprecated(e.createCounterfactualAddressRequestDeprecated,t).then((e=>e(this.axios,this.basePath)))}getLinkedAddresses(e,t){return Ni(this.configuration).getLinkedAddresses(e.userId,e.chainName,t).then((e=>e(this.axios,this.basePath)))}getLinkedAddressesDeprecated(e,t){return Ni(this.configuration).getLinkedAddressesDeprecated(e.userId,t).then((e=>e(this.axios,this.basePath)))}},PassportApiAxiosParamCreator:Ii,PassportApiFactory:function(e,t,n){const a=Ni(e);return{createCounterfactualAddress:(e,r)=>a.createCounterfactualAddress(e.chainName,e.createCounterfactualAddressRequest,r).then((e=>e(n,t))),createCounterfactualAddressDeprecated:(e,r)=>a.createCounterfactualAddressDeprecated(e.createCounterfactualAddressRequestDeprecated,r).then((e=>e(n,t))),getLinkedAddresses:(e,r)=>a.getLinkedAddresses(e.userId,e.chainName,r).then((e=>e(n,t))),getLinkedAddressesDeprecated:(e,r)=>a.getLinkedAddressesDeprecated(e.userId,r).then((e=>e(n,t)))}},PassportApiFp:Ni,PendingOrderStatusNameEnum:{Pending:"PENDING"},ProtocolDataOrderTypeEnum:{FullRestricted:"FULL_RESTRICTED"},SaleFeeTypeEnum:{Royalty:"ROYALTY"},TokenContractType:{Erc20:"ERC20"},TokensApi:class extends ni{getERC20Token(e,t){return Si(this.configuration).getERC20Token(e.contractAddress,e.chainName,t).then((e=>e(this.axios,this.basePath)))}listERC20Tokens(e,t){return Si(this.configuration).listERC20Tokens(e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}},TokensApiAxiosParamCreator:Oi,TokensApiFactory:function(e,t,n){const a=Si(e);return{getERC20Token:(e,r)=>a.getERC20Token(e.contractAddress,e.chainName,r).then((e=>e(n,t))),listERC20Tokens:(e,r)=>a.listERC20Tokens(e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,r).then((e=>e(n,t)))}},TokensApiFp:Si});class ki extends Error{code;details;link;traceId;constructor({message:e,code:t,details:n,link:a,trace_id:r}){super(e),this.code=t,this.details=n,this.link=a,this.traceId=r}}const Pi={sdkVersion:"ts-immutable-sdk-multi-rollup-api-client-0.31.2-alpha"},Di=({baseConfig:e,basePath:t,headers:n})=>{if(!t.trim())throw Error("basePath can not be empty");const a={...e,basePath:t,baseOptions:{headers:{...n||{},...Pi}}};return new Mi.Configuration(a)};class Li{apiConfig;baseConfig;constructor({baseConfig:e,overrides:t}){if(this.baseConfig=e,t)this.apiConfig=Di(t);else switch(e.environment){case N.SANDBOX:this.apiConfig=Di({basePath:"https://api.sandbox.immutable.com",baseConfig:e});break;case N.PRODUCTION:this.apiConfig=Di({basePath:"https://api.immutable.com",baseConfig:e});break;default:this.apiConfig=Di({basePath:"https://api.sandbox.immutable.com",baseConfig:e})}}}function xi(t){if(e.isAxiosError(t)&&t.response){const e=t.response.data;return e.code&&e.message?new ki({code:e.code,message:e.message,details:e.details||null,link:e.link||"",trace_id:e.trace_id||""}):new ki({code:t.code??t.response?.status.toString()??"unknown_error_code",message:String(t),details:null,link:"",trace_id:""})}return new ki({code:"unknown_error_code",message:String(t),details:null,link:"",trace_id:""})}class Fi{config;activities;chains;collections;nfts;nftOwners;tokens;metadata;constructor(e){this.config=new Li(e),this.activities=new Mi.ActivitiesApi(this.config.apiConfig),this.chains=new Mi.ChainsApi(this.config.apiConfig),this.collections=new Mi.CollectionsApi(this.config.apiConfig),this.nfts=new Mi.NftsApi(this.config.apiConfig),this.nftOwners=new Mi.NftOwnersApi(this.config.apiConfig),this.tokens=new Mi.TokensApi(this.config.apiConfig),this.metadata=new Mi.MetadataApi(this.config.apiConfig)}async listActivities(e){return await this.activities.listActivities(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async getActivity(e){return await this.activities.getActivity(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async listChains(e){return await this.chains.listChains(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async listCollections(e){return await this.collections.listCollections(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async listCollectionsByNFTOwner(e){return await this.collections.listCollectionsByNFTOwner(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async getCollection(e){return await this.collections.getCollection(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async getNFT(e){return await this.nfts.getNFT(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async listNFTs(e){return await this.nfts.listNFTs(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async listNFTsByAccountAddress(e){return await this.nfts.listNFTsByAccountAddress(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async listAllNFTs(e){return await this.nfts.listAllNFTs(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async listNFTOwners(e){return await this.nftOwners.listNFTOwners(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async listNFTOwnersByContractAddress(e){return await this.nftOwners.listOwnersByContractAddress(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async listAllNFTOwners(e){return await this.nfts.listAllNFTOwners(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async listTokens(e){return await this.tokens.listERC20Tokens(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async getToken(e){return await this.tokens.getERC20Token(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async getMetadata(e){return await this.metadata.getMetadata(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async listNFTMetadataByContractAddress(e){return await this.metadata.listMetadata(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async refreshCollectionMetadata(e){return await this.collections.refreshCollectionMetadata(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async refreshNFTMetadata(e){return await this.metadata.refreshNFTMetadataByTokenID(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}async refreshStackedMetadata(e){return await this.metadata.refreshMetadataByID(e).then((e=>e.data)).catch((e=>{throw xi(e)}))}}var Ui,Bi,Vi,Gi,qi,ji,$i,Hi,zi,Wi,Ki,Xi,Zi,Ji,Yi,Qi,es,ts,ns,as,rs;!function(e){e.IMTBL_WIDGETS_PROVIDER="imtbl-widgets-provider",e.IMTBL_CONNECT_WIDGET_EVENT="imtbl-connect-widget",e.IMTBL_WALLET_WIDGET_EVENT="imtbl-wallet-widget",e.IMTBL_SWAP_WIDGET_EVENT="imtbl-swap-widget",e.IMTBL_BRIDGE_WIDGET_EVENT="imtbl-bridge-widget",e.IMTBL_ONRAMP_WIDGET_EVENT="imtbl-onramp-widget",e.IMTBL_SALE_WIDGET_EVENT="imtbl-sale-widget"}(Ui||(Ui={})),function(e){e.PROVIDER_UPDATED="PROVIDER_UPDATED"}(Bi||(Bi={})),function(e){e.CLOSE_WIDGET="close-widget",e.SUCCESS="success",e.FAILURE="failure"}(Vi||(Vi={})),function(e){e.CLOSE_WIDGET="close-widget",e.NETWORK_SWITCH="network-switch",e.DISCONNECT_WALLET="disconnect-wallet"}(Gi||(Gi={})),function(e){e.CLOSE_WIDGET="close-widget",e.SUCCESS="success",e.FAILURE="failure",e.REJECTED="rejected"}(qi||(qi={})),function(e){e.CLOSE_WIDGET="close-widget",e.SUCCESS="success",e.FAILURE="failure",e.REJECTED="rejected",e.TRANSACTION_SUCCESS="transaction-success"}(ji||(ji={})),function(e){e.CLOSE_WIDGET="close-widget",e.SUCCESS="success",e.FAILURE="failure"}($i||($i={})),function(e){e.REQUEST_CONNECT="request-connect",e.REQUEST_WALLET="request-wallet",e.REQUEST_SWAP="request-swap",e.REQUEST_BRIDGE="request-bridge",e.REQUEST_ONRAMP="request-onramp"}(Hi||(Hi={})),function(e){e.CLOSE_WIDGET="close-widget",e.SUCCESS="success",e.FAILURE="failure"}(zi||(zi={})),function(e){e.CONNECT="connect",e.WALLET="wallet",e.SWAP="swap",e.BRIDGE="bridge",e.ONRAMP="onramp",e.SALE="sale"}(Wi||(Wi={})),function(e){e.LAYER1="LAYER1",e.LAYER2="LAYER2"}(Ki||(Ki={})),function(e){e.LIGHT="light",e.DARK="dark"}(Xi||(Xi={})),function(e){e[e.IMTBL_ZKEVM_MAINNET=13371]="IMTBL_ZKEVM_MAINNET",e[e.IMTBL_ZKEVM_TESTNET=13473]="IMTBL_ZKEVM_TESTNET",e[e.IMTBL_ZKEVM_DEVNET=13433]="IMTBL_ZKEVM_DEVNET",e[e.ETHEREUM=1]="ETHEREUM",e[e.SEPOLIA=11155111]="SEPOLIA"}(Zi||(Zi={})),function(e){e.ETHEREUM="Ethereum",e.SEPOLIA="Sepolia",e.IMTBL_ZKEVM_TESTNET="Immutable zkEVM Test",e.IMTBL_ZKEVM_DEVNET="Immutable zkEVM Dev",e.IMTBL_ZKEVM_MAINNET="Immutable zkEVM"}(Ji||(Ji={})),function(e){e.TRANSAK="201811419111"}(Yi||(Yi={})),function(e){e.BRIDGE_TO_L2="BRIDGE_TO_L2",e.SWAP="SWAP"}(Qi||(Qi={})),function(e){e.ALL="all"}(es||(es={})),function(e){e.ALL="all",e.SWAP="swap",e.BRIDGE="bridge",e.ONRAMP="onramp"}(ts||(ts={})),function(e){e.CHECK_CONNECTION="eth_accounts",e.CONNECT="eth_requestAccounts",e.ADD_NETWORK="wallet_addEthereumChain",e.SWITCH_NETWORK="wallet_switchEthereumChain",e.GET_CHAINID="eth_chainId"}(ns||(ns={})),function(e){e.ALL="all"}(as||(as={})),function(e){e.PASSPORT="passport",e.METAMASK="metamask"}(rs||(rs={}));const is={allowMistmatchedChainId:!1,allowUnsupportedProvider:!1},ss="development",os="0x0000000000000000000000000000000000001010",cs=18,ds={name:"IMX",symbol:"IMX",decimals:cs,address:os},us={[ss]:"https://api.dev.immutable.com",[N.SANDBOX]:"https://api.sandbox.immutable.com",[N.PRODUCTION]:"https://api.immutable.com"},fs={[ss]:"https://checkout-api.dev.immutable.com",[N.SANDBOX]:"https://checkout-api.sandbox.immutable.com",[N.PRODUCTION]:"https://checkout-api.immutable.com"},ls={[N.SANDBOX]:"https://global-stg.transak.com",[N.PRODUCTION]:"https://global.transak.com/"},ps=new Map([[Zi.ETHEREUM,{chainIdHex:`0x${Zi.ETHEREUM.toString(16)}`,chainName:Ji.ETHEREUM,rpcUrls:["https://checkout-api.immutable.com/v1/rpc/eth-mainnet"],nativeCurrency:{name:Ji.ETHEREUM,symbol:"ETH",decimals:18},blockExplorerUrls:["https://etherscan.io/"]}],[Zi.IMTBL_ZKEVM_MAINNET,{chainIdHex:`0x${Zi.IMTBL_ZKEVM_MAINNET.toString(16)}`,chainName:Ji.IMTBL_ZKEVM_MAINNET,rpcUrls:["https://rpc.immutable.com"],nativeCurrency:ds}]]),hs=new Map([[Zi.SEPOLIA,{chainIdHex:`0x${Zi.SEPOLIA.toString(16)}`,chainName:Ji.SEPOLIA,rpcUrls:["https://checkout-api.sandbox.immutable.com/v1/rpc/eth-sepolia"],nativeCurrency:{name:"Sep Eth",symbol:"ETH",decimals:18},blockExplorerUrls:["https://sepolia.etherscan.io/"]}],[Zi.IMTBL_ZKEVM_TESTNET,{chainIdHex:`0x${Zi.IMTBL_ZKEVM_TESTNET.toString(16)}`,chainName:Ji.IMTBL_ZKEVM_TESTNET,rpcUrls:["https://rpc.testnet.immutable.com"],nativeCurrency:ds}]]),ms=new Map([[Zi.SEPOLIA,{chainIdHex:`0x${Zi.SEPOLIA.toString(16)}`,chainName:Ji.SEPOLIA,rpcUrls:["https://checkout-api.dev.immutable.com/v1/rpc/eth-sepolia"],nativeCurrency:{name:"Sep Eth",symbol:"ETH",decimals:18},blockExplorerUrls:["https://sepolia.etherscan.io/"]}],[Zi.IMTBL_ZKEVM_DEVNET,{chainIdHex:`0x${Zi.IMTBL_ZKEVM_DEVNET.toString(16)}`,chainName:Ji.IMTBL_ZKEVM_DEVNET,rpcUrls:["https://rpc.dev.immutable.com"],nativeCurrency:ds}]]),bs={[Zi.IMTBL_ZKEVM_TESTNET]:{url:"https://explorer.testnet.immutable.com",nativeToken:hs.get(Zi.IMTBL_ZKEVM_TESTNET).nativeCurrency},[Zi.IMTBL_ZKEVM_MAINNET]:{url:"https://explorer.mainnet.immutable.com",nativeToken:ps.get(Zi.IMTBL_ZKEVM_MAINNET).nativeCurrency},[Zi.SEPOLIA]:{url:"https://eth-sepolia.blockscout.com",nativeToken:hs.get(Zi.SEPOLIA).nativeCurrency},[Zi.ETHEREUM]:{url:"https://eth.blockscout.com/",nativeToken:ps.get(Zi.ETHEREUM).nativeCurrency}},ys=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"}],gs=[{constant:!1,inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"tokenId",type:"uint256"}],name:"approve",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"operator",type:"address"}],name:"isApprovedForAll",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{internalType:"uint256",name:"tokenId",type:"uint256"}],name:"getApproved",outputs:[{internalType:"address",name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"tokenId",type:"uint256"}],name:"ownerOf",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"}];var Es,Ts,ws,vs,Rs,As,_s,Cs,Is;!function(e){e.SUCCESS="SUCCESS",e.FAILED="FAILED",e.INSUFFICIENT_FUNDS="INSUFFICIENT_FUNDS"}(Es||(Es={})),function(e){e.NATIVE="NATIVE",e.ERC20="ERC20",e.ERC721="ERC721"}(Ts||(Ts={})),function(e){e.TRANSACTION="TRANSACTION",e.GAS="GAS"}(ws||(ws={})),function(e){e.NATIVE="NATIVE",e.ERC20="ERC20"}(vs||(vs={})),function(e){e.ROUTES_FOUND="ROUTES_FOUND",e.NO_ROUTES_FOUND="NO_ROUTES_FOUND",e.NO_ROUTE_OPTIONS="NO_ROUTE_OPTIONS"}(Rs||(Rs={})),function(e){e.BRIDGE="BRIDGE",e.SWAP="SWAP",e.ONRAMP="ONRAMP"}(As||(As={})),function(e){e.ONRAMP="onramp"}(_s||(_s={})),function(e){e.WEB3_PROVIDER_ERROR="WEB3_PROVIDER_ERROR",e.PROVIDER_ERROR="PROVIDER_ERROR",e.DEFAULT_PROVIDER_ERROR="DEFAULT_PROVIDER_ERROR",e.CONNECT_PROVIDER_ERROR="CONNECT_PROVIDER_ERROR",e.GET_BALANCE_ERROR="GET_BALANCE_ERROR",e.GET_INDEXER_BALANCE_ERROR="GET_INDEXER_BALANCE_ERROR",e.GET_ERC20_BALANCE_ERROR="GET_ERC20_BALANCE_ERROR",e.GET_ERC721_BALANCE_ERROR="GET_ERC721_BALANCE_ERROR",e.GET_NETWORK_INFO_ERROR="GET_NETWORK_INFO_ERROR",e.METAMASK_PROVIDER_ERROR="METAMASK_PROVIDER_ERROR",e.CHAIN_NOT_SUPPORTED_ERROR="CHAIN_NOT_SUPPORTED_ERROR",e.PROVIDER_REQUEST_MISSING_ERROR="PROVIDER_REQUEST_MISSING_ERROR",e.PROVIDER_REQUEST_FAILED_ERROR="PROVIDER_REQUEST_FAILED_ERROR",e.USER_REJECTED_REQUEST_ERROR="USER_REJECTED_REQUEST_ERROR",e.TRANSACTION_FAILED="TRANSACTION_FAILED",e.INSUFFICIENT_FUNDS="INSUFFICIENT_FUNDS",e.UNPREDICTABLE_GAS_LIMIT="UNPREDICTABLE_GAS_LIMIT",e.INVALID_GAS_ESTIMATE_TYPE="INVALID_GAS_ESTIMATE_TYPE",e.UNSUPPORTED_TOKEN_TYPE_ERROR="UNSUPPORTED_TOKEN_TYPE_ERROR",e.UNSUPPORTED_BALANCE_REQUIREMENT_ERROR="UNSUPPORTED_BALANCE_REQUIREMENT_ERROR",e.GET_ORDER_LISTING_ERROR="GET_ORDER_LISTING_ERROR",e.CANCEL_ORDER_LISTING_ERROR="CANCEL_ORDER_LISTING_ERROR",e.PREPARE_ORDER_LISTING_ERROR="PREPARE_ORDER_LISTING_ERROR",e.CREATE_ORDER_LISTING_ERROR="CREATE_ORDER_LISTING_ERROR",e.FULFILL_ORDER_LISTING_ERROR="FULFILL_ORDER_LISTING_ERROR",e.SWITCH_NETWORK_UNSUPPORTED="SWITCH_NETWORK_UNSUPPORTED",e.GET_ERC20_ALLOWANCE_ERROR="GET_ERC20_ALLOWANCE_ERROR",e.GET_ERC721_ALLOWANCE_ERROR="GET_ERC721_ALLOWANCE_ERROR",e.EXECUTE_APPROVAL_TRANSACTION_ERROR="EXECUTE_APPROVAL_TRANSACTION_ERROR",e.EXECUTE_FULFILLMENT_TRANSACTION_ERROR="EXECUTE_FULFILLMENT_TRANSACTION_ERROR",e.SIGN_MESSAGE_ERROR="SIGN_MESSAGE_ERROR",e.BRIDGE_GAS_ESTIMATE_ERROR="BRIDGE_GAS_ESTIMATE_ERROR",e.ORDER_FEE_ERROR="ORDER_FEE_ERROR",e.ITEM_REQUIREMENTS_ERROR="ITEM_REQUIREMENTS_ERROR",e.API_ERROR="API_ERROR",e.ORDER_EXPIRED_ERROR="ORDER_EXPIRED_ERROR",e.WIDGETS_SCRIPT_LOAD_ERROR="WIDGETS_SCRIPT_LOAD_ERROR"}(Cs||(Cs={}));class Ns extends Error{message;type;data;constructor(e,t,n){super(e),this.message=e,this.type=t,this.data=n}}!function(e){e.REJECTED_SWITCH_AFTER_ADDING_NETWORK="REJECTED_SWITCH_AFTER_ADDING_NETWORK"}(Is||(Is={}));const Os=async(e,t)=>{try{return await e()}catch(e){const n=`${e.message}`||"UnknownError",a=t.message?`[${t.type}]:${t.message}. Cause:${n}`:`[${t.type}] Cause:${n}`;if(e instanceof Ns)throw new Ns(a,t.type,{...t.data,innerErrorType:e.type,...e.data});throw new Ns(a,t.type,{...t.data})}};async function Ss(e){if(!e.provider?.request)throw new Ns("Parsed provider is not a valid Web3Provider",Cs.WEB3_PROVIDER_ERROR);const t=await e.provider.request({method:ns.GET_CHAINID,params:[]});return parseInt(t,16)}async function Ms(e,{type:t=es.ALL,exclude:n}){const{networkMap:a}=e,r=(await e.remote.getConfig("allowedNetworks")).filter((e=>{const a=t===es.ALL,r=!(n||[]).map((e=>e.chainId)).includes(e.chainId);return a&&r})),i=[];return r.forEach((e=>{const t=a.get(e.chainId);t&&i.push({name:t.chainName,chainId:parseInt(t.chainIdHex,16),nativeCurrency:t.nativeCurrency,isSupported:!0})})),{networks:i}}async function ks(e,t){const{networkMap:n}=e;return Os((async()=>{try{const e=await t.getNetwork();if(Array.from(n.keys()).includes(e.chainId)){const t=n.get(e.chainId);return{name:t.chainName,chainId:parseInt(t.chainIdHex,16),nativeCurrency:t.nativeCurrency,isSupported:!0}}return{chainId:e.chainId,name:e.name,isSupported:!1}}catch(e){const a=await Ss(t);return{chainId:a,isSupported:Array.from(n.keys()).includes(a)}}}),{type:Cs.GET_NETWORK_INFO_ERROR})}async function Ps(e,t,n){const{networkMap:a}=e;if(!(await Ms(e,{type:es.ALL})).networks.some((e=>e.chainId===n)))throw new Ns(`Chain:${n} is not a supported chain`,Cs.CHAIN_NOT_SUPPORTED_ERROR);if(t.provider?.isPassport)throw new Ns("Switching networks with Passport provider is not supported",Cs.SWITCH_NETWORK_UNSUPPORTED);try{await async function(e,t,n){if(t.provider?.request)return await t.provider.request({method:ns.SWITCH_NETWORK,params:[{chainId:e.get(n)?.chainIdHex}]})}(a,t,n)}catch(e){if(4902!==e.code)throw new Ns("User cancelled switch network request",Cs.USER_REJECTED_REQUEST_ERROR);try{await async function(e,t,n){if(t.provider?.request){const a=e.get(n),r={chainId:a?.chainIdHex,chainName:a?.chainName,rpcUrls:a?.rpcUrls,nativeCurrency:a?.nativeCurrency,blockExplorerUrls:a?.blockExplorerUrls};return await t.provider.request({method:ns.ADD_NETWORK,params:[r]})}}(a,t,n)}catch(e){throw new Ns("User cancelled add network request",Cs.USER_REJECTED_REQUEST_ERROR)}}const r=new d(t.provider);if((await r.getNetwork()).chainId!==n)throw new Ns("User cancelled switch network request",Cs.USER_REJECTED_REQUEST_ERROR);return{network:await ks(e,r),provider:r}}class Ds{isDevelopment;isProduction;configCache;tokensCache;constructor(e){this.isDevelopment=e.isDevelopment,this.isProduction=e.isProduction}static async makeHttpRequest(t){let n;try{n=await e.get(t)}catch(e){throw new Ns(`Error fetching from api: ${e.message}`,Cs.API_ERROR)}if(200!==n.status)throw new Ns(`Error fetching from api: ${n.status} ${n.statusText}`,Cs.API_ERROR);return n}getEndpoint=()=>this.isDevelopment?fs[ss]:this.isProduction?fs[N.PRODUCTION]:fs[N.SANDBOX];async loadConfig(){if(this.configCache)return this.configCache;const e=await Ds.makeHttpRequest(`${this.getEndpoint()}/v1/config`);return this.configCache=e.data,this.configCache}async loadConfigTokens(){if(this.tokensCache)return this.tokensCache;const e=await Ds.makeHttpRequest(`${this.getEndpoint()}/v1/config/tokens`);return this.tokensCache=e.data,this.tokensCache}async getConfig(e){const t=await this.loadConfig();if(t)return e?t[e]:t}async getTokensConfig(e){const t=await this.loadConfigTokens();return t&&t[e]?t[e]??[]:{}}}class Ls extends Error{message;constructor(e){super(e),this.message=e}}const xs=e=>e.isProduction?Zi.ETHEREUM:Zi.SEPOLIA,Fs=e=>e.isDevelopment?Zi.IMTBL_ZKEVM_DEVNET:e.isProduction?Zi.IMTBL_ZKEVM_MAINNET:Zi.IMTBL_ZKEVM_TESTNET;class Us{isDevelopment=!1;isProduction;isOnRampEnabled;isSwapEnabled;isBridgeEnabled;remote;environment;networkMap;constructor(e){if(!Object.values(N).includes(e.baseConfig.environment))throw new Ls("Invalid checkout configuration of environment");var t;this.environment=e.baseConfig.environment,this.isProduction=!this.isDevelopment&&this.environment===N.PRODUCTION,this.isOnRampEnabled=e.onRamp?.enable??true,this.isSwapEnabled=e.swap?.enable??true,this.isBridgeEnabled=e.bridge?.enable??true,this.networkMap=(t=this.isProduction,this.isDevelopment?ms:t?ps:hs),this.remote=new Ds({isDevelopment:this.isDevelopment,isProduction:this.isProduction})}}const Bs=async(e,{type:t=ts.ALL,chainId:n,exclude:a})=>{let r,i=[];switch(t){case ts.SWAP:i=(await e.remote.getConfig("dex")).tokens||[];break;case ts.ONRAMP:r=await e.remote.getConfig("onramp"),r||(i=[]),i=r[Yi.TRANSAK]?.tokens||[];break;case ts.BRIDGE:case ts.ALL:default:i=(await e.remote.getTokensConfig(n||xs(e))).allowed}return a&&0!==a?.length?{tokens:i.filter((e=>!a.map((e=>e.address)).includes(e.address||"")))}:{tokens:i}};class Vs{url;nativeToken;ttl;chainId;cacheMap;static async makeHttpRequest(t){return e.get(t)}setCache(e,t){this.cacheMap[e]={data:t,ttl:(new Date).getTime()+1e3*this.ttl}}getCache(e){const t=this.cacheMap[e];return!t||t.ttl<=(new Date).getTime()?null:t.data}constructor(e){this.chainId=e.chainId,this.url=bs[this.chainId].url;const t=bs[this.chainId].nativeToken;this.nativeToken={address:t.address??"",decimals:t.decimals.toString(),name:t.name,symbol:t.symbol},this.cacheMap={},this.ttl=void 0!==e.ttl?e.ttl:60}static isChainSupported=e=>Boolean(bs[e]);static isBlockscoutError=e=>"code"in e;async getTokensByWalletAddress(n){try{let e=`${this.url}/api/v2/addresses/${n.walletAddress}/tokens?type=${n.tokenType}`;n.nextPage&&(e+=`&${new URLSearchParams(n.nextPage)}`);const t=this.getCache(e);if(t)return Promise.resolve(t);const a=await Vs.makeHttpRequest(e);if(a.status>=400)return Promise.reject({code:a.status,message:a.statusText});const r={items:a.data?.items?.filter((e=>e.token.address&&e.token.address!==this.nativeToken.address)),next_page_params:a.data?.next_page_params};return this.setCache(e,r),Promise.resolve(r)}catch(n){let a=t.InternalServerError,r="InternalServerError";return e.isAxiosError(n)&&(a=n.response?.status||a,r=n.message),Promise.reject({code:a,message:r})}}async getNativeTokenByWalletAddress(n){try{const e=`${this.url}/api/v2/addresses/${n.walletAddress}`,t=this.getCache(e);if(t)return Promise.resolve(t);const a=await Vs.makeHttpRequest(e);if(a.status>=400)return Promise.reject({code:a.status,message:a.statusText});const r={token:this.nativeToken,value:a.data.coin_balance};return this.setCache(e,r),Promise.resolve(r)}catch(n){let a=t.InternalServerError,r="InternalServerError";return e.isAxiosError(n)&&(a=n.response?.status||a,r=n.message),Promise.reject({code:a,message:r})}}}var Gs;!function(e){e.ERC20="ERC-20"}(Gs||(Gs={}));const qs=(e,t,n)=>{e.isProduction||console.info(t,n)},js=async(e,t,n)=>{const a=performance.now(),r=await n,i=performance.now();return qs(e,t,(i-a)/1e3),r},$s=async(e,t,n)=>await Os((async()=>{const a=await ks(e,t);if(!a.isSupported)throw new Ns(`Chain:${a.chainId} is not a supported chain`,Cs.CHAIN_NOT_SUPPORTED_ERROR,{chainName:a.name});const i=await t.getBalance(n);return{balance:i,formattedBalance:r.formatUnits(i,a.nativeCurrency.decimals),token:a.nativeCurrency}}),{type:Cs.GET_BALANCE_ERROR});async function Hs(e,t,n){return await Os((async()=>{const a=new i(n,JSON.stringify(ys),e);return Promise.all([a.name(),a.symbol(),a.balanceOf(t),a.decimals()]).then((([e,t,a,i])=>({balance:a,formattedBalance:r.formatUnits(a,i),token:{name:e,symbol:t,decimals:i,address:n}})))}),{type:Cs.GET_ERC20_BALANCE_ERROR})}const zs=new Map,Ws=async(e,n,a,i)=>{i||=await n.getSigner().getChainId();const{tokens:o}=await Bs(e,{type:ts.ALL,chainId:i});let c=!1;try{c=(await e.remote.getTokensConfig(i)).blockscout||c}catch(e){console.error(e)}if(c&&Vs.isChainSupported(i)){const n=xs(e)===i;return await js(e,`Time to fetch balances using blockscout for ${i}`,(async(e,n,a)=>{const i=a.length>0,o=Object.assign({},...a.map((e=>({[e.address||""]:e}))));let c=zs.get(n);c||(c=new Vs({chainId:n}),zs.set(n,c));const d=[],u=Gs.ERC20;await Promise.all([(async n=>{let a;try{do{a=await n.getTokensByWalletAddress({walletAddress:e,tokenType:u,nextPage:a?.next_page_params}),d.push(...a.items)}while(a.next_page_params)}catch(e){if(e?.code!==t.NotFound)throw new Ns(e.message||"InternalServerError | getTokensByWalletAddress",Cs.GET_INDEXER_BALANCE_ERROR,e)}})(c),(async n=>{try{const t=await n.getNativeTokenByWalletAddress({walletAddress:e});d.push(t)}catch(e){if(e?.code!==t.NotFound)throw new Ns(e.message||"InternalServerError | getNativeTokenByWalletAddress",Cs.GET_INDEXER_BALANCE_ERROR,e)}})(c)]);const f=[];return d.forEach((e=>{if(i&&!o[e.token.address])return;const t=e.token||{},n=s.from(e.value);let a=parseInt(t.decimals,10);Number.isNaN(a)&&(a=cs);const c={...t,decimals:a},d=r.formatUnits(e.value,c.decimals);f.push({balance:n,formattedBalance:d,token:c})})),{balances:f}})(a,i,n?o:[]))}return await js(e,`Time to fetch balances using RPC for ${i}`,(async(e,t,n,a)=>{const r=[];return a.forEach((a=>{a.address&&a.address!==os?r.push(Hs(t,n,a.address)):r.push($s(e,t,n))})),{balances:(await Promise.allSettled(r)).filter((e=>"fulfilled"===e.status)).map((e=>e.value))}})(e,n,a,o))};async function Ks(e,t){let n=null;switch(e){case rs.PASSPORT:if(!t)throw console.error("WalletProviderName was PASSPORT but the passport instance was not provided to the Checkout constructor"),new Ns("Passport not provided",Cs.DEFAULT_PROVIDER_ERROR);n=new d(t.connectEvm());break;case rs.METAMASK:n=await async function(){const e=await Os((async()=>await f()),{type:Cs.METAMASK_PROVIDER_ERROR});if(!e||!e.request)throw new Ns("No MetaMask provider installed.",Cs.METAMASK_PROVIDER_ERROR);return new d(e)}();break;default:throw console.error("The WalletProviderName that was provided is not supported"),new Ns("Provider not supported",Cs.DEFAULT_PROVIDER_ERROR)}return{provider:n,walletProviderName:e}}function Xs(e){return!(!e||!e.provider?.request||"function"!=typeof e.provider.request)}async function Zs(e,t,n){return Os((async()=>{if(t.provider?.isPassport)return t;if(!Xs(t))throw new Ns("Parsed provider is not a valid Web3Provider",Cs.WEB3_PROVIDER_ERROR);const a={...is,...n},r=await Ss(t);let i=t.network?.chainId;try{i=t.network?.chainId,i||(i=(await t.getNetwork()).chainId)}catch(e){throw new Ns("Unable to detect the web3Provider network",Cs.WEB3_PROVIDER_ERROR)}if(i!==r&&!a.allowMistmatchedChainId)throw new Ns("Your wallet has changed network, please switch to a supported network",Cs.WEB3_PROVIDER_ERROR);if(!(await Ms(e,{type:es.ALL})).networks.some((e=>e.chainId===r))&&!a.allowUnsupportedProvider)throw new Ns("Your wallet is connected to an unsupported network, please switch to a supported network",Cs.WEB3_PROVIDER_ERROR);return t}),{type:Cs.WEB3_PROVIDER_ERROR})}const Js=e=>(e=>!!e.maxFeePerGas&&!!e.maxPriorityFeePerGas)(e)?s.from(e.maxFeePerGas).add(s.from(e.maxPriorityFeePerGas)):e.gasPrice?s.from(e.gasPrice):null,Ys=async e=>{const t=await e.getFeeData(),n=Js(t);if(n)return n.mul(14e4)};async function Qs(e,t,n,a){const r=n.get(e),i=n.get(t);if(!r)throw new Ns(`Chain:${e} is not a supported chain`,Cs.CHAIN_NOT_SUPPORTED_ERROR);if(!i)throw new Ns(`Chain:${t} is not a supported chain`,Cs.CHAIN_NOT_SUPPORTED_ERROR);let s=D;a.isDevelopment&&(s=P),a.isProduction&&(s=L);const o=new Yn({baseConfig:new O({environment:a.environment}),bridgeInstance:s,rootProvider:r,childProvider:i});return new Wn(o)}async function eo(e,t){const n=await t.remote.getConfig("dex");return new hr({chainId:e,baseConfig:new O({environment:t.environment}),overrides:n?.overrides})}function to(e){return new Qr({baseConfig:{environment:e.environment}})}function no(e){return new Fi({baseConfig:{environment:e.environment}})}const ao="0x0000000000000000000000000000000000000001",ro=18;async function io(e,t,n){const a=xs(t),r=Fs(t),i=await t.remote.getConfig("gasEstimateTokens"),{fromAddress:s}=i[a].bridgeToL2Addresses,o=e.get(a);if(!o)throw new Error(`Missing JsonRpcProvider for chain id: ${a}`);try{let i={};const c=async()=>{i=await async function(e,t){const n=await Ys(e);return n&&t?{estimatedAmount:n.add(n)}:{estimatedAmount:n}}(o,n),i.token=t.networkMap.get(a)?.nativeCurrency};let d={bridgeFee:{},bridgeable:!1};const u=async()=>{const n=await Qs(a,r,e,t);d=await async function(e,t){const n=await e.getFee({token:t});return{bridgeFee:{estimatedAmount:n.feeAmount},bridgeable:n.bridgeable}}(n,s)};return await Promise.all([c(),u()]),{gasEstimateType:Qi.BRIDGE_TO_L2,gasFee:i,bridgeFee:{estimatedAmount:d.bridgeFee?.estimatedAmount,token:d.bridgeFee?.token},bridgeable:d.bridgeable}}catch{return{gasEstimateType:Qi.BRIDGE_TO_L2,gasFee:{},bridgeFee:{},bridgeable:!1}}}async function so(e,t,n){switch(e.gasEstimateType){case Qi.BRIDGE_TO_L2:return await io(t,n,e.isSpendingCapApprovalRequired);case Qi.SWAP:return await async function(e){const t=Fs(e),n=await e.remote.getConfig("gasEstimateTokens"),{inAddress:a,outAddress:i}=n[t].swapAddresses;try{const n=await eo(t,e),{swap:o}=await n.getUnsignedSwapTxFromAmountIn(ao,a,i,s.from(r.parseUnits("1",ro)));if(null===o.gasFeeEstimate)return{gasEstimateType:Qi.SWAP,gasFee:{}};let c;return o.gasFeeEstimate.value&&(c=s.from(o.gasFeeEstimate.value)),{gasEstimateType:Qi.SWAP,gasFee:{estimatedAmount:c,token:{address:o.gasFeeEstimate?.token.address,symbol:o.gasFeeEstimate?.token.symbol??"",name:o.gasFeeEstimate?.token.name??"",decimals:o.gasFeeEstimate?.token.decimals??ro}}}}catch{return{gasEstimateType:Qi.SWAP,gasFee:{}}}}(n);default:throw new Ns("Invalid type provided for gasEstimateType",Cs.INVALID_GAS_ESTIMATE_TYPE)}}const oo=e=>(e=>{const t=new Map,n=[];return e.forEach((e=>{const{type:a}=e;if(a!==Ts.ERC721)return void n.push(e);const{contractAddress:r,spenderAddress:i,id:s}=e,o=`${r}${i}${s}`;t.get(o)||t.set(o,{...e})})),n.concat(Array.from(t.values()))})((e=>{const t=new Map,n=[];return e.forEach((e=>{const{type:a}=e;if(a!==Ts.ERC20)return void n.push(e);const{contractAddress:r,spenderAddress:i,amount:o}=e,c=`${r}${i}`,d=t.get(c);d&&d.type===Ts.ERC20?d.amount=s.from(d.amount).add(o):t.set(c,{...e})})),n.concat(Array.from(t.values()))})((e=>{const t=new Map,n=[];return e.forEach((e=>{const{type:a}=e;if(a!==Ts.NATIVE)return void n.push(e);const{amount:r}=e,i=t.get(a);i&&i.type===Ts.NATIVE?i.amount=s.from(i.amount).add(r):t.set(a,{...e})})),n.concat(Array.from(t.values()))})(e))),co=async(e,t,n,a)=>{try{const r=new i(n,JSON.stringify(ys),e);return await r.allowance(t,a)}catch(e){throw new Ns("Failed to get the allowance for ERC20",Cs.GET_ERC20_ALLOWANCE_ERROR,{contractAddress:n})}},uo=async(e,t,n,a,r)=>{try{const s=new i(n,JSON.stringify(ys),e),o=await s.populateTransaction.approve(a,r);return o&&(o.from=t),o}catch{throw new Ns("Failed to get the approval transaction for ERC20",Cs.GET_ERC20_ALLOWANCE_ERROR,{contractAddress:n})}},fo=async(e,t,n,a)=>{try{const r=new i(n,JSON.stringify(gs),e);return await r.isApprovedForAll(t,a)}catch(e){throw new Ns("Failed to check approval for all ERC721s of collection",Cs.GET_ERC721_ALLOWANCE_ERROR,{ownerAddress:t,contractAddress:n,spenderAddress:a})}},lo=async(e,t,n,a,r)=>{try{const s=new i(n,JSON.stringify(gs),e),o=await s.populateTransaction.approve(a,r);return o&&(o.from=t),o}catch(e){throw new Ns("Failed to get the approval transaction for ERC721",Cs.GET_ERC721_ALLOWANCE_ERROR,{id:r.toString(),contractAddress:n,spenderAddress:a,ownerAddress:t})}},po=async(e,t,n)=>{try{const a=new i(t,JSON.stringify(gs),e);return await a.getApproved(n)}catch(e){throw new Ns("Failed to get approved address for ERC721",Cs.GET_ERC721_ALLOWANCE_ERROR,{id:n.toString(),contractAddress:t})}},ho=(e,t)=>{const n=parseInt(e,10);if(Number.isNaN(n))throw new Ns("Invalid ERC721 ID",Cs.GET_ERC721_ALLOWANCE_ERROR,{id:e,contractAddress:t});return n},mo=async(e,t,n)=>{let a=!0;const r=[],i=new Map,s=new Map,o=new Map,c=new Map,d=await(async(e,t,n)=>{const a=new Map,r=new Map;for(const i of t){if(i.type!==Ts.ERC721)continue;const{contractAddress:t,spenderAddress:s}=i,o=`${t}-${s}`;a.set(o,!1),r.has(o)||r.set(o,fo(e,n,t,s))}const i=await Promise.all(r.values()),s=Array.from(r.keys());return i.forEach(((e,t)=>{a.set(s[t],e)})),a})(e,n,t);for(const t of n){if(t.type!==Ts.ERC721)continue;const{contractAddress:n,id:a,spenderAddress:o}=t,c=`${n}-${o}`;if(d.get(c)){r.push({sufficient:!0,itemRequirement:t});continue}const u=`${n}-${a}`,f=ho(a,n);i.set(u,t),s.set(u,po(e,n,f))}const u=await Promise.all(s.values()),f=Array.from(s.keys());for(let n=0;n<u.length;n++){const s=i.get(f[n]);if(!s||s.type!==Ts.ERC721)continue;if(u[n]===s.spenderAddress){r.push({sufficient:!0,itemRequirement:s});continue}a=!1;const{contractAddress:d,id:l,spenderAddress:p}=s,h=`${d}-${l}`,m=ho(l,d);o.set(h,{type:Ts.ERC721,sufficient:!1,itemRequirement:s,approvalTransaction:void 0}),c.set(h,lo(e,t,d,p,m))}const l=await Promise.all(c.values()),p=Array.from(c.keys());return l.forEach(((e,t)=>{const n=o.get(p[t]);n&&(n.sufficient||(n.approvalTransaction=e))})),{sufficient:a,allowances:r.concat(Array.from(o.values()))}},bo=e=>(e=>{const t=new Map,n=[];return e.forEach((e=>{const{type:a}=e;if(a!==Ts.ERC721)return void n.push(e);const{contractAddress:r,id:i}=e,s=`${r}${i}`;t.get(s)||t.set(s,{...e})})),n.concat(Array.from(t.values()))})((e=>{const t=new Map,n=[];return e.forEach((e=>{const{type:a}=e;if(a!==Ts.ERC20)return void n.push(e);const{contractAddress:r,amount:i}=e,o=`${r}`,c=t.get(o);c&&c.type===Ts.ERC20?c.amount=s.from(c.amount).add(i):t.set(o,{...e})})),n.concat(Array.from(t.values()))})((e=>{const t=new Map,n=[];return e.forEach((e=>{const{type:a}=e;if(a!==Ts.NATIVE)return void n.push(e);const{amount:r}=e,i=t.get(a);i&&i.type===Ts.NATIVE?i.amount=s.from(i.amount).add(r):t.set(a,{...e})})),n.concat(Array.from(t.values()))})(e))),yo=async(e,t,n,a)=>{try{const r=new Map;(e=>e.map((e=>e.type===Ts.NATIVE?{address:os}:{address:e.contractAddress})))(a).forEach((e=>r.set((e.address||"").toLocaleLowerCase(),e)));const{balances:i}=await Ws(e,t,n);return i.filter((e=>r.get((e.token.address||"").toLocaleLowerCase())))}catch(e){throw new Ns("Failed to get balances",Cs.GET_BALANCE_ERROR)}},go=async(e,t,n,a)=>{const o=bo(a),c=[],d=[];if(o.forEach((e=>{switch(e.type){case Ts.ERC20:case Ts.NATIVE:c.push(e);break;case Ts.ERC721:d.push(e)}})),0===d.length&&0===c.length)throw new Ns("Unsupported item requirement balance check",Cs.UNSUPPORTED_BALANCE_REQUIREMENT_ERROR);const u=[];c.length>0&&u.push(yo(e,t,n,o)),d.length>0&&u.push((async(e,t,n)=>{const a=[],r=new Map,o=new Map;n.forEach((t=>{if(t.type!==Ts.ERC721)return;const n=new i(t.contractAddress,JSON.stringify(gs),e);r.set(t.contractAddress,t),o.set(t.contractAddress,n.ownerOf(t.id))}));try{const e=await Promise.all(o.values()),n=Array.from(o.keys());e.forEach(((e,i)=>{const o=r.get(n[i]);let c=0;o&&t===e&&(c=1),a.push({type:Ts.ERC721,balance:s.from(c),formattedBalance:c.toString(),contractAddress:o.contractAddress,id:o.id})}))}catch(e){throw new Ns("Failed to get ERC721 balances",Cs.GET_ERC721_BALANCE_ERROR)}return a})(t,n,o));const f=await Promise.all(u),l=[];if(c.length>0&&f.length>0){const e=f.shift();e&&c.forEach((t=>{l.push(((e,t)=>{let n;e.type===Ts.ERC20?n=t.find((t=>t.token?.address===e.contractAddress)):e.type===Ts.NATIVE&&(n=t.find((e=>""===e.token?.address||e.token?.address===os)));const a=e.amount,i=a.isNegative()||a.isZero()||(n?.balance.gte(a)??!1),o=a.sub(n?.balance??s.from(0));let c="",d="",u=cs;n&&(u=n.token?.decimals??cs,c=n.token.name,d=n.token.symbol);let f=n;return e.type===Ts.NATIVE?(f||(f={type:Ts.NATIVE,balance:s.from(0),formattedBalance:"0",token:{name:c,symbol:d,decimals:cs,address:os}}),{sufficient:i,type:Ts.NATIVE,delta:{balance:o,formattedBalance:r.formatUnits(o,u)},current:{...f,type:Ts.NATIVE},required:{...f,type:Ts.NATIVE,balance:s.from(e.amount),formattedBalance:r.formatUnits(e.amount,u)}}):(f||(f={type:e.type,balance:s.from(0),formattedBalance:"0",token:{name:c,symbol:d,address:e.contractAddress,decimals:u}}),{sufficient:i,type:Ts.ERC20,delta:{balance:o,formattedBalance:r.formatUnits(o,u)},current:f,required:{...f,balance:s.from(e.amount),formattedBalance:r.formatUnits(e.amount,u)}})})(t,e))}))}if(d.length>0&&f.length>0){const e=f.shift();e&&d.forEach((t=>{l.push(((e,t)=>{const n=s.from(1),a=t.find((t=>{const n=t;return n.contractAddress===e.contractAddress&&n.id===e.id})),r=n.isNegative()||n.isZero()||(a?.balance.gte(n)??!1),i=n.sub(a?.balance??s.from(0));let o=a;return o||(o={type:Ts.ERC721,balance:s.from(0),formattedBalance:"0",contractAddress:e.contractAddress,id:e.id}),{sufficient:r,type:Ts.ERC721,delta:{balance:i,formattedBalance:i.toString()},current:o,required:{...o,balance:s.from(1),formattedBalance:"1"}}})(t,e))}))}return{sufficient:void 0===l.find((e=>!1===e.sufficient)),balanceRequirements:l}},Eo=async(e,t)=>{try{return await e.estimateGas(t)}catch(e){throw new Ns("Failed to estimate gas for transaction",Cs.UNPREDICTABLE_GAS_LIMIT)}},To=async(e,t,n)=>{const a=[];let r=s.from(0);for(const n of t)void 0!==n.approvalTransaction&&a.push(Eo(e,n.approvalTransaction));if(n.type===ws.TRANSACTION)a.push(Eo(e,n.transaction));else{const t=await e.getFeeData(),a=Js(t);if(null!==a){const e=a?.mul(n.gasToken.limit);e&&(r=r.add(e))}}return(await Promise.all(a)).forEach((e=>{r=r.add(e)})),r.eq(0)?null:((e,t)=>t.type===ws.TRANSACTION||t.gasToken.type===vs.NATIVE?{type:Ts.NATIVE,amount:e}:{type:Ts.ERC20,amount:e,contractAddress:t.gasToken.contractAddress,spenderAddress:""})(r,n)},wo=(t,n)=>({checkDexAvailability:async()=>{let a;try{a=await e.post(`${t?us[ss]:n?us[N.PRODUCTION]:us[N.SANDBOX]}/v1/availability/checkout/swap`)}catch(e){a=e.response}if(403===a.status)return!1;if(204===a.status)return!0;throw new Ns(`Error fetching from api: ${a.status} ${a.statusText}`,Cs.API_ERROR)}}),vo=async()=>!0,Ro=async e=>{const t=wo(e.isDevelopment,e.isProduction);try{return await t.checkDexAvailability()}catch{return!1}};async function Ao(e,t){if(e.isProduction&&t?.has(Zi.ETHEREUM))return t;if(t?.has(Zi.SEPOLIA))return t;const n=new Map;return(await Ms(e,{type:es.ALL})).networks.forEach((t=>{const a=e.networkMap.get(t.chainId)?.rpcUrls[0],r=new u(a);n.set(t.chainId,r)})),n}const _o=async(e,t,n,a,r)=>{const i=new Map;try{const s=await eo(t,e),o=[],c=[];for(const e of r)e!==a.address&&(o.push(s.getUnsignedSwapTxFromAmountOut(n,e,a.address,a.amount,1)),c.push(e));return(await js(e,"Time to resolve swap quotes from the dex",Promise.allSettled(o))).forEach(((e,t)=>{if("rejected"===e.status)return;const n=c[t];i.set(n,{quote:e.value.quote,approval:e.value.approval?.gasFeeEstimate??null,swap:e.value.swap.gasFeeEstimate})})),i}catch{return i}},Co=(e,t,n)=>{let a,i=s.from(0),o="0";e&&(i=e.value,o=r.formatUnits(e.value,e.token.decimals),a={name:e.token.name??"",symbol:e.token.symbol??"",address:e.token.address,decimals:e.token.decimals});let c,d=s.from(0),u="0";t&&(d=t.value,u=r.formatUnits(t.value,t.token.decimals),c={name:t.token.name??"",symbol:t.token.symbol??"",address:t.token.address,decimals:t.token.decimals});const f=[];for(const e of n)f.push({amount:e.amount.value,formattedAmount:r.formatUnits(e.amount.value,e.amount.token.decimals),token:{name:e.amount.token.name??"",symbol:e.amount.token.symbol??"",address:e.amount.token.address,decimals:e.amount.token.decimals}});return{approvalGasFees:{amount:i,formattedAmount:o,token:a},swapGasFees:{amount:d,formattedAmount:u,token:c},swapFees:f}},Io=(e,t,n,a)=>{const i=n.token.address;let s=Ts.ERC20;return i===os&&(s=Ts.NATIVE),{type:As.SWAP,chainId:e,fundingItem:{type:s,fundsRequired:{amount:t,formattedAmount:r.formatUnits(t,n.token.decimals)},userBalance:{balance:n.balance,formattedBalance:n.formattedBalance},token:n.token},fees:a}},No=(e,t)=>{if(!t)return{sufficient:!0,approvalGasFee:s.from(0),approvalGasTokenAddress:""};const n=t.value,a=t.token.address;if(0===e.length)return{sufficient:!1,approvalGasFee:n,approvalGasTokenAddress:a};const r=e.find((e=>e.token.address===a));return r?r.balance.lt(n)?{sufficient:!1,approvalGasFee:n,approvalGasTokenAddress:a}:{sufficient:!0,approvalGasFee:n,approvalGasTokenAddress:a}:{sufficient:!1,approvalGasFee:n,approvalGasTokenAddress:a}},Oo=(e,t,n,a,r)=>{const i=new Map;if(""!==t.approvalGasTokenAddress&&i.set(t.approvalGasTokenAddress,t.approvalGasFee),n){const e=i.get(n.token.address);e?i.set(n.token.address,e.add(n.value)):i.set(n.token.address,n.value)}if(r){const e=i.get(r.address);e?i.set(r.address,e.add(r.amount)):i.set(r.address,r.amount)}for(const e of a){const t=i.get(e.amount.token.address);t?i.set(e.amount.token.address,t.add(e.amount.value)):i.set(e.amount.token.address,e.amount.value)}for(const[t,n]of i.entries()){if(n===s.from(0))continue;const a=e.find((e=>e.token.address===t));if(!a)return!1;if(a.balance.lt(n))return!1}return!0},So=(e,t,n,a,r,i)=>{let o=s.from(0),c="",d=!1;if(t.balanceRequirements.forEach((t=>{t.type!==Ts.NATIVE&&t.type!==Ts.ERC20||t.required.token.address===n&&(c=t.required.token.address,d=!0,o=e.sub(t.required.balance))})),!d)return!0;r.approvalGasTokenAddress===c&&(o=o.sub(r.approvalGasFee));for(const e of i)e.amount.token.address===c&&(o=o.sub(e.amount.value));return o.gte(a)},Mo=async(e,t,n,a,r,i,o)=>{const c=[];if(!t.swap)return c;if(0===i.length)return c;const d=(e=>{let t="",n=s.from(0);switch(e.type){case Ts.ERC20:t=e.required.token.address??"",n=e.delta.balance;break;case Ts.NATIVE:t=os,n=e.delta.balance}return{address:t,amount:n}})(a);if(""===d.address)return c;const u=Fs(e),f=r.get(u);if(!f)return c;const l=f.balances;if(0===l.length)return c;const p=await _o(e,Fs(e),n,d,i),h=Array.from(p.keys());for(const e of h){const t=p.get(e);if(!t)continue;const n=l.find((t=>t.token.address===e));if(!n)continue;const a=t.quote.amount;if(n.balance.lt(a.value))continue;const r=No(l,t.approval);if(!r.sufficient)continue;if(!Oo(l,r,t.swap,t.quote.fees,{amount:a.value,address:e}))continue;if(!So(n.balance,o,e,a.value,r,t.quote.fees))continue;const i=Co(t.approval,t.swap,t.quote.fees);c.push(Io(u,a.value,n,i))}return c},ko=(e,t)=>t&&t.success?e.filter((e=>"address"in e?t.balances.find((t=>t.token.address===e.address&&t.balance.gt(0))):t.balances.find((e=>!("address"in e.token)&&e.balance.gt(0))))):[],Po=async(e,t)=>{if(t.onRamp){const t=await e.remote.getConfig("onramp"),n={};return Object.entries(t).forEach((([e,t])=>{n[e]=t.tokens??[]})),n}return{}},Do=async(e,t,n)=>{if(n.bridge){const n=(await e.remote.getConfig("bridge"))?.tokens??[],a=t.get(xs(e));return ko(n,a)}return[]},Lo=async(e,t,n)=>{const a={};return a.swap=await(async(e,t,n)=>{if(n.swap){const n=(await e.remote.getConfig("dex"))?.tokens??[],a=t.get(Fs(e));return ko(n,a)}return[]})(e,t,n),a.bridge=await Do(e,t,n),a.onRamp=await Po(e,n),a},xo="0x0000000000000000000000000000000000000001",Fo=async(e,t)=>(await t.remote.getConfig("imxAddressMapping"))[e]??"",Uo=async(e,t)=>{if(""===t)return{l1address:"",l2address:t};if(t===os)return{l1address:await Fo(xs(e),e),l2address:os};const n=(a=Fs(e))===Zi.IMTBL_ZKEVM_MAINNET?"imtbl-zkevm-mainnet":a===Zi.IMTBL_ZKEVM_TESTNET?"imtbl-zkevm-testnet":a===Zi.IMTBL_ZKEVM_DEVNET?"imtbl-zkevm-devent":"";var a;if(""===n)return{l1address:"",l2address:t};const r=no(e),i=(await r.getToken({chainName:n,contractAddress:t})).result.root_contract_address;return null===i?{l1address:"",l2address:t}:{l1address:i,l2address:t}},Bo=async(e,t,n,a,r,i)=>{if(r===xo)return s.from(0);const o=xs(e),c=Fs(e);return await(async(e,t,n,a,r,i,o,c)=>{try{const d=await Qs(r,i,t,e),{unsignedTx:u}=await d.getUnsignedApproveDepositBridgeTx({depositorAddress:a,token:o,depositAmount:c});return null===u?s.from(0):await n.estimateGas(u)}catch(e){throw new Ns("Error occurred while attempting ot estimate gas for approval transaction",Cs.BRIDGE_GAS_ESTIMATE_ERROR,{message:e.message})}})(e,t,n,a,o,c,r,i)},Vo=(e,t)=>(e=>{for(const t of e.balances)if(!t.token.address||""===t.token.address)return t.balance;return s.from(0)})(e).gte(t),Go=async(e,t,n)=>{let a=n.get(As.BRIDGE);return a||(a=await(async(e,t)=>{try{const n=await so({gasEstimateType:Qi.BRIDGE_TO_L2,isSpendingCapApprovalRequired:!1},t,e),a=n.gasFee.estimatedAmount,r=n.bridgeFee.estimatedAmount;let i=s.from(0);return a&&(i=i.add(a)),r&&(i=i.add(r)),{type:As.BRIDGE,gasFee:{estimatedAmount:a??s.from(0),token:n.gasFee.token},bridgeFee:{estimatedAmount:r??s.from(0),token:n.bridgeFee.token},totalFees:i}}catch(e){throw new Ns("Error estimating gas for bridge",Cs.BRIDGE_GAS_ESTIMATE_ERROR,{message:e.message})}})(e,t),n.set(As.BRIDGE,a),a)},qo=(e,t,n)=>{const a=n.token?.decimals??cs;return{approvalGasFees:{amount:e,formattedAmount:r.formatUnits(e,cs),token:t.token},bridgeGasFees:{amount:t.estimatedAmount,formattedAmount:r.formatUnits(t.estimatedAmount,cs),token:t.token},bridgeFees:[{amount:n.estimatedAmount,formattedAmount:r.formatUnits(n.estimatedAmount,a),token:n.token}]}},jo=(e,t,n,a,r)=>({type:As.BRIDGE,chainId:e,fundingItem:{type:a,fundsRequired:{amount:n.amount,formattedAmount:n.formattedAmount},userBalance:{balance:t.balance,formattedBalance:t.formattedBalance},token:{name:t.token.name,symbol:t.token.symbol,address:t.token.address,decimals:t.token.decimals}},fees:r}),$o=async(e,t,n,a,r,i,s)=>{if(!a.bridge)return;if(void 0===r.l2address||""===r.l2address)return;const o=xs(e),c=i.get(o),d=t.get(o);if(!d)throw new Ns("No L1 provider available",Cs.PROVIDER_ERROR,{chainId:o.toString()});if(void 0===c||!1===c.success)return;const u=await Do(e,i,a);if(0===u.length)return;const f=await Go(e,t,s);if(!Vo(c,f.totalFees))return;const l=await Uo(e,r.l2address),{l1address:p}=l;if(""===p)return;if(p===xo){if(!u.find((e=>!("address"in e))))return}else if(!u.find((e=>e.address===p)))return;const h=await Bo(e,t,d,n,p,r.amount);let m=f.bridgeFee.estimatedAmount;if(p===xo){const e=c.balances.find((e=>{return!(t=e.token.address)||""===t;var t}));if(f.gasFee.estimatedAmount&&(m=m.add(f.gasFee.estimatedAmount)),!Vo(c,m))return;if(e&&e.balance.gte(r.amount.add(m))){const t=qo(h,f.gasFee,f.bridgeFee);return jo(o,e,r,Ts.NATIVE,t)}return}if(m.add(h).add(f.gasFee.estimatedAmount),!Vo(c,m))return;const b=c.balances.find((e=>e.token.address===p));if(b&&b.balance.gte(r.amount)){const e=qo(h,f.gasFee,f.bridgeFee);return jo(o,b,r,Ts.ERC20,e)}},Ho=(e,t)=>{let n=s.from(0);return e.quote.fees.forEach((e=>{e.amount.token.address===t&&(n=n.add(e.amount.value))})),e.approval&&e.approval.token.address===t&&(n=n.add(e.approval.value)),n},zo=(e,t)=>{for(const n of e.balanceRequirements)if((n.type===Ts.NATIVE||n.type===Ts.ERC20)&&n.required.token.address===t)return n.required.balance;return s.from(0)},Wo=(e,t,n)=>{const a=n?.balance??s.from(0);if(a.gte(e.add(t)))return s.from(0);if(a.lte(0))return e.add(t);const r=a.sub(t);return r.gte(0)?e.sub(r):e.add(t).sub(a)},Ko=async(e,t,n,a,i,o,c,d,u,f)=>{const{l1balances:l,l2balances:p}=((e,t)=>{const n={l1balances:[],l2balances:[]},a=t.get(xs(e)),r=t.get(Fs(e));return a?void 0!==a.error?n:a.success&&r?void 0!==r.error?n:r.success?{l1balances:a.balances,l2balances:r.balances}:n:n:n})(e,c),h=a.required.token.address;if(((e,t,n,a,r,i)=>0===e.length||0===t.length||0===n.length||0===a.length||!r.bridge||!r.swap||void 0===i||""===i)(d,u,l,p,n,h))return[];const m=await(async(e,t)=>{const n=t.map((t=>Uo(e,t.address??"")));return await Promise.all(n)})(e,u),b=((e,t,n,a)=>{const r=[];for(const i of a){if(""===i.l1address)continue;if(""===i.l2address)continue;if(!t.includes(i.l1address))continue;if(i.l2address===e)continue;const a=n.find((e=>e.address===i.l2address));a&&r.push(a)}return r})(h,d,u,m);if(0===b.length)return[];const y=await(async(e,t,n,a,r)=>{const i=[];for(const e of r)e.address&&i.push(e.address);return await _o(e,Fs(e),t,{address:n,amount:a.delta.balance},i)})(e,i,h,a,b),g=((e,t,n,a,i)=>{const s=[];for(const[o,c]of e){const e=n.find((e=>e.token.address===o)),d=a.find((e=>e.l2address===o));if(!d)continue;const{l1address:u,l2address:f}=d;if(!u)continue;const l=t.find((e=>void 0===e.token.address&&u===xo||e.token.address===u));if(!l)continue;const p=c.quote.amountWithMaxSlippage.value,h=Ho(c,o),m=p.add(h),b=zo(i,o),y=Wo(m,b,e);y.lte(0)||y.gte(l.balance)||s.push({amount:y,formattedAmount:r.formatUnits(y,l.token.decimals),l2address:f})}return s})(y,l,p,m,f);if(0===g.length)return[];const E=new Map,T=new Map,w=[];for(const a of g)a.l2address&&(E.set(a.l2address,$o(e,t,i,n,a,c,o)),T.set(a.l2address,{amount:a.amount,formattedAmount:a.formattedAmount,l2address:a.l2address}));const v=await Promise.all(E.values()),R=Array.from(E.keys()),A=[];if(v.forEach(((e,t)=>{const n=R[t];if(void 0===e)return;A.push(n);const a=T.get(n);a&&w.push({amount:a.amount,formattedAmount:a.formattedAmount,l2address:a.l2address})})),0===A.length)return[];if(0===w.length)return[];const _=((e,t,n,a,i)=>{const o=new Map;for(const[e,n]of t)o.set(e,{success:n.success,balances:n.balances});const c=new Map;for(const e of n)e.token.address&&c.set(e.token.address,e);for(const e of a){const{amount:t,l2address:n}=e;if(""===n)continue;let a=s.from(0);const o=c.get(n);o&&(a=o.balance);const d=a.add(t),u=i.find((e=>e.address===n));c.set(n,{balance:d,formattedBalance:r.formatUnits(d,u.decimals),token:u})}const d=Array.from(c.values());return o.set(Fs(e),{success:!0,balances:d}),o})(e,c,p,w,u),C=await Mo(e,n,i,a,_,A,f);if(!C)return[];const I=((e,t)=>{const n=[];for(const a of t){const{chainId:t,fundingItem:r}=a,{userBalance:i}=a.fundingItem,o=e.get(t);if(!o)continue;let c=s.from(0),d="0";const u=o.balances.find((e=>e.token.address===r.token.address));u&&(c=u.balance,d=u.formattedBalance),i.balance=c,i.formattedBalance=d,n.push(a)}return n})(c,C);return((e,t,n)=>{const a=[];for(const r of e){if(!r)continue;const e=n.find((e=>void 0===r.fundingItem.token.address?e.l1address===xo&&e.l2address:e.l1address===r.fundingItem.token.address&&e.l2address));if(!e)continue;const i=t.find((t=>t.fundingItem.token.address===e.l2address));i&&a.push({bridgeFundingStep:r,swapFundingStep:i})}return a})(v,I,m)},Xo=async(e,t,n)=>{if(!t.onRamp)return;if(void 0===n)return;const a=await(async(e,t,n)=>{if(n.type!==Ts.ERC20&&n.type!==Ts.NATIVE)return;const{required:a,current:r,delta:i}=n;let s=!1;const o=await Po(e,t);return Object.values(o).forEach((e=>{e.length>0&&!s&&(s=!!e.find((e=>e.address===a.token?.address)))})),s?{type:As.ONRAMP,chainId:Fs(e),fundingItem:{type:a.token.address===os?Ts.NATIVE:Ts.ERC20,fundsRequired:{amount:i.balance,formattedAmount:i.formattedBalance},userBalance:{balance:r.balance,formattedBalance:r.formattedBalance},token:a.token}}:void 0})(e,t,n);return a},Zo=async(e,t,n,a)=>{if(!(e=>e.bridge||e.swap||e.onRamp)(a))return{type:Rs.NO_ROUTE_OPTIONS,message:"No routing options are available"};let r;try{r=await Ao(e)}catch(e){throw new Ns("Error occurred while creating read only providers",Cs.PROVIDER_ERROR,{message:e.message})}const i=await js(e,"Time to get token balances inside router",(async(e,t,n,a)=>{const r=new Map,i=new Map;if(0===t.size){const t={success:!1,error:new Ns("No L1 or L2 provider available",Cs.PROVIDER_ERROR),balances:[]};return r.set(xs(e),t),r.set(Fs(e),t),r}if(a.bridge){const a=xs(e);t.has(a)?i.set(a,Ws(e,t.get(a),n,a)):r.set(xs(e),{success:!1,error:new Ns(`No L1 provider available for ${a}`,Cs.PROVIDER_ERROR),balances:[]})}const s=Fs(e);if(t.has(s)?i.set(s,Ws(e,t.get(s),n,s)):r.set(Fs(e),{success:!1,error:new Ns(`No L2 provider available for ${s}`,Cs.PROVIDER_ERROR),balances:[]}),i.size>0){const e=Array.from(i.keys());(await Promise.allSettled(i.values())).forEach(((t,n)=>{const a=e[n];"fulfilled"===t.status?r.set(a,{success:!0,balances:t.value.balances}):r.set(a,{success:!1,error:new Ns(`Error getting ${s} balances`,Cs.GET_BALANCE_ERROR),balances:[]})}))}return r})(e,r,t,a)),s=await js(e,"Time to get routing allowlist",Lo(e,i,a)),o=new Map,c=(e=>{let t,n=0;for(const a of e.balanceRequirements)a.sufficient||(n++,t=a);if(1===n)return t})(n),d=[];d.push((async(e,t,n,a,r,i,s)=>{let o;if(void 0===a)return;if(a.type!==Ts.NATIVE&&a.type!==Ts.ERC20)return;const c={amount:a.delta.balance,formattedAmount:a.delta.formattedBalance,l2address:a.required.token.address??""};return n.bridge&&a&&(o=await $o(e,t,r,n,c,i,s)),o})(e,r,a,c,t,i,o)),d.push((async(e,t,n,a,r,i,s)=>{const o=[];if(!t.swap)return o;if(void 0===n)return o;if(void 0===i)return o;const c=r.get(Fs(e));if(!c)return o;if(void 0!==c.error||!c.success)return o;if(0===i.length)return o;const d=i.filter((e=>e.address)).map((e=>e.address));return 0===d.length?o:await Mo(e,t,a,n,r,d,s)})(e,a,c,t,i,s.swap,n)),d.push(Xo(e,a,c)),d.push((async(e,t,n,a,r,i,s,o,c)=>{if(!a)return[];const d=i.get(xs(e)),u=i.get(Fs(e));if(!d)return[];if(void 0!==d.error||!d.success)return[];if(!u)return[];if(void 0!==u.error||!u.success)return[];const f=(s?.bridge??[]).map((e=>void 0===e.address?xo:e.address)),l=s?.swap??[];return a.type!==Ts.NATIVE&&a.type!==Ts.ERC20?[]:await Ko(e,t,n,a,r,o,i,f,l,c)})(e,r,a,c,t,i,s,o,n));const u=await js(e,"Time to resolve all routes",Promise.all(d));let f,l,p=[],h=[];if(u.forEach(((e,t)=>{0===t&&(f=e),1===t&&(p=e),2===t&&(l=e),3===t&&(h=e)})),!f&&0===p.length&&!l&&0===h.length)return{type:Rs.NO_ROUTES_FOUND,message:"Smart Checkout did not find any funding routes to fulfill the transaction"};const m={type:Rs.ROUTES_FOUND,fundingRoutes:[]};let b=0;return p.length>0&&(b++,p.forEach((e=>{m.fundingRoutes.push({priority:b,steps:[e]})}))),f&&(b++,m.fundingRoutes.push({priority:b,steps:[f]})),l&&(b++,m.fundingRoutes.push({priority:b,steps:[l]})),h&&(b++,h.forEach((e=>{const t=e.bridgeFundingStep,n=e.swapFundingStep;m.fundingRoutes.push({priority:b,steps:[t,n]})}))),m},Jo=async(e,t,n,a)=>{const r=await t.getSigner().getAddress();let i=oo(n);const s=(async(e,t,n)=>{let a=!0;const r=[],i=new Map,s=new Map,o=new Map,c=new Map;for(const a of n){if(a.type!==Ts.ERC20)continue;const{contractAddress:n,spenderAddress:r}=a,o=`${n}${r}`;i.set(o,a),s.set(o,co(e,t,n,r))}const d=await Promise.all(s.values()),u=Array.from(s.keys());for(let n=0;n<d.length;n++){const s=i.get(u[n]);if(!s||s.type!==Ts.ERC20)continue;if(d[n].gte(s.amount)){r.push({sufficient:!0,itemRequirement:s});continue}a=!1;const{contractAddress:f,spenderAddress:l}=s,p=`${f}${l}`,h=s.amount.sub(d[n]);o.set(p,{type:Ts.ERC20,sufficient:!1,delta:h,itemRequirement:s,approvalTransaction:void 0}),c.set(p,uo(e,t,f,l,h))}const f=await Promise.all(c.values()),l=Array.from(c.keys());return f.forEach(((e,t)=>{const n=o.get(l[t]);n&&(n.sufficient||(n.approvalTransaction=e))})),{sufficient:a,allowances:r.concat(Array.from(o.values()))}})(t,r,i),o=mo(t,r,i),c=await js(e,"Time to calculate token allowances",Promise.all([s,o])),d=((e,t)=>{const n=[];if(!e.sufficient)for(const t of e.allowances)t.sufficient||n.push(t);if(!t.sufficient)for(const e of t.allowances)e.sufficient||n.push(e);return n})(c[0],c[1]),u=await js(e,"Time to run gas calculator",To(t,d,a));null!==u&&(i.push(u),i=oo(i));const f=await js(e,"Time to run balance checks",go(e,t,r,i)),{sufficient:l}=f,p=f.balanceRequirements;if(l)return{sufficient:l,transactionRequirements:p};const h=await js(e,"Time to fetch available routing options",(async(e,t)=>{const n={onRamp:e.isOnRampEnabled,swap:e.isSwapEnabled,bridge:e.isBridgeEnabled},a=[];if(n.onRamp&&a.push({id:"onRamp",promise:vo()}),n.swap&&a.push({id:"swap",promise:Ro(e)}),a.length>0){const e=a.map((e=>e.promise));(await Promise.allSettled(e)).forEach(((e,t)=>{const r=a[t].id;n[r]=n[r]&&"fulfilled"===e.status&&e.value}))}return n.bridge=n.bridge&&!(e=>!0===e.provider?.isPassport??!1)(t),n})(e,t));return{sufficient:l,transactionRequirements:p,router:{availableRoutingOptions:h,routingOutcome:await js(e,"Total time to run the routing calculator",Zo(e,r,f,h))}}};var Yo;!function(e){e.SUCCESS="SUCCESS",e.FAILED="FAILED"}(Yo||(Yo={}));const Qo=async(e,t)=>{let n=[];try{const a=await Promise.all(t.map((t=>e.getSigner().sendTransaction(t))));n=await Promise.all(a.map((e=>e.wait())))}catch(e){throw new Ns("An error occurred while executing the approval transaction",Cs.EXECUTE_APPROVAL_TRANSACTION_ERROR,{message:e.message})}for(const e of n)if(0===e.status)return{type:Yo.FAILED,transactionHash:e.transactionHash,reason:"Approval transaction failed and was reverted"};return{type:Yo.SUCCESS}},ec=async(e,t)=>{let n=[];try{const a=await Promise.all(t.map((t=>e.getSigner().sendTransaction(t))));n=await Promise.all(a.map((e=>e.wait())))}catch(e){throw new Ns("An error occurred while executing the fulfillment transaction",Cs.EXECUTE_FULFILLMENT_TRANSACTION_ERROR,{message:e.message})}for(const e of n)if(0===e.status)return{type:Yo.FAILED,transactionHash:e.transactionHash,reason:"Fulfillment transaction failed and was reverted"};return{type:Yo.SUCCESS}},tc=async e=>{let t=[];const n=[];for(const t of e)t.type===Ur.TRANSACTION&&t.purpose===xr.FULFILL_ORDER&&n.push(t.buildTransaction());return t=await Promise.all(n),t},nc=(e,t)=>{const n=e.amount,a=Math.round(n.percentageDecimal*10**6);return t.mul(s.from(a)).div(10**6)},ac=(e,t)=>{const n=e.amount;return r.parseUnits(n.token,t)},rc=(e,t,n=18)=>{let a=s.from(0);const r=s.from(t),i=r.mul(1e6).div(10**6),o=[];for(const t of e){let e=s.from(0);if(Object.hasOwn(t.amount,"percentageDecimal"))e=nc(t,r),a=a.add(e);else{if(!Object.hasOwn(t.amount,"token"))throw new Ns("Unknown fee type parsed, must be percentageDecimal or token",Cs.ORDER_FEE_ERROR);e=ac(t,n),a=a.add(e)}if(a.gt(i))throw new Ns("The combined fees are above the allowed maximum of 100%",Cs.ORDER_FEE_ERROR);e.gt(0)&&o.push({amount:e.toString(),recipient:t.recipient})}return o},ic=(e,t,n,a)=>{switch(e){case Ts.ERC20:return{type:e,amount:n,contractAddress:t,spenderAddress:a};case Ts.NATIVE:default:return{type:Ts.NATIVE,amount:n}}},sc=async(e,t,n)=>{if(0===n.length)throw new Ns("No orders were provided to the orders array. Please provide at least one order.",Cs.FULFILL_ORDER_LISTING_ERROR);let a,r="",i=18;const o=ei,c=to(e),d=no(e),u=await js(e,"Time to get the address from the provider",t.getSigner().getAddress());zs.clear(),Ws(e,t,u,xs(e)),Ws(e,t,u,Fs(e));const{id:f,takerFees:l}=n[0];let p;try{a=await js(e,"Time to fetch the listing from the orderbook",c.getListing(f));const{seaportContractAddress:t,chainName:n}=c.config();p=n,r=t}catch(e){throw new Ns("An error occurred while getting the order listing",Cs.GET_ORDER_LISTING_ERROR,{orderId:f,message:e.message})}if(0===a.result.buy.length)throw new Ns("An error occurred with the get order listing",Cs.GET_ORDER_LISTING_ERROR,{orderId:f,message:"No buy side tokens found on order"});const h=a.result.buy[0];if("ERC20"===h.type){const t=await js(e,"Time to get decimals of token contract for the buy token",d.getToken({contractAddress:h.contractAddress,chainName:p}));t.result.decimals&&(i=t.result.decimals)}let m=[];l&&l.length>0&&(m=rc(l,h.amount,i));let b=[],y=[],g=[];const E=performance.now();try{const{actions:t}=await js(e,"Time to call fulfillOrder from the orderbook",c.fulfillOrder(f,u,m));g=t,b=await js(e,"Time to construct the unsigned approval transactions",(async e=>{let t=[];const n=[];for(const t of e)t.type===Ur.TRANSACTION&&t.purpose===xr.APPROVAL&&n.push(t.buildTransaction());return t=await Promise.all(n),t})(t))}catch(t){const n=(performance.now()-E)/1e3;if(qs(e,"Time to call fulfillOrder from the orderbook",n),t.message.includes(Pr.EXPIRED))throw new Ns("Order is expired",Cs.ORDER_EXPIRED_ERROR,{orderId:f});if(!t.message.includes("The fulfiller does not have the balances needed to fulfill"))throw new Ns("Error occurred while trying to fulfill the order",Cs.FULFILL_ORDER_LISTING_ERROR,{orderId:f,message:t.message})}try{y=await js(e,"Time to construct the unsigned fulfillment transactions",tc(g))}catch{}let T=s.from("0"),w=Ts.NATIVE,v="";const R=a.result.buy;if(R.length>0)switch(R[0].type){case"NATIVE":w=Ts.NATIVE;break;case"ERC20":w=Ts.ERC20,v=R[0].contractAddress;break;default:throw new Ns("Purchasing token type is unsupported",Cs.UNSUPPORTED_TOKEN_TYPE_ERROR,{orderId:f})}R.forEach((e=>{e.type!==Ts.ERC721&&(T=T.add(s.from(e.amount)))}));a.result.fees.forEach((e=>{T=T.add(s.from(e.amount))}));const A=[ic(w,v,T,r)],_=await js(e,"Total time running smart checkout",Jo(e,t,A,((e,t)=>t.length>0?{type:ws.TRANSACTION,transaction:t[0]}:{type:ws.GAS,gasToken:{type:vs.NATIVE,limit:s.from(e)}})(o,y)));if(_.sufficient){const e=await Qo(t,b);if(e.type===Yo.FAILED)return{status:Es.FAILED,transactionHash:e.transactionHash,reason:e.reason,smartCheckoutResult:_};try{0===y.length&&(y=await tc(g))}catch(e){throw new Ns("Error fetching fulfillment transaction",Cs.FULFILL_ORDER_LISTING_ERROR,{message:e.message})}const n=await ec(t,y);return n.type===Yo.FAILED?{status:Es.FAILED,transactionHash:n.transactionHash,reason:n.reason,smartCheckoutResult:_}:{status:Es.SUCCESS,smartCheckoutResult:_}}return{status:Es.INSUFFICIENT_FUNDS,smartCheckoutResult:_}},oc=(e,t,n)=>({type:Ts.ERC721,id:e,contractAddress:t,spenderAddress:n}),cc=async(e,t,n)=>{let a,o,c="";if(0===n.length)throw new Ns("No orders were provided to the orders array. Please provide at least one order.",Cs.PREPARE_ORDER_LISTING_ERROR);const{buyToken:d,sellToken:u,makerFees:f}=n[0];let l=18;if(d.type===Ts.ERC20){const n=new i(d.contractAddress,JSON.stringify(ys),t);l=await js(e,"Time to get decimals of token contract for the buy token",n.decimals())}const p=((e,t=18)=>{const n=r.parseUnits(e.amount,t);return e.type===Ts.NATIVE?{type:Ts.NATIVE,amount:n.toString()}:{type:Ts.ERC20,amount:n.toString(),contractAddress:e.contractAddress}})(d,l);try{const n=await js(e,"Time to get the address from the provider",t.getSigner().getAddress());a=to(e);const{seaportContractAddress:r}=a.config();c=r,o=await js(e,"Time to prepare the listing from the orderbook",a.prepareListing({makerAddress:n,buy:p,sell:{type:Ts.ERC721,contractAddress:u.collectionAddress,tokenId:u.id}}))}catch(e){throw new Ns("An error occurred while preparing the listing",Cs.PREPARE_ORDER_LISTING_ERROR,{message:e.message,id:u.id,collectionAddress:u.collectionAddress})}const h=[oc(u.id,u.collectionAddress,c)],m=await js(e,"Total time running smart checkout",Jo(e,t,h,{type:ws.GAS,gasToken:{type:vs.NATIVE,limit:s.from(ei)}}));if(m.sufficient){const e=await(async e=>{let t=[],n=[];const a=[],r=[];for(const t of e)t.type===Ur.TRANSACTION&&(t.purpose===xr.APPROVAL&&a.push(t.buildTransaction()),t.purpose===xr.FULFILL_ORDER&&r.push(t.buildTransaction()));return t=await Promise.all(a),n=await Promise.all(r),{approvalTransactions:t,fulfillmentTransactions:n}})(o.actions),n=await Qo(t,e.approvalTransactions);if(n.type===Yo.FAILED)return{status:Es.FAILED,transactionHash:n.transactionHash,reason:n.reason,smartCheckoutResult:m};const r=((e,t,n)=>{let a;for(const e of n)e.type===Ur.SIGNABLE&&e.purpose===Fr.CREATE_LISTING&&(a={domain:e.message.domain,types:e.message.types,value:e.message.value});if(a)return{orderHash:e,orderComponents:t,unsignedMessage:a}})(o.orderHash,o.orderComponents,o.actions);if(!r)throw new Ns("The unsigned message is missing after preparing the listing",Cs.SIGN_MESSAGE_ERROR,{id:u.id,collectionAddress:u.collectionAddress});const i=await(async(e,t)=>{try{const n=await e.getSigner()._signTypedData(t.unsignedMessage.domain,t.unsignedMessage.types,t.unsignedMessage.value);return{orderComponents:t.orderComponents,orderHash:t.orderHash,signedMessage:n}}catch(e){throw new Ns("An error occurred while signing the message",Cs.SIGN_MESSAGE_ERROR,{message:e.message})}})(t,r);let s="";const c={orderComponents:i.orderComponents,orderHash:i.orderHash,orderSignature:i.signedMessage,makerFees:[]};if(void 0!==f){const e=rc(f,p.amount,l);if(e.length!==f.length)throw new Ns("One of the fees is too small, must be greater than 0.000001",Cs.CREATE_ORDER_LISTING_ERROR);c.makerFees=e}try{s=(await a.createListing(c)).result.id}catch(e){throw new Ns("An error occurred while creating the listing",Cs.CREATE_ORDER_LISTING_ERROR,{message:e.message,collectionId:u.id,collectionAddress:u.collectionAddress})}return{status:Es.SUCCESS,orderIds:[s],smartCheckoutResult:m}}return{status:Es.INSUFFICIENT_FUNDS,smartCheckoutResult:m}};class dc{config;constructor(e){this.config=e}async feeEstimate(){const e=await this.config.remote.getConfig("onramp");return e[Yi.TRANSAK]?.fees}async createWidgetUrl(e){return await this.getTransakWidgetUrl(e)}async getTransakWidgetUrl(e){let t=`${ls[this.config.environment]}?`;if(t+=`${`apiKey=${(await this.config.remote.getConfig("onramp"))[Yi.TRANSAK].publishableApiKey}`}&network=immutablezkevm&defaultPaymentMethod=credit_debit_card&disablePaymentMethods=sepa_bank_transfer,gbp_bank_transfer,pm_cash_app,pm_jwire,pm_paymaya,pm_bpi,pm_ubp,pm_grabpay,pm_shopeepay,pm_gcash,pm_pix,pm_astropay,pm_pse,inr_bank_transfer&productsAvailed=buy&exchangeScreenTitle=Buy&themeColor=0D0D0D`,e.isPassport&&e.email){t+=`&email=${encodeURIComponent(e.email)}&isAutoFillUserData=true&disableWalletAddressForm=true`}return e.tokenAmount&&e.tokenSymbol?t+=`&defaultCryptoAmount=${e.tokenAmount}&cryptoCurrencyCode=${e.tokenSymbol}`:t+="&defaultCryptoCurrency=IMX",e.walletAddress&&(t+=`&walletAddress=${e.walletAddress}`),t}}async function uc(e,t){const n=[];t.forEach((t=>{if(t.type===Ts.ERC20){const{contractAddress:o}=t;n.push((a=o,r=ys,s=e,new i(a,r,s)).decimals())}var a,r,s}));const a=await Promise.all(n),s=t.map(((e,t)=>e.type===Ts.NATIVE?{...e,amount:r.parseUnits(e.amount,18)}:e.type===Ts.ERC20?{...e,amount:r.parseUnits(e.amount,a[t])}:e));return s}const fc=()=>"0.31.2-alpha";function lc(e){if(void 0===window)throw new Error("missing window object: please run Checkout client side");if(void 0===document)throw new Error("missing document object: please run Checkout client side");const t="immutable-checkout-widgets-bundle",n=function(e){const t=fc();if(void 0===e||void 0===e.major)return t;if(!Number.isInteger(e.major)||e.major<0)return t;if(void 0!==e.minor&&e.minor<0)return t;if(void 0!==e.patch&&e.patch<0)return t;if(0===e.major&&void 0===e.minor)return t;if(0===e.major&&0===e.minor&&void 0===e.patch)return t;if(0===e.major&&void 0===e.minor&&void 0===e.patch)return t;if(0===e.major&&0===e.minor&&0===e.patch)return t;let n=e.major.toString();return void 0===e.minor||(Number.isInteger(e.minor)&&(n+=`.${e.minor.toString()}`),void 0===e.patch||(Number.isInteger(e.patch)&&(n+=`.${e.patch.toString()}`),void 0===e.prerelease||"alpha"!==e.prerelease||("alpha"===e.prerelease&&(n+=`-${e.prerelease}`),void 0===e.build||Number.isInteger(e.build)&&e.build>=0&&(n+=`.${e.build.toString()}`)))),n}(e),a=document.getElementById(t);if(a)return{loaded:!0,element:a};const r=document.createElement("script");let i=`https://cdn.jsdelivr.net/npm/@imtbl/sdk@${n}/dist/browser/checkout/widgets.js`;return r.setAttribute("id",t),r.setAttribute("data-version",n),r.setAttribute("src",i),document.head.appendChild(r),{loaded:!1,element:r}}const pc={baseConfig:{environment:N.SANDBOX},passport:void 0};class hc{readOnlyProviders;config;fiatRampService;availability;passport;constructor(e=pc){this.config=new Us(e),this.fiatRampService=new dc(this.config),this.readOnlyProviders=new Map,this.availability=wo(this.config.isDevelopment,this.config.isProduction),this.passport=e.passport}async widgets(e){const t=this,n=new Promise(((n,a)=>{try{lc(e.version).loaded&&"undefined"!=typeof ImmutableCheckoutWidgets?(console.warn("Checkout widgets script is already loaded"),n(new ImmutableCheckoutWidgets.WidgetsFactory(t,e.config))):function a(){"undefined"!=typeof ImmutableCheckoutWidgets?n(new ImmutableCheckoutWidgets.WidgetsFactory(t,e.config)):setTimeout(a,100)}()}catch(e){a(new Ns("Failed to load widgets script",Cs.WIDGETS_SCRIPT_LOAD_ERROR,{message:e.message}))}}));return n}async createProvider(e){return await Ks(e.walletProviderName,this.passport)}async checkIsWalletConnected(e){return async function(e){if(!e?.provider?.request)throw new Ns("Check wallet connection request failed",Cs.PROVIDER_REQUEST_FAILED_ERROR,{rpcMethod:ns.CHECK_CONNECTION});let t=[];try{t=await e.provider.request({method:ns.CHECK_CONNECTION,params:[]})}catch(e){throw new Ns("Check wallet connection request failed",Cs.PROVIDER_REQUEST_FAILED_ERROR,{rpcMethod:ns.CHECK_CONNECTION})}return{isConnected:t&&t.length>0,walletAddress:t[0]??""}}(await Zs(this.config,e.provider,{allowUnsupportedProvider:!0}))}async connect(e){const t=await Zs(this.config,e.provider,{allowUnsupportedProvider:!0});return await async function(e){if(!e||!e.provider?.request)throw new Ns("Incompatible provider",Cs.PROVIDER_REQUEST_MISSING_ERROR,{details:"Attempting to connect with an incompatible provider"});return await Os((async()=>{e.provider.request&&await e.provider.request({method:ns.CONNECT,params:[]})}),{type:Cs.USER_REJECTED_REQUEST_ERROR}),e}(t),{provider:t}}async switchNetwork(e){const t=await Zs(this.config,e.provider,{allowUnsupportedProvider:!0,allowMistmatchedChainId:!0});return await Ps(this.config,t,e.chainId)}async getBalance(e){const t=await Zs(this.config,e.provider);return e.contractAddress&&""!==e.contractAddress?await Hs(t,e.walletAddress,e.contractAddress):await $s(this.config,t,e.walletAddress)}async getAllBalances(e){const t=await Zs(this.config,e.provider);return Ws(this.config,t,e.walletAddress,e.chainId)}async getNetworkAllowList(e){return await Ms(this.config,e)}async getTokenAllowList(e){return await Bs(this.config,e)}async getWalletAllowList(e){return await async function(e){const t=[],n=e.exclude?.map((e=>e.walletProviderName))??[];let a=Object.values(rs);0!==n.length&&(a=a.filter((e=>!n.includes(e))));for(const e of a)t.push({walletProviderName:e});return{wallets:t}}(e)}async sendTransaction(e){const t=await Zs(this.config,e.provider);return await(async(e,t)=>{try{return{transactionResponse:await e.getSigner().sendTransaction(t)}}catch(e){if(e.code===n.errors.INSUFFICIENT_FUNDS)throw new Ns(e.message,Cs.INSUFFICIENT_FUNDS);if(e.code===n.errors.ACTION_REJECTED)throw new Ns(e.message,Cs.USER_REJECTED_REQUEST_ERROR);if(e.code===n.errors.UNPREDICTABLE_GAS_LIMIT)throw new Ns(e.message,Cs.UNPREDICTABLE_GAS_LIMIT);throw new Ns(e.message,Cs.TRANSACTION_FAILED)}})(t,e.transaction)}async getNetworkInfo(e){const t=await Zs(this.config,e.provider,{allowUnsupportedProvider:!0,allowMistmatchedChainId:!0});return await ks(this.config,t)}async buy(e){e.orders.length>1&&console.warn("This endpoint currently only processes the first order in the array.");const t=await Zs(this.config,e.provider);return await sc(this.config,t,e.orders)}async sell(e){e.orders.length>1&&console.warn("This endpoint currently only processes the first order in the array.");const t=await Zs(this.config,e.provider);return await cc(this.config,t,e.orders)}async cancel(e){console.warn("This endpoint currently only processes the first order in the array.");const t=await Zs(this.config,e.provider);return await(async(e,t,n)=>{let a;if(0===n.length)throw new Ns("No orderIds were provided to the orderIds array. Please provide at least one orderId.",Cs.CANCEL_ORDER_LISTING_ERROR);const r=n[0];try{const n=await js(e,"Time to get the address from the provider",t.getSigner().getAddress()),i=to(e),s=await js(e,"Time to get the cancel order from the orderbook",i.cancelOrdersOnChain([r],n));a=await s.cancellationAction.buildTransaction()}catch(e){throw new Ns("An error occurred while cancelling the order listing",Cs.CANCEL_ORDER_LISTING_ERROR,{orderId:r,message:e.message})}const i=await ec(t,[a]);return i.type===Yo.FAILED?{status:Es.FAILED,transactionHash:i.transactionHash,reason:i.reason}:{status:Es.SUCCESS}})(this.config,t,e.orderIds)}async smartCheckout(e){const t=await Zs(this.config,e.provider);let n=[];try{n=await uc(t,e.itemRequirements)}catch{throw new Ns("Failed to map item requirements",Cs.ITEM_REQUIREMENTS_ERROR)}return await Jo(this.config,t,n,e.transactionOrGasAmount)}static isWeb3Provider(e){return Xs(e)}async gasEstimate(e){return this.readOnlyProviders=await Ao(this.config,this.readOnlyProviders),await so(e,this.readOnlyProviders,this.config)}async createFiatRampUrl(e){let t,n,a="IMX";const r=await e.web3Provider.getSigner().getAddress(),i=e.web3Provider.provider?.isPassport||!1;if(i&&e.passport){const t=await e.passport.getUserInfo();n=t?.email}const s=await Bs(this.config,{type:ts.ONRAMP}),o=s.tokens?.find((t=>t.address?.toLowerCase()===e.tokenAddress?.toLowerCase()));return o&&(t=e.tokenAmount,a=o.symbol),await this.fiatRampService.createWidgetUrl({exchangeType:e.exchangeType,isPassport:i,walletAddress:r,tokenAmount:t,tokenSymbol:a,email:n})}async getExchangeFeeEstimate(){return await this.fiatRampService.feeEstimate()}async isSwapAvailable(){return this.availability.checkDexAvailability()}}export{$i as BridgeEventType,fs as CHECKOUT_API_BASE_URL,Zi as ChainId,Ji as ChainName,hc as Checkout,Us as CheckoutConfiguration,Cs as CheckoutErrorType,Es as CheckoutStatus,Vi as ConnectEventType,Ki as ConnectTargetLayer,_s as ExchangeType,As as FundingStepType,Qi as GasEstimateType,vs as GasTokenType,Ui as IMTBLWidgetEvents,Ts as ItemType,es as NetworkFilterTypes,zi as OnRampEventType,Hi as OrchestrationEventType,Bi as ProviderEventType,Rs as RoutingOutcomeType,ji as SaleEventType,qi as SwapEventType,ts as TokenFilterTypes,ws as TransactionOrGasType,Gi as WalletEventType,as as WalletFilterTypes,rs as WalletProviderName,Xi as WidgetTheme,Wi as WidgetType};