UNPKG

@leetswap/sdk-canto

Version:

🛠 An SDK for building applications on top of LeetSwap on Canto.

1 lines • 115 kB
"use strict";function f(f){return f&&"object"==typeof f&&"default"in f?f.default:f}Object.defineProperty(exports,"__esModule",{value:!0});var e,t,n,r,i,o,a,s,u,c,d,p,l,h,m,b,y,v,T,g,A,x,I,O,E,k,C,w,R=f(require("jsbi")),P=require("@ethersproject/bignumber"),N=f(require("tiny-invariant")),S=require("@ethersproject/address"),_=(f(require("tiny-warning")),f(require("big.js"))),q=f(require("decimal.js-light")),D=f(require("toformat")),B=require("@ethersproject/solidity"),L=require("@ethersproject/abi"),M=require("@ethersproject/signing-key"),F=require("eip-712"),U=require("@ethersproject/bytes"),j=require("@ethersproject/contracts"),H=f(require("isomorphic-unfetch"));(e=exports.ChainId||(exports.ChainId={}))[e.CANTO=7700]="CANTO",e[e.CANTO_AMBER=10001]="CANTO_AMBER",(t=exports.Rounding||(exports.Rounding={}))[t.ROUND_DOWN=0]="ROUND_DOWN",t[t.ROUND_HALF_UP=1]="ROUND_HALF_UP",t[t.ROUND_UP=2]="ROUND_UP",(n=exports.TradeType||(exports.TradeType={}))[n.EXACT_INPUT=0]="EXACT_INPUT",n[n.EXACT_OUTPUT=1]="EXACT_OUTPUT",(r=exports.KashiAction||(exports.KashiAction={}))[r.ADD_ASSET=1]="ADD_ASSET",r[r.REPAY=2]="REPAY",r[r.REMOVE_ASSET=3]="REMOVE_ASSET",r[r.REMOVE_COLLATERAL=4]="REMOVE_COLLATERAL",r[r.BORROW=5]="BORROW",r[r.GET_REPAY_SHARE=6]="GET_REPAY_SHARE",r[r.GET_REPAY_PART=7]="GET_REPAY_PART",r[r.ACCRUE=8]="ACCRUE",r[r.ADD_COLLATERAL=10]="ADD_COLLATERAL",r[r.UPDATE_EXCHANGE_RATE=11]="UPDATE_EXCHANGE_RATE",r[r.BENTO_DEPOSIT=20]="BENTO_DEPOSIT",r[r.BENTO_WITHDRAW=21]="BENTO_WITHDRAW",r[r.BENTO_TRANSFER=22]="BENTO_TRANSFER",r[r.BENTO_TRANSFER_MULTIPLE=23]="BENTO_TRANSFER_MULTIPLE",r[r.BENTO_SETAPPROVAL=24]="BENTO_SETAPPROVAL",r[r.CALL=30]="CALL",(i=exports.Fee||(exports.Fee={}))[i.DEFAULT=30]="DEFAULT",(o=exports.OrderStatus||(exports.OrderStatus={})).FILLED="FILLED",o.CANCELLED="CANCELLED",o.EXPIRED="EXPIRED",o.PENDING="PENDING";var W=((a={})[exports.ChainId.CANTO]="0x7b2B3C5308ab5b2a1d9a94d20D35CCDf61e05b72",a[exports.ChainId.CANTO_AMBER]="0xD0E6466293c6CdA8CaA96A57683909383c01411D",a),G=((s={})[exports.ChainId.CANTO]="0xBc2F884680c95A02cea099dA2F524b366d9028Ba",s[exports.ChainId.CANTO_AMBER]="0x36D564473bDb10E92e97D5908260C81Ba83C0f54",s),V=((u={})[exports.ChainId.CANTO]="0x1BB9cf4e63CD2DAb8741c334f525350AB2Ee2c96",u[exports.ChainId.CANTO_AMBER]="0xaa094cA3FBd19dCCcE91C79d1FffA28293B05f28",u),X=((c={})[exports.ChainId.CANTO]="0xD463786E7d54Fc570A92982157E15130e469dcD8",c[exports.ChainId.CANTO_AMBER]="0x72a1A3F85e775dbd82D737830190aCB338fd6D71",c),Y=((d={})[exports.ChainId.CANTO]="0x719288288C7a5390206FA7F4fD51baDFd5CbF28A",d[exports.ChainId.CANTO_AMBER]="0x89eb9eC41015074Ffa9353b99EDd6626c2810078",d),$=((p={})[exports.ChainId.CANTO]="0x5fA664f69c2A4A3ec94FaC3cBf7049BD9CA73129",p[exports.ChainId.CANTO_AMBER]="0x3d2cd929D1fC1dA68D2557AB85336C2740b1Ae81",p),K=((l={})[exports.ChainId.CANTO]="0x3A7B9D0ed49a90712da4E087b17eE4Ac1375a5D4",l[exports.ChainId.CANTO_AMBER]="0x5ee747274cDAc7F6CF5cD3aE2c53123BCEED59c4",l),z=((h={})[exports.ChainId.CANTO]="0xC41C680c60309d4646379eD62020c534eB67b6f4",h[exports.ChainId.CANTO_AMBER]="0xceb95423B86c1823deC2Cc6F877997DC9349C2F1",h),Z=((m={})[exports.ChainId.CANTO]="0x7D1d91E59D1DA60E3ECC5701a4bc669Ab182DaE8",m[exports.ChainId.CANTO_AMBER]="0x6b8A569B1bA6a172d2e8Dd244282a4b16b14CaEA",m),Q=((b={})[exports.ChainId.CANTO_AMBER]="0xEfbb25ec12EB1aAe98600c5614F9C4BCAff41F5d",b),J=((y={})[exports.ChainId.CANTO_AMBER]="0x045e3894e475e14Be14d1c23C1AaF1cB7E275c7d",y),ff={},ef=((v={})[exports.ChainId.CANTO]="0x826551890Dc65655a0Aceca109aB11AbDbD7a07B",v[exports.ChainId.CANTO_AMBER]="0x17F4FCF5b6E0A95D4eE331c8529041896A073F9b",v),tf=((T={})[exports.ChainId.CANTO]=ef[exports.ChainId.CANTO],T[exports.ChainId.CANTO_AMBER]=ef[exports.ChainId.CANTO_AMBER],T),nf=((g={})[exports.ChainId.CANTO]="",g[exports.ChainId.CANTO_AMBER]="",g),rf=((A={})[exports.ChainId.CANTO]="0xCfb86556760d03942EBf1ba88a9870e67D77b627",A[exports.ChainId.CANTO_AMBER]="0x32f1FBE59D771bdB7FB247FE97A635f50659202b",A),of=((x={})[exports.ChainId.CANTO]="0x637490E68AA50Ea810688a52D7464E10c25A77c1",x[exports.ChainId.CANTO_AMBER]="0xAF15A45d934a83b95daCFEbaACCaED8cF97e8200",x),af=((I={})[exports.ChainId.CANTO_AMBER]="0xEd019DA0a65feccB33e4842Cc01B9FD77320e114",I),sf=((O={})[exports.ChainId.CANTO]="0x5eB85d9D7dc2F2C70F4C13b4Ba9Ed21d65141037",O[exports.ChainId.CANTO_AMBER]="0xeE85373F26E5380Fbd71FB7295BD68fdd0818887",O),uf=((E={})[exports.ChainId.CANTO_AMBER]="0x2bccA90B7271820dE65267A1806C94548289878b",E),cf=((k={})[exports.ChainId.CANTO_AMBER]="0xcd4a723bc92E500081f6fA04D87722a62558a77A",k),df=((C={})[exports.ChainId.CANTO_AMBER]="0x9eFdA721Cfa24DA62c5011394F1dBC05C0FDBe83",C),pf=((w={})[exports.ChainId.CANTO_AMBER]="0x6D701f555d0C6C4df19c6FD4Cb846181871A958C",w),lf=P.BigNumber.from("700000000000000000"),hf=P.BigNumber.from("800000000000000000"),mf=P.BigNumber.from("1000000000000000000"),bf=P.BigNumber.from("1000000000000000000"),yf=bf.sub(hf),vf=P.BigNumber.from(317097920).mul(P.BigNumber.from(60)).mul(P.BigNumber.from(60)).mul(P.BigNumber.from(24)).mul(P.BigNumber.from(365)),Tf=P.BigNumber.from(79274480).mul(P.BigNumber.from(60)).mul(P.BigNumber.from(60)).mul(P.BigNumber.from(24)).mul(P.BigNumber.from(365)),gf=P.BigNumber.from(31709792e4).mul(P.BigNumber.from(60)).mul(P.BigNumber.from(60)).mul(P.BigNumber.from(24)).mul(P.BigNumber.from(365)),Af=P.BigNumber.from("28800000000000000000000000000000000000000"),xf=P.BigNumber.from("1000000000000000000"),If=P.BigNumber.from("10000"),Of=P.BigNumber.from("100000");function Ef(f,e,t,n,r,i,o){try{var a=f[i](o),s=a.value}catch(f){return void t(f)}a.done?e(s):Promise.resolve(s).then(n,r)}function kf(f){return function(){var e=this,t=arguments;return new Promise((function(n,r){var i=f.apply(e,t);function o(f){Ef(i,n,r,o,a,"next",f)}function a(f){Ef(i,n,r,o,a,"throw",f)}o(void 0)}))}}function Cf(f,e){for(var t=0;t<e.length;t++){var n=e[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(f,n.key,n)}}function wf(f,e,t){return e&&Cf(f.prototype,e),t&&Cf(f,t),f}function Rf(){return(Rf=Object.assign||function(f){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(f[n]=t[n])}return f}).apply(this,arguments)}function Pf(f,e){f.prototype=Object.create(e.prototype),f.prototype.constructor=f,Sf(f,e)}function Nf(f){return(Nf=Object.setPrototypeOf?Object.getPrototypeOf:function(f){return f.__proto__||Object.getPrototypeOf(f)})(f)}function Sf(f,e){return(Sf=Object.setPrototypeOf||function(f,e){return f.__proto__=e,f})(f,e)}function _f(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(f){return!1}}function qf(f,e,t){return(qf=_f()?Reflect.construct:function(f,e,t){var n=[null];n.push.apply(n,e);var r=new(Function.bind.apply(f,n));return t&&Sf(r,t.prototype),r}).apply(null,arguments)}function Df(f){var e="function"==typeof Map?new Map:void 0;return(Df=function(f){if(null===f||-1===Function.toString.call(f).indexOf("[native code]"))return f;if("function"!=typeof f)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(f))return e.get(f);e.set(f,t)}function t(){return qf(f,arguments,Nf(this).constructor)}return t.prototype=Object.create(f.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),Sf(t,f)})(f)}function Bf(f){if(void 0===f)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return f}function Lf(f,e){(null==e||e>f.length)&&(e=f.length);for(var t=0,n=new Array(e);t<e;t++)n[t]=f[t];return n}function Mf(f,e){var t="undefined"!=typeof Symbol&&f[Symbol.iterator]||f["@@iterator"];if(t)return(t=t.call(f)).next.bind(t);if(Array.isArray(f)||(t=function(f,e){if(f){if("string"==typeof f)return Lf(f,void 0);var t=Object.prototype.toString.call(f).slice(8,-1);return"Object"===t&&f.constructor&&(t=f.constructor.name),"Map"===t||"Set"===t?Array.from(f):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Lf(f,void 0):void 0}}(f))||e&&f&&"number"==typeof f.length){t&&(f=t);var n=0;return function(){return n>=f.length?{done:!0}:{done:!1,value:f[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var Ff=function(f,e,t,n){Number.isSafeInteger(f)||N(!1),e>=0&&e<255&&Number.isInteger(e)||N(!1),this.chainId=f,this.decimals=e,this.symbol=t,this.name=n},Uf=function(f){function e(){var e;return(e=f.apply(this,arguments)||this).isNative=!0,e.isToken=!1,e}return Pf(e,f),e}(Ff);function jf(f){try{return S.getAddress(f)}catch(f){N(!1)}}var Hf,Wf,Gf,Vf,Xf=function(f){function e(e,t,n,r,i){var o;return(o=f.call(this,e,n,r,i)||this).isNative=!1,o.isToken=!0,o.chainId=e,o.address=jf(t),o}Pf(e,f);var t=e.prototype;return t.equals=function(f){return f.isToken&&this.chainId===f.chainId&&this.address===f.address},t.sortsBefore=function(f){return this.chainId!==f.chainId&&N(!1),this.address===f.address&&N(!1),this.address.toLowerCase()<f.address.toLowerCase()},wf(e,[{key:"wrapped",get:function(){return this}}]),e}(Ff),Yf=((Hf={})[exports.ChainId.CANTO]=new Xf(exports.ChainId.CANTO,W[exports.ChainId.CANTO],18,"flexUSD","flexUSD"),Hf[exports.ChainId.CANTO_AMBER]=new Xf(exports.ChainId.CANTO_AMBER,W[exports.ChainId.CANTO_AMBER],18,"flexUSD","flexUSD"),Hf),$f=((Wf={})[exports.ChainId.CANTO]=new Xf(exports.ChainId.CANTO,ef[exports.ChainId.CANTO],18,"WCANTO","Wrapped BCH"),Wf[exports.ChainId.CANTO_AMBER]=new Xf(exports.ChainId.CANTO_AMBER,ef[exports.ChainId.CANTO_AMBER],18,"WCANTO","Wrapped BCH"),Wf),Kf=((Gf={})[exports.ChainId.CANTO]=$f[exports.ChainId.CANTO],Gf[exports.ChainId.CANTO_AMBER]=$f[exports.ChainId.CANTO_AMBER],Gf),zf=function(f){function e(e){return f.call(this,e,18,"CANTO","Canto")||this}return Pf(e,f),e.onChain=function(f){var t;return null!=(t=this._cache[f])?t:this._cache[f]=new e(f)},e.prototype.equals=function(f){return f.isNative&&f.chainId===this.chainId},wf(e,[{key:"wrapped",get:function(){var f=$f[this.chainId];return f||N(!1),f}}]),e}(Uf);zf._cache={};var Zf,Qf,Jf,fe=((Vf={})[exports.ChainId.CANTO]=zf.onChain(exports.ChainId.CANTO),Vf[exports.ChainId.CANTO_AMBER]=zf.onChain(exports.ChainId.CANTO_AMBER),Vf),ee=R.BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),te=R.BigInt(0),ne=R.BigInt(1),re=R.BigInt(2),ie=R.BigInt(3),oe=R.BigInt(5),ae=R.BigInt(10),se=R.BigInt(100),ue=R.BigInt(997),ce=R.BigInt(1e3),de=((Zf={})[exports.ChainId.CANTO]="0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f",Zf[exports.ChainId.CANTO_AMBER]="0xacca68b46e4aa677641d8d20d81c9f4b252af83de62ff9e2fb58a9b648ee3537",Zf),pe=R.BigInt(1e3);(Jf=exports.SolidityType||(exports.SolidityType={})).uint8="uint8",Jf.uint256="uint256";var le,he,me=((Qf={})[exports.SolidityType.uint8]=R.BigInt("0xff"),Qf[exports.SolidityType.uint256]=R.BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),Qf),be="https://9epjsvomc4.execute-api.us-east-1.amazonaws.com/dev",ye="setPrototypeOf"in Object,ve=function(f){function e(){var t;return(t=f.call(this)||this).isInsufficientReservesError=!0,t.name=t.constructor.name,ye&&Object.setPrototypeOf(Bf(t),(this instanceof e?this.constructor:void 0).prototype),t}return Pf(e,f),e}(Df(Error)),Te=function(f){function e(){var t;return(t=f.call(this)||this).isInsufficientInputAmountError=!0,t.name=t.constructor.name,ye&&Object.setPrototypeOf(Bf(t),(this instanceof e?this.constructor:void 0).prototype),t}return Pf(e,f),e}(Df(Error)),ge=D(q),Ae=D(_);Ae.strict=!0;var xe=((le={})[exports.Rounding.ROUND_DOWN]=ge.ROUND_DOWN,le[exports.Rounding.ROUND_HALF_UP]=ge.ROUND_HALF_UP,le[exports.Rounding.ROUND_UP]=ge.ROUND_UP,le),Ie=((he={})[exports.Rounding.ROUND_DOWN]=0,he[exports.Rounding.ROUND_HALF_UP]=1,he[exports.Rounding.ROUND_UP]=3,he),Oe=function(){function f(f,e){void 0===e&&(e=R.BigInt(1)),this.numerator=R.BigInt(f),this.denominator=R.BigInt(e)}f.tryParseFraction=function(e){if(e instanceof R||"number"==typeof e||"string"==typeof e)return new f(e);if("numerator"in e&&"denominator"in e)return e;throw new Error("Could not parse fraction")};var e=f.prototype;return e.invert=function(){return new f(this.denominator,this.numerator)},e.add=function(e){var t=f.tryParseFraction(e);return R.equal(this.denominator,t.denominator)?new f(R.add(this.numerator,t.numerator),this.denominator):new f(R.add(R.multiply(this.numerator,t.denominator),R.multiply(t.numerator,this.denominator)),R.multiply(this.denominator,t.denominator))},e.subtract=function(e){var t=f.tryParseFraction(e);return R.equal(this.denominator,t.denominator)?new f(R.subtract(this.numerator,t.numerator),this.denominator):new f(R.subtract(R.multiply(this.numerator,t.denominator),R.multiply(t.numerator,this.denominator)),R.multiply(this.denominator,t.denominator))},e.lessThan=function(e){var t=f.tryParseFraction(e);return R.lessThan(R.multiply(this.numerator,t.denominator),R.multiply(t.numerator,this.denominator))},e.equalTo=function(e){var t=f.tryParseFraction(e);return R.equal(R.multiply(this.numerator,t.denominator),R.multiply(t.numerator,this.denominator))},e.greaterThan=function(e){var t=f.tryParseFraction(e);return R.greaterThan(R.multiply(this.numerator,t.denominator),R.multiply(t.numerator,this.denominator))},e.multiply=function(e){var t=f.tryParseFraction(e);return new f(R.multiply(this.numerator,t.numerator),R.multiply(this.denominator,t.denominator))},e.divide=function(e){var t=f.tryParseFraction(e);return new f(R.multiply(this.numerator,t.denominator),R.multiply(this.denominator,t.numerator))},e.toSignificant=function(f,e,t){void 0===e&&(e={groupSeparator:""}),void 0===t&&(t=exports.Rounding.ROUND_HALF_UP),Number.isInteger(f)||N(!1),f>0||N(!1),ge.set({precision:f+1,rounding:xe[t]});var n=new ge(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(f);return n.toFormat(n.decimalPlaces(),e)},e.toFixed=function(f,e,t){return void 0===e&&(e={groupSeparator:""}),void 0===t&&(t=exports.Rounding.ROUND_HALF_UP),Number.isInteger(f)||N(!1),f>=0||N(!1),Ae.DP=f,Ae.RM=Ie[t],new Ae(this.numerator.toString()).div(this.denominator.toString()).toFormat(f,e)},wf(f,[{key:"quotient",get:function(){return R.divide(this.numerator,this.denominator)}},{key:"remainder",get:function(){return new f(R.remainder(this.numerator,this.denominator),this.denominator)}},{key:"asFraction",get:function(){return new f(this.numerator,this.denominator)}}]),f}(),Ee=D(_);Ee.strict=!0;var ke=function(f){function e(e,t,n){var r;return r=f.call(this,t,n)||this,R.lessThanOrEqual(r.quotient,ee)||N(!1),r.currency=e,r.decimalScale=R.exponentiate(R.BigInt(10),R.BigInt(e.decimals)),r}Pf(e,f),e.fromRawAmount=function(f,t){return new e(f,t)},e.fromFractionalAmount=function(f,t,n){return new e(f,t,n)};var t=e.prototype;return t.add=function(t){this.currency.equals(t.currency)||N(!1);var n=f.prototype.add.call(this,t);return e.fromFractionalAmount(this.currency,n.numerator,n.denominator)},t.subtract=function(t){this.currency.equals(t.currency)||N(!1);var n=f.prototype.subtract.call(this,t);return e.fromFractionalAmount(this.currency,n.numerator,n.denominator)},t.multiply=function(t){var n=f.prototype.multiply.call(this,t);return e.fromFractionalAmount(this.currency,n.numerator,n.denominator)},t.divide=function(t){var n=f.prototype.divide.call(this,t);return e.fromFractionalAmount(this.currency,n.numerator,n.denominator)},t.toSignificant=function(e,t,n){return void 0===e&&(e=6),void 0===n&&(n=exports.Rounding.ROUND_DOWN),f.prototype.divide.call(this,this.decimalScale).toSignificant(e,t,n)},t.toFixed=function(e,t,n){return void 0===e&&(e=this.currency.decimals),void 0===n&&(n=exports.Rounding.ROUND_DOWN),e<=this.currency.decimals||N(!1),f.prototype.divide.call(this,this.decimalScale).toFixed(e,t,n)},t.toExact=function(f){return void 0===f&&(f={groupSeparator:""}),Ee.DP=this.currency.decimals,new Ee(this.quotient.toString()).div(this.decimalScale.toString()).toFormat(f)},wf(e,[{key:"wrapped",get:function(){return this.currency.isToken?this:e.fromFractionalAmount(this.currency.wrapped,this.numerator,this.denominator)}}]),e}(Oe),Ce=function(f){function e(){for(var e,t,n,r,i,o=arguments.length,a=new Array(o),s=0;s<o;s++)a[s]=arguments[s];if(4===a.length)t=a[0],n=a[1],r=a[2],i=a[3];else{var u=a[0].quoteAmount.divide(a[0].baseAmount),c=[a[0].baseAmount.currency,a[0].quoteAmount.currency,u.denominator,u.numerator];t=c[0],n=c[1],r=c[2],i=c[3]}return(e=f.call(this,i,r)||this).baseCurrency=t,e.quoteCurrency=n,e.scalar=new Oe(R.exponentiate(R.BigInt(10),R.BigInt(t.decimals)),R.exponentiate(R.BigInt(10),R.BigInt(n.decimals))),e}Pf(e,f);var t=e.prototype;return t.invert=function(){return new e(this.quoteCurrency,this.baseCurrency,this.numerator,this.denominator)},t.multiply=function(t){this.quoteCurrency.equals(t.baseCurrency)||N(!1);var n=f.prototype.multiply.call(this,t);return new e(this.baseCurrency,t.quoteCurrency,n.denominator,n.numerator)},t.quote=function(e){e.currency.equals(this.baseCurrency)||N(!1);var t=f.prototype.multiply.call(this,e);return ke.fromFractionalAmount(this.quoteCurrency,t.numerator,t.denominator)},t.toSignificant=function(f,e,t){return void 0===f&&(f=6),this.adjustedForDecimals.toSignificant(f,e,t)},t.toFixed=function(f,e,t){return void 0===f&&(f=4),this.adjustedForDecimals.toFixed(f,e,t)},wf(e,[{key:"adjustedForDecimals",get:function(){return f.prototype.multiply.call(this,this.scalar)}}]),e}(Oe),we=function(f){return B.keccak256(["bytes"],[B.pack(["bytes","bytes"],[f.creationCode,L.defaultAbiCoder.encode(["bytes","address"],[f.deployData,f.masterDeployerAddress])])])},Re=function(f){var e=f.factoryAddress,t=f.tokenA,n=f.tokenB,r=f.fee,i=f.twap,o=t.sortsBefore(n)?[t,n]:[n,t],a=L.defaultAbiCoder.encode(["address","address","uint256","bool"],[].concat([o[0].address,o[1].address].sort(),[r,i])),s=we({creationCode:"0x6101806040523480156200001257600080fd5b5060405162004195380380620041958339810160408190526200003591620005d2565b604080518082018252600e81526d29bab9b434902628102a37b5b2b760911b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527fc2bf45081e840722410522aa366600d7fe4da5bfb5a5b417f4d5125b4ed180a4918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a08301529060c0016040516020818303038152906040528051906020012060808181525050506000806000808580602001905181019062000132919062000572565b929650909450925090506001600160a01b038416620001875760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b60448201526064015b60405180910390fd5b826001600160a01b0316846001600160a01b03161415620001eb5760405162461bcd60e51b815260206004820152601360248201527f4944454e544943414c5f4144445245535345530000000000000000000000000060448201526064016200017e565b6001600160a01b038416301415620002365760405162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22faa27a5a2a760991b60448201526064016200017e565b6001600160a01b038316301415620002815760405162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22faa27a5a2a760991b60448201526064016200017e565b612710821115620002c85760405162461bcd60e51b815260206004820152601060248201526f494e56414c49445f535741505f46454560801b60448201526064016200017e565b60408051600481526024810182526020810180516001600160e01b03166360a56c0160e11b17905290516000916001600160a01b038816916200030c9190620006b9565b600060405180830381855afa9150503d806000811462000349576040519150601f19603f3d011682016040523d82523d6000602084013e6200034e565b606091505b5060408051600481526024810182526020810180516001600160e01b0316630605066960e11b1790529051919350600092506001600160a01b03891691620003979190620006b9565b600060405180830381855afa9150503d8060008114620003d4576040519150601f19603f3d011682016040523d82523d6000602084013e620003d9565b606091505b5060408051600481526024810182526020810180516001600160e01b0316634da3182760e01b1790529051919350600092506001600160a01b038a1691620004229190620006b9565b600060405180830381855afa9150503d80600081146200045f576040519150601f19603f3d011682016040523d82523d6000602084013e62000464565b606091505b506001600160601b031960608a811b82166101405289901b166101605260a087905261271087900360c0528451909250620004aa9150840160209081019085016200069f565b6004558151620004c490830160209081019084016200054b565b60601b6001600160601b03191660e0528051620004eb90602090830181019083016200054b565b6001600160601b0319606091821b8116610100529089901b1661012052600160095583156200052a57600880546001600160e01b0316600160e01b1790555b50505050505050505062000739565b8051620005468162000720565b919050565b6000602082840312156200055e57600080fd5b81516200056b8162000720565b9392505050565b600080600080608085870312156200058957600080fd5b8451620005968162000720565b6020860151909450620005a98162000720565b6040860151606087015191945092508015158114620005c757600080fd5b939692955090935050565b60008060408385031215620005e657600080fd5b82516001600160401b0380821115620005fe57600080fd5b818501915085601f8301126200061357600080fd5b8151818111156200062857620006286200070a565b604051601f8201601f19908116603f011681019083821181831017156200065357620006536200070a565b816040528281528860208487010111156200066d57600080fd5b62000680836020830160208801620006d7565b8096505050505050620006966020840162000539565b90509250929050565b600060208284031215620006b257600080fd5b5051919050565b60008251620006cd818460208701620006d7565b9190910192915050565b60005b83811015620006f4578181015183820152602001620006da565b8381111562000704576000848401525b50505050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200073657600080fd5b50565b60805160a05160c05160e05160601c6101005160601c6101205160601c6101405160601c6101605160601c61390062000895600039600081816105b301528181610791015281816108c00152818161096e01528181610ff6015281816110fe01528181611336015281816113a5015281816115e701528181611fc30152818161204a01526129e701526000818161032e0152818161070d01528181610a5301528181610b8201528181610fca01528181611095015281816112e2015281816114860152818161157901528181611d24015281816120830152818161216e01526128e801526000818161058c015281816118070152611c240152600081816103f901528181612650015281816127c6015281816128ac0152612a900152600081816102e20152612eb3015260006125520152600081816104200152818161315501526131c00152600081816103d2015261233901526139006000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c8063627dd56a1161012a578063a69840a8116100bd578063c14ad8021161008c578063d21220a711610071578063d21220a7146105ae578063d505accf146105d5578063dd62ed3e146105e857600080fd5b8063c14ad8021461057e578063cf58879a1461058757600080fd5b8063a69840a81461051e578063a8f1f52e14610545578063a9059cbb14610558578063af8c09bf1461056b57600080fd5b80637ba0e2e7116100f95780637ba0e2e7146104a55780637ecebe00146104b857806392bc3219146104d857806395d89b41146104e257600080fd5b8063627dd56a1461045457806367e4ac2c1461046757806370a082311461047c5780637464fc3d1461049c57600080fd5b80632a07b6c7116101a25780634da31827116101715780634da31827146103f457806354cf2aeb1461041b5780635909c0d5146104425780635a3d54931461044b57600080fd5b80632a07b6c71461036c57806330adf81f1461038c578063313ce567146103b35780633644e515146103cd57600080fd5b80630c0a0cd2116101de5780630c0a0cd2146102dd5780630dfe16811461032957806318160ddd1461035057806323b872dd1461035957600080fd5b8063053da1c81461021057806306fdde03146102365780630902f1ac1461027f578063095ea7b3146102ba575b600080fd5b61022361021e366004613566565b610613565b6040519081526020015b60405180910390f35b6102726040518060400160405280600e81526020017f5375736869204c5020546f6b656e00000000000000000000000000000000000081525081565b60405161022d9190613716565b610287610c3e565b604080516dffffffffffffffffffffffffffff948516815293909216602084015263ffffffff169082015260600161022d565b6102cd6102c8366004613449565b610ca7565b604051901515815260200161022d565b6103047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022d565b6103047f000000000000000000000000000000000000000000000000000000000000000081565b61022360005481565b6102cd6103673660046134ae565b610d20565b61037f61037a366004613566565b610e6c565b60405161022d91906136b1565b6102237f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6103bb601281565b60405160ff909116815260200161022d565b6102237f000000000000000000000000000000000000000000000000000000000000000081565b6103047f000000000000000000000000000000000000000000000000000000000000000081565b6102237f000000000000000000000000000000000000000000000000000000000000000081565b61022360055481565b61022360065481565b610223610462366004613566565b6111e1565b61046f611557565b60405161022d9190613657565b61022361048a36600461327d565b60016020526000908152604090205481565b61022360075481565b6102236104b3366004613566565b611656565b6102236104c636600461327d565b60036020526000908152604090205481565b6104e0611bb2565b005b6102726040518060400160405280600381526020017f534c50000000000000000000000000000000000000000000000000000000000081525081565b6102237f54726964656e743a436f6e7374616e7450726f6475637400000000000000000081565b610223610553366004613566565b611cad565b6102cd610566366004613449565b611de0565b610223610579366004613566565b611e65565b61022360045481565b6103047f000000000000000000000000000000000000000000000000000000000000000081565b6103047f000000000000000000000000000000000000000000000000000000000000000081565b6104e06105e33660046134ef565b61220e565b6102236105f6366004613475565b600260209081526000928352604080842090915290825290205481565b6000600954600114610686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b4544000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600260095560008080808061069d87890189613305565b9450945094509450945060008060006107056008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b9250925092507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141561096c5761078a85846dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff1661254a565b98506107b87f00000000000000000000000000000000000000000000000000000000000000008a89896125ad565b6040517fbd50c7b1000000000000000000000000000000000000000000000000000000008152339063bd50c7b1906107f4908790600401613716565b600060405180830381600087803b15801561080e57600080fd5b505af1158015610822573d6000803e3d6000fd5b505050506000806108316128a5565b9150915086856dffffffffffffffffffffffffffff16830310156108b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414d4f554e545f494e00000000000000000000604482015260640161067d565b6108be8282878787612b1d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628a8f60405161095d929190918252602082015260400190565b60405180910390a45050610c2a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e56414c49445f494e5055545f544f4b454e00000000000000000000000000604482015260640161067d565b610a4c85836dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff1661254a565b9850610a7a7f00000000000000000000000000000000000000000000000000000000000000008a89896125ad565b6040517fbd50c7b1000000000000000000000000000000000000000000000000000000008152339063bd50c7b190610ab6908790600401613716565b600060405180830381600087803b158015610ad057600080fd5b505af1158015610ae4573d6000803e3d6000fd5b50505050600080610af36128a5565b9150915086846dffffffffffffffffffffffffffff1682031015610b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414d4f554e545f494e00000000000000000000604482015260640161067d565b610b808282878787612b1d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628a8f604051610c1f929190918252602082015260400190565b60405180910390a450505b505060016009555094979650505050505050565b6000806000610c9c6008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b925092509250909192565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d0f9086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610dbd5773ffffffffffffffffffffffffffffffffffffffff8416600090815260026020908152604080832033845290915281208054849290610db7908490613792565b90915550505b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604081208054849290610df2908490613792565b909155505073ffffffffffffffffffffffffffffffffffffffff808416600081815260016020526040908190208054860190555190918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e5a9086815260200190565b60405180910390a35060019392505050565b6060600954600114610eda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b45440000000000000000000000000000000000000000000000000000604482015260640161067d565b6002600955600080610eee84860186613414565b915091506000806000610f506008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b925092509250600080610f616128a5565b60008054308252600160205260409091205492945090925090610f85878784612e33565b90910190600082610f968684613755565b610fa09190613741565b9050600083610faf8685613755565b610fb99190613741565b9050610fc53084612ee2565b610ff17f0000000000000000000000000000000000000000000000000000000000000000838d8d6125ad565b61101d7f0000000000000000000000000000000000000000000000000000000000000000828d8d6125ad565b8186039550808503945061103486868b8b8b612b1d565b6110466110418688613755565b612f75565b6007556040805160028082526060820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161105f579050509b5060405180604001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001838152508c6000815181106110e6576110e6613847565b602002602001018190525060405180604001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001828152508c60018151811061114f5761114f613847565b60200260200101819052508a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d8193649684846040516111c2929190918252602082015260400190565b60405180910390a35050600160095550979a9950505050505050505050565b600060095460011461124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b45440000000000000000000000000000000000000000000000000000604482015260640161067d565b600260095560008080611264858701876132be565b92509250925060008060006112c86008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b9250925092506000806112d96128a5565b915091506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614156113a3577f00000000000000000000000000000000000000000000000000000000000000009050866dffffffffffffffffffffffffffff168403915061139782886dffffffffffffffffffffffffffff16886dffffffffffffffffffffffffffff1661254a565b9a508a830392506114bf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e56414c49445f494e5055545f544f4b454e00000000000000000000000000604482015260640161067d565b50506008546dffffffffffffffffffffffffffff6e01000000000000000000000000000090910481168203907f0000000000000000000000000000000000000000000000000000000000000000906114b7908390888116908a1661254a565b9a508a840393505b6114cb818c8b8b6125ad565b6114d88484898989612b1d565b8073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e46062858f604051610c1f929190918252602082015260400190565b60408051600280825260608083018452926020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106115ab576115ab613847565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061161957611619613847565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505090565b60006009546001146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b45440000000000000000000000000000000000000000000000000000604482015260640161067d565b600260095560006116d78385018561327d565b905060008060006117376008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b9250925092506000806117486128a5565b600054919350915061175b868683612e33565b0160006117786dffffffffffffffffffffffffffff881685613792565b905060006117966dffffffffffffffffffffffffffff881685613792565b90506000806117c784848c6dffffffffffffffffffffffffffff168c6dffffffffffffffffffffffffffff166130fa565b909250905060006117ef6117db8389613792565b6117e5858b613792565b6110419190613755565b905085611a705761180360006103e86131fd565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637cd07e476040518163ffffffff1660e01b815260040160206040518083038186803b15801561186b57600080fd5b505afa15801561187f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a391906132a1565b90503373ffffffffffffffffffffffffffffffffffffffff821614156119dd578073ffffffffffffffffffffffffffffffffffffffff166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b15801561190957600080fd5b505afa15801561191d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194191906135d8565b9d508d1580159061197257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e14155b6119d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4241445f444553495245445f4c49515549444954590000000000000000000000604482015260640161067d565b611a6a565b73ffffffffffffffffffffffffffffffffffffffff811615611a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4f4e4c595f4d49475241544f5200000000000000000000000000000000000000604482015260640161067d565b611a676103e883613792565b9d505b50611ab8565b6000611a926110416dffffffffffffffffffffffffffff808e16908f16613755565b90508087611aa08285613792565b611aaa9190613755565b611ab49190613741565b9d50505b8c611b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f494e53554646494349454e545f4c49515549444954595f4d494e544544000000604482015260640161067d565b611b298c8e6131fd565b611b3688888d8d8d612b1d565b611b43611041888a613755565b600755604080518681526020810186905273ffffffffffffffffffffffffffffffffffffffff8e169133917fdbba30eb0402b389513e87f51f4db2db80bed454384ec6925a24097c3548a02a91015b60405180910390a35050600160095550989b9a5050505050505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc14ad80200000000000000000000000000000000000000000000000000000000179052905160009173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691611c4f919061363b565b600060405180830381855afa9150503d8060008114611c8a576040519150601f19603f3d011682016040523d82523d6000602084013e611c8f565b606091505b5091505080806020019051810190611ca791906135d8565b60045550565b60008080611cbd84860186613449565b91509150600080611d1d6008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b50915091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611da857611da183836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff1661254a565b9450611dd6565b611dd383826dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff1661254a565b94505b5050505092915050565b33600090815260016020526040812080548391908390611e01908490613792565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260016020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d0f9086815260200190565b6000600954600114611ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f4c4f434b45440000000000000000000000000000000000000000000000000000604482015260640161067d565b600260095560008080611ee8858701876132be565b9250925092506000806000611f4c6008546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b925092509250600080611f5d6128a5565b60008054308252600160205260409091205492945090925090611f81878784612e33565b90910190600082611f928684613755565b611f9c9190613741565b9050600083611fab8685613755565b611fb59190613741565b9050611fc13084612ee2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614156120815761204482838b6dffffffffffffffffffffffffffff1603838b6dffffffffffffffffffffffffffff160361254a565b016120717f0000000000000000000000000000000000000000000000000000000000000000828d8d6125ad565b9b5050918a90039160008b6121a1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f4f55545055545f544f4b454e000000000000000000000000604482015260640161067d565b61216581828a6dffffffffffffffffffffffffffff1603848c6dffffffffffffffffffffffffffff160361254a565b820191506121957f0000000000000000000000000000000000000000000000000000000000000000838d8d6125ad565b509a50928a9003928a60005b6121ae86868b8b8b612b1d565b6121bb6110418688613755565b600755604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff8d169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364969101611b92565b42841015612278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f45585049524544000000000000000000604482015260640161067d565b73ffffffffffffffffffffffffffffffffffffffff878116600081815260036020908152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e0840190945283519301929092207f19010000000000000000000000000000000000000000000000000000000000006101008301527f000000000000000000000000000000000000000000000000000000000000000061010283015261012282015261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156123f1573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061246c57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6124d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f494e56414c49445f5045524d49545f5349474e41545552450000000000000000604482015260640161067d565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526002602090815260408083208b8516808552908352928190208a905551898152919350918a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6000806125777f000000000000000000000000000000000000000000000000000000000000000086613755565b90508061258661271086613755565b6125909190613729565b61259a8483613755565b6125a49190613741565b95945050505050565b801561272f576040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152306044830152848116606483015260006084830181905260a48084018890528451808503909101815260c490930184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f97da6d300000000000000000000000000000000000000000000000000000000017905292517f00000000000000000000000000000000000000000000000000000000000000009091169161267c9161363b565b6000604051808303816000865af19150503d80600081146126b9576040519150601f19603f3d011682016040523d82523d6000602084013e6126be565b606091505b5050905080612729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f57495448445241575f4641494c45440000000000000000000000000000000000604482015260640161067d565b5061289f565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152306044830152848116606483015260848083018790528351808403909101815260a490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff18d03cc0000000000000000000000000000000000000000000000000000000017905291516000927f000000000000000000000000000000000000000000000000000000000000000016916127f09161363b565b6000604051808303816000865af19150503d806000811461282d576040519150601f19603f3d011682016040523d82523d6000602084013e612832565b606091505b505090508061289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640161067d565b505b50505050565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f7888aec7f00000000000000000000000000000000000000000000000000000000000000003060405160240161293b92919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612989919061363b565b600060405180830381855afa9150503d80600081146129c4576040519150601f19603f3d011682016040523d82523d6000602084013e6129c9565b606091505b50915050808060200190518101906129e191906135d8565b604080517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811660248301523060448084019190915283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff7888aec0000000000000000000000000000000000000000000000000000000017905291519295506000927f000000000000000000000000000000000000000000000000000000000000000090921691612abd919061363b565b600060405180830381855afa9150503d8060008114612af8576040519150601f19603f3d011682016040523d82523d6000602084013e612afd565b606091505b5091505080806020019051810190612b1591906135d8565b925050509091565b6dffffffffffffffffffffffffffff8511801590612b4957506dffffffffffffffffffffffffffff8411155b612baf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015260640161067d565b6008547c0100000000000000000000000000000000000000000000000000000000900463ffffffff16612c3357600880546dffffffffffffffffffffffffffff8681166e010000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090921690881617179055612df3565b6000612c44640100000000426137d5565b90508163ffffffff168163ffffffff1614158015612c7157506dffffffffffffffffffffffffffff841615155b8015612c8c57506dffffffffffffffffffffffffffff831615155b15612d515781810360006dffffffffffffffffffffffffffff86167bffffffffffffffffffffffffffff0000000000000000000000000000607087901b1681612cd757612cd7613818565b600580549290910463ffffffff851681029092019055905060006dffffffffffffffffffffffffffff8616607088901b7bffffffffffffffffffffffffffff00000000000000000000000000001681612d3257612d32613818565b0490508263ffffffff1681026006600082825401925050819055505050505b6008805463ffffffff9092167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff8881166e010000000000000000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909516908a161793909317929092169190911790555b60408051868152602081018690527fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a910160405180910390a15050505050565b6007546000908015612eda576000612e616110416dffffffffffffffffffffffffffff808816908916613755565b905081811115612ed857612710816004548484612e7e9190613792565b612e889088613755565b612e929190613755565b612e9c9190613741565b612ea69190613741565b92508215612ed857612ed87f0000000000000000000000000000000000000000000000000000000000000000846131fd565b505b509392505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081208054839290612f17908490613792565b909155505060008054829003815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600081612f8457506000919050565b8160017001000000000000000000000000000000008210612faa5760809190911c9060401b5b680100000000000000008210612fc55760409190911c9060201b5b6401000000008210612fdc5760209190911c9060101b5b620100008210612ff15760109190911c9060081b5b61010082106130055760089190911c9060041b5b601082106130185760049190911c9060021b5b600882106130245760011b5b600181858161303557613035613818565b048201901c9050600181858161304d5761304d613818565b048201901c9050600181858161306557613065613818565b048201901c9050600181858161307d5761307d613818565b048201901c9050600181858161309557613095613818565b048201901c905060018185816130ad576130ad613818565b048201901c905060018185816130c5576130c5613818565b048201901c905060008185816130dd576130dd613818565b0490508082106130ed57806130ef565b815b93505050505b919050565b600080831580613108575082155b15613118575060009050806131f4565b6000846131258589613755565b61312f9190613741565b905085811161318a576131456127106002613755565b61314f8288613792565b613179907f0000000000000000000000000000000000000000000000000000000000000000613755565b6131839190613741565b91506131f2565b6000846131978789613755565b6131a19190613741565b90506131b06127106002613755565b6131ba828a613792565b6131e4907f0000000000000000000000000000000000000000000000000000000000000000613755565b6131ee9190613741565b9350505b505b94509492505050565b8060008082825461320e9190613729565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612f69565b803580151581146130f557600080fd5b60006020828403121561328f57600080fd5b813561329a816138a5565b9392505050565b6000602082840312156132b357600080fd5b815161329a816138a5565b6000806000606084860312156132d357600080fd5b83356132de816138a5565b925060208401356132ee816138a5565b91506132fc6040850161326d565b90509250925092565b600080600080600060a0868803121561331d57600080fd5b8535613328816138a5565b94506020860135613338816138a5565b93506133466040870161326d565b925060608601359150608086013567ffffffffffffffff8082111561336a57600080fd5b818801915088601f83011261337e57600080fd5b81358181111561339057613390613876565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156133d6576133d6613876565b816040528281528b60208487010111156133ef57600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b6000806040838503121561342757600080fd5b8235613432816138a5565b91506134406020840161326d565b90509250929050565b6000806040838503121561345c57600080fd5b8235613467816138a5565b946020939093013593505050565b6000806040838503121561348857600080fd5b8235613493816138a5565b915060208301356134a3816138a5565b809150509250929050565b6000806000606084860312156134c357600080fd5b83356134ce816138a5565b925060208401356134de816138a5565b929592945050506040919091013590565b600080600080600080600060e0888a03121561350a57600080fd5b8735613515816138a5565b96506020880135613525816138a5565b95506040880135945060608801359350608088013560ff8116811461354957600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806020838503121561357957600080fd5b823567ffffffffffffffff8082111561359157600080fd5b818501915085601f8301126135a557600080fd5b8135818111156135b457600080fd5b8660208285010111156135c657600080fd5b60209290920196919550909350505050565b6000602