0 txs
545 calls
constructor
constructor()
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
arHardBound
viewfunction arHardBound() view returns (uint256 lower, uint256 upper)
arSoftBound
viewfunction arSoftBound() view returns (uint256 lower, uint256 upper)
assetRatio
viewfunction assetRatio(tuple s) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
computeMintAmt
viewfunction computeMintAmt(uint256 usdAmtMax, uint256 perpAmtMax) view returns (uint256 mintAmt, uint256 usdAmtIn, uint256 perpAmtIn, bool isFirstMint)
computeMintAmtWithPerp
viewfunction computeMintAmtWithPerp(uint256 perpAmtIn, tuple s) view returns (uint256)
computeMintAmtWithUSD
viewfunction computeMintAmtWithUSD(uint256 usdAmtIn, tuple s) view returns (uint256)
computePerpToUSDSwapAmt
viewfunction computePerpToUSDSwapAmt(uint256 perpAmtIn, tuple s) view returns (uint256 usdAmtOut, uint256 lpFeeUsdAmt, uint256 protocolFeeUsdAmt)
computePerpToUSDSwapFeePerc
viewfunction computePerpToUSDSwapFeePerc(uint256 arPre, uint256 arPost) view returns (uint256)
computeRedemptionAmts
viewfunction computeRedemptionAmts(uint256 burnAmt) view returns (uint256 usdAmtOut, uint256 perpAmtOut)
computeUSDToPerpSwapAmt
viewfunction computeUSDToPerpSwapAmt(uint256 usdAmtIn, tuple s) view returns (uint256 perpAmtOut, uint256 lpFeePerpAmt, uint256 protocolFeePerpAmt)
computeUSDToPerpSwapFeePerc
viewfunction computeUSDToPerpSwapFeePerc(uint256 arPre, uint256 arPost) view returns (uint256)
DECIMALS
viewfunction DECIMALS() view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
fees
viewfunction fees() view returns (uint256 mintFeePerc, uint256 burnFeePerc, tuple perpToUSDSwapFeePercs, tuple usdToPerpSwapFeePercs, uint256 protocolSwapSharePerc)
keeper
viewfunction keeper() view returns (address)
MINIMUM_LIQUIDITY
viewfunction MINIMUM_LIQUIDITY() view returns (uint256)
name
viewfunction name() view returns (string)
ONE
viewfunction ONE() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
perp
viewfunction perp() view returns (address)
perpBalance
viewfunction perpBalance() view returns (uint256)
perpUnitAmt
viewfunction perpUnitAmt() view returns (uint256)
pricingStrategy
viewfunction pricingStrategy() view returns (address)
protocolFeeCollector
viewfunction protocolFeeCollector() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
usd
viewfunction usd() view returns (address)
usdBalance
viewfunction usdBalance() view returns (uint256)
usdUnitAmt
viewfunction usdUnitAmt() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
burn
nonpayablefunction burn(uint256 amount)
burnFrom
nonpayablefunction burnFrom(address account, uint256 amount)
computeMintAmtWithPerp
nonpayablefunction computeMintAmtWithPerp(uint256 perpAmtIn) returns (uint256 mintAmt)
computeMintAmtWithUSD
nonpayablefunction computeMintAmtWithUSD(uint256 usdAmtIn) returns (uint256 mintAmt)
computePerpToUSDSwapAmt
nonpayablefunction computePerpToUSDSwapAmt(uint256 perpAmtIn) returns (uint256 usdAmtOut)
computeUSDToPerpSwapAmt
nonpayablefunction computeUSDToPerpSwapAmt(uint256 usdAmtIn) returns (uint256 perpAmtOut)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
deposit
nonpayablefunction deposit(uint256 usdAmtMax, uint256 perpAmtMax, uint256 usdAmtMin, uint256 perpAmtMin) returns (uint256 mintAmt)
depositPerp
nonpayablefunction depositPerp(uint256 perpAmtIn, uint256 postOpAssetRatioMin) returns (uint256 mintAmt)
depositUSD
nonpayablefunction depositUSD(uint256 usdAmtIn, uint256 postOpAssetRatioMax) returns (uint256 mintAmt)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
init
nonpayablefunction init(string name, string symbol, address usd_, address perp_, address pricingStrategy_)
pause
nonpayablefunction pause()
perpPrice
nonpayablefunction perpPrice() returns (uint256)
redeem
nonpayablefunction redeem(uint256 burnAmt) returns (uint256 usdAmtOut, uint256 perpAmtOut)
renounceOwnership
nonpayablefunction renounceOwnership()
reserveState
nonpayablefunction reserveState() returns (tuple s)
swapPerpsForUSD
nonpayablefunction swapPerpsForUSD(uint256 perpAmtIn, uint256 usdAmtMin) returns (uint256 usdAmtOut)
swapUSDForPerps
nonpayablefunction swapUSDForPerps(uint256 usdAmtIn, uint256 perpAmtMin) returns (uint256 perpAmtOut)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateARBounds
nonpayablefunction updateARBounds(tuple arSoftBound_, tuple arHardBound_)
updateFees
nonpayablefunction updateFees(tuple fees_)
updateKeeper
nonpayablefunction updateKeeper(address keeper_)
updatePricingStrategy
nonpayablefunction updatePricingStrategy(address pricingStrategy_)
usdPrice
nonpayablefunction usdPrice() returns (uint256)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
DepositPerp
event DepositPerp(uint256 perpAmtIn, (uint256 usdBalance, uint256 perpBalance, uint256 usdPrice, uint256 perpPrice) preOpState)
DepositUSD
event DepositUSD(uint256 usdAmtIn, (uint256 usdBalance, uint256 perpBalance, uint256 usdPrice, uint256 perpPrice) preOpState)
Initialized
event Initialized(uint8 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
SwapPerpsForUSD
event SwapPerpsForUSD(uint256 perpAmtIn, (uint256 usdBalance, uint256 perpBalance, uint256 usdPrice, uint256 perpPrice) preOpState)
SwapUSDForPerps
event SwapUSDForPerps(uint256 usdAmtIn, (uint256 usdBalance, uint256 perpBalance, uint256 usdPrice, uint256 perpPrice) preOpState)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
errors
InvalidARBound
error InvalidARBound()
InvalidPerc
error InvalidPerc()
SlippageTooHigh
error SlippageTooHigh()
UnacceptableSwap
error UnacceptableSwap()
UnauthorizedCall
error UnauthorizedCall()
UnexpectedARDelta
error UnexpectedARDelta()
UnexpectedDecimals
error UnexpectedDecimals()
UnreliablePrice
error UnreliablePrice()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b613ccb80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80637271115f116101f4578063a457c2d71161011a578063d47cdedb116100ad578063dd62ed3e1161007c578063dd62ed3e14610861578063eb5cef841461089a578063ef98f884146108ad578063f2fde38b146108c057600080fd5b8063d47cdedb1461081d578063d63a6ccd14610830578063d63ce93a14610844578063db006a751461084e57600080fd5b8063ba9a7a56116100e9578063ba9a7a56146107db578063bf964953146107ec578063bfa4c00c14610801578063c2ee3a081461081557600080fd5b8063a457c2d71461078e578063a9059cbb146107a1578063ab00f1a8146107b4578063aced1661146107c757600080fd5b80638456cb59116101925780638da5cb5b116101615780638da5cb5b146106de57806395d89b41146106ef57806397790217146106f75780639af1d35a1461070a57600080fd5b80638456cb59146106a8578063849310a2146106b0578063850a1501146106c357806388e81104146106cb57600080fd5b806378b99c24116101ce57806378b99c241461064357806378f3ae741461066f57806379cc6790146106825780637cea778c1461069557600080fd5b80637271115f1461060d57806372f0bc751461062057806374d337291461063057600080fd5b806333bce7f7116102d957806357c3ee83116102775780636619aa86116102465780636619aa86146105c1578063666c8c21146105c957806370a08231146105dc578063715018a61461060557600080fd5b806357c3ee831461057d5780635c975abb146105905780635d760d591461059b5780635ebe5ff5146105ae57600080fd5b80634007a035116102b35780634007a0351461053157806342966c6814610544578063486956ec146105575780634cdf3f4c1461056a57600080fd5b806333bce7f7146104df57806339509351146105145780633f4ba83a1461052757600080fd5b80630ae7a6031161035157806323b872dd1161032057806323b872dd146104a25780632505c3d9146104b55780632e0f2625146104c8578063313ce567146104d057600080fd5b80630ae7a6031461045c57806318160ddd146104645780631e9eae561461046c57806320991f301461049a57600080fd5b806307e773d71161038d57806307e773d7146104095780630845733114610413578063095ea7b314610426578063097eafa11461044957600080fd5b806302f64705146103b4578063048e1399146103de57806306fdde03146103f4575b600080fd5b61013a5461013b546103c4919082565b604080519283526020830191909152015b60405180910390f35b6103e66108d3565b6040519081526020016103d5565b6103fc610947565b6040516103d591906133aa565b6103e661012f5481565b6103e66104213660046133dd565b6109d9565b61043961043436600461340b565b6109f0565b60405190151581526020016103d5565b6103e6610457366004613437565b610a0a565b6103e6610b20565b6035546103e6565b61047f61047a3660046134d5565b610bc6565b604080519384526020840192909252908201526060016103d5565b6103e6610cd9565b6104396104b0366004613502565b610d0b565b6103e66104c3366004613543565b610d31565b6103e6601281565b604051601281526020016103d5565b6104f26104ed366004613437565b610e1b565b60408051948552602085019390935291830152151560608201526080016103d5565b61043961052236600461340b565b61103b565b61052f61107a565b005b6103e661053f366004613437565b6110b0565b61052f6105523660046133dd565b611175565b6103e66105653660046133dd565b611182565b61047f6105783660046134d5565b611190565b61052f61058b366004613575565b611200565b60c95460ff16610439565b6103e66105a93660046133dd565b6112b0565b6103e66105bc366004613437565b6112be565b6103e6611411565b6103e66105d73660046134d5565b61146b565b6103e66105ea366004613575565b6001600160a01b031660009081526033602052604090205490565b61052f611536565b6103e661061b366004613437565b611548565b61013c5461013d546103c4919082565b6103e661063e366004613437565b611602565b61013254610657906001600160a01b031681565b6040516001600160a01b0390911681526020016103d5565b61052f61067d36600461361f565b611704565b61052f61069036600461340b565b611a41565b61052f6106a336600461370c565b611a5a565b61052f611acf565b6103e66106be3660046133dd565b611b03565b610657611b11565b6103e66106d9366004613437565b611b25565b6097546001600160a01b0316610657565b6103fc611c60565b61052f610705366004613575565b611c6f565b61013354610134546040805180820182526101355481526101365460208083019190915282518084019093526101375483526101385490830152610139546107529493929085565b60408051958652602080870195909552835190860152918301516060850152805160808501529091015160a083015260c082015260e0016103d5565b61043961079c36600461340b565b611c9a565b6104396107af36600461340b565b611d37565b6103e66107c23660046134d5565b611d45565b61013154610657906001600160a01b031681565b6103e669021e19e0c9bab240000081565b6107f4611d74565b6040516103d59190613738565b61012d54610657906001600160a01b031681565b6103e6611eac565b61052f61082b366004613763565b611ebb565b61012e54610657906001600160a01b031681565b6103e66101305481565b6103c461085c3660046133dd565b611f87565b6103e661086f3660046137e1565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6103e66108a836600461381a565b61200d565b6103c46108bb3660046133dd565b612060565b61052f6108ce366004613575565b61218e565b61012e546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a08231906024015b602060405180830381865afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109429190613836565b905090565b6060603680546109569061384f565b80601f01602080910402602001604051908101604052809291908181526020018280546109829061384f565b80156109cf5780601f106109a4576101008083540402835291602001916109cf565b820191906000526020600020905b8154815290600101906020018083116109b257829003601f168201915b5050505050905090565b60006109e782610578611d74565b50909392505050565b6000336109fe818585612204565b60019150505b92915050565b6000610a14612328565b610a1c612381565b6000610a26611d74565b90506000610a348583611190565b91945090915050841580610a46575082155b15610a645760405163173825e960e21b815260040160405180910390fd5b83831015610a855760405163428637bb60e11b815260040160405180910390fd5b61012d54610a9e906001600160a01b03163330886123d4565b8015610ac357610ac3610aaf611b11565b61012e546001600160a01b03169083612472565b61012e54610adb906001600160a01b03163385612472565b7fb9857b4d6812ba7a1f16f6b8016defcf9a9cafcc299135f2057b4b3fab43edd78583604051610b0c929190613883565b60405180910390a15050610a04600160fb55565b600080600061013260009054906101000a90046001600160a01b03166001600160a01b0316630ae7a6036040518163ffffffff1660e01b815260040160408051808303816000875af1158015610b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9e91906138cd565b9150915080610bc05760405163e4e15bcd60e01b815260040160405180910390fd5b50919050565b6000806000610bfa6101305461012f54610bf3876040015188606001518a6124ae9092919063ffffffff16565b91906124ae565b92506000610c57610c0a8661200d565b61053f60405180608001604052808a8a60000151610c289190613906565b8152602001888a60200151610c3d9190613919565b81526040808b0151602083015260608b015191015261200d565b9050610c656012600a613a10565b8110610c7c57600080600093509350935050610cd2565b6000610c9682610c8e6012600a613a10565b8791906124ae565b9050610ca28186613919565b61013954909550610cc190610cb96012600a613a10565b8391906124ae565b9250610ccd8382613919565b935050505b9250925092565b61012d546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401610901565b600033610d198582856125a0565b610d2485858561262c565b60019150505b9392505050565b6000610d3b612328565b610d43612381565b6000806000610d528888610e1b565b9296509094509250905083610d6d5760009350505050610e09565b85831080610d7a57508482105b15610d985760405163428637bb60e11b815260040160405180910390fd5b61012e54610db1906001600160a01b03163330866123d4565b61012d54610dca906001600160a01b03163330856123d4565b8015610dfb57610de43069021e19e0c9bab24000006127d7565b610df869021e19e0c9bab240000085613919565b93505b610e0533856127d7565b5050505b610e13600160fb55565b949350505050565b6000806000806000610e2c60355490565b80159250905086158015610e3e575085155b15610e5457600080600094509450945050611032565b8115610eac57869350859250610e7683610130546012600a610bf39190613a10565b610e8c8561012f546012600a610bf39190613a10565b610e969190613906565b9450610ea5620f424086613a1c565b9450611004565b61012e546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a9190613836565b61012d546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8d9190613836565b905081600003610fb05760009550879450610fa98386836124ae565b9650611001565b80600003610fca5788955060009450610fa98387846124ae565b889550610fd88187846124ae565b945087851115610ff357879450610ff08286836124ae565b95505b610ffe8387846124ae565b96505b50505b6101335461102e906110186012600a613a10565b6110229190613919565b610c8e6012600a613a10565b9450505b92959194509250565b3360008181526034602090815260408083206001600160a01b03871684529091528120549091906109fe9082908690611075908790613906565b612204565b610131546001600160a01b031633146110a657604051637bf6a16f60e01b815260040160405180910390fd5b6110ae612898565b565b6000828210156110d357604051633d20869760e01b815260040160405180910390fd5b61013b548211156110f1576110ea6012600a613a10565b9050610a04565b604080518082018252610137548152610138546020808301919091528251608081018452600081528251918101919091529091610e13919081016111376012600a613a10565b815283516020918201526040805160808101825261013d5480825286518285015261013b5492820192909252918501516060830152879087906128ea565b61117f3382612987565b50565b6000610a04826107c2611d74565b60008060006111bd61012f5461013054610bf3876060015188604001518a6124ae9092919063ffffffff16565b92506000610c576111cd8661200d565b61061b6040518060800160405280888a600001516111eb9190613919565b81526020018a8a60200151610c3d9190613906565b611208612abb565b6012816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190613a33565b60ff161461128d5760405163c51d798560e01b815260040160405180910390fd5b61013280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610a04826105d7611d74565b60006112c8612328565b6112d0612381565b60006112da611d74565b905060006112e78261200d565b9050600061132f60405180608001604052808886600001516113099190613906565b81526020018560200151815260200185604001518152602001856060015181525061200d565b905061133d6012600a613a10565b8210158061135557506113526012600a613a10565b81115b156113665760009350505050611407565b6113708684611d45565b9350600084116113865760009350505050611407565b848111156113a75760405163428637bb60e11b815260040160405180910390fd5b61012e546113c0906001600160a01b03163330896123d4565b6113ca33856127d7565b7f946cdbb54309dd364fdf5a3d98538bc093446b2db9630700493835a5e9b266c586846040516113fb929190613883565b60405180910390a15050505b610a04600160fb55565b600080600061013260009054906101000a90046001600160a01b03166001600160a01b0316636619aa866040518163ffffffff1660e01b815260040160408051808303816000875af1158015610b7a573d6000803e3d6000fd5b600080831161147c57506000610a04565b600061149a846101305485606001516124ae9092919063ffffffff16565b905060006114be84602001516101305486606001516124ae9092919063ffffffff16565b845161012f5460408701516114d49290916124ae565b6114de9190613906565b9050600081116114ef57600061152d565b6101335461152d906115036012600a613a10565b61150d9190613919565b6115196012600a613a10565b610bf361152560355490565b8690866124ae565b95945050505050565b61153e612abb565b6110ae6000612b15565b60008282111561156b57604051633d20869760e01b815260040160405180910390fd5b61013a54821015611582576110ea6012600a613a10565b60408051808201825261013554815261013654602080830191825283516080808201865261013a54825292518183015261013c54818601528351606082015284519283018552600083528351918301919091529192610e1392919081016115eb6012600a613a10565b8152845160209091015261013c54869088906128ea565b600061160c612328565b611614612381565b600061161e611d74565b9050600061162c8583610bc6565b9194509091505084158061163e575082155b1561165c5760405163173825e960e21b815260040160405180910390fd5b8383101561167d5760405163428637bb60e11b815260040160405180910390fd5b61012e54611696906001600160a01b03163330886123d4565b80156116bb576116bb6116a7611b11565b61012d546001600160a01b03169083612472565b61012d546116d3906001600160a01b03163385612472565b7f1205cf9ce13c61adfdca9c7d1ee63630307cbf380e18ff85e0633ffe8f18589e8583604051610b0c929190613883565b600054610100900460ff16158080156117245750600054600160ff909116105b8061173e5750303b15801561173e575060005460ff166001145b6117b55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff1916600117905580156117d8576000805461ff0019166101001790555b6117e28686612b67565b6117ea612bca565b6117f2612c23565b6117fa612c84565b611802612ce5565b61012e80546001600160a01b038087166001600160a01b0319928316811790935561012d8054918716919092161790556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801561186d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118919190613a33565b61189c90600a613a56565b61012f81905550826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119059190613a33565b61191090600a613a56565b610130556119296107056097546001600160a01b031690565b61193282611200565b6119bb6040518060a00160405280600081526020016000815260200160405180604001604052806012600a6119679190613a10565b81526020016119786012600a613a10565b815250815260200160405180604001604052806012600a6119999190613a10565b81526020016119aa6012600a613a10565b905281526000602090910152611ebb565b6119f3604051806040016040528060008152602001600019815250604051806040016040528060008152602001600019815250611a5a565b8015611a39576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b611a4c8233836125a0565b611a568282612987565b5050565b611a62612abb565b8151815160009110801590611a7c57506020830151835111155b8015611a9057508160200151836020015111155b905080611ab057604051635cf7132560e01b815260040160405180910390fd5b50815161013c5560209182015161013d55805161013a55015161013b55565b610131546001600160a01b03163314611afb57604051637bf6a16f60e01b815260040160405180910390fd5b6110ae612d46565b60006109e78261047a611d74565b60006109426097546001600160a01b031690565b6000611b2f612328565b611b37612381565b6000611b41611d74565b90506000611b4e8261200d565b90506000611b94604051806080016040528085600001518152602001888660200151611b7a9190613906565b81526040808701516020830152606087015191015261200d565b9050611ba26012600a613a10565b82111580611bba5750611bb76012600a613a10565b81105b15611bcb5760009350505050611407565b611bd5868461146b565b935060008411611beb5760009350505050611407565b84811015611c0c5760405163428637bb60e11b815260040160405180910390fd5b61012d54611c25906001600160a01b03163330896123d4565b611c2f33856127d7565b7f7be9076bd1b129e4c5ee8afc5a8b341fed291ef2cb024a40c1d96dba1ba463a786846040516113fb929190613883565b6060603780546109569061384f565b611c77612abb565b61013180546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526034602090815260408083206001600160a01b038716845290915281205490919083811015611d1f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016117ac565b611d2c8286868403612204565b506001949350505050565b6000336109fe81858561262c565b6000808311611d5657506000610a04565b600061149a8461012f5485604001516124ae9092919063ffffffff16565b611d9f6040518060800160405280600081526020016000815260200160008152602001600081525090565b60408051608081019182905261012e546370a0823160e01b9092523060848201529081906001600160a01b03166370a0823160a48301602060405180830381865afa158015611df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e169190613836565b815261012d546040516370a0823160e01b81523060048201526020909201916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8b9190613836565b8152602001611e98611411565b8152602001611ea5610b20565b9052919050565b611eb86012600a613a10565b81565b611ec3612abb565b611ecf6012600a613a10565b81511180611eeb5750611ee46012600a613a10565b8160200151115b80611eff5750604081015160208101519051115b80611f135750606081015160208101519051115b80611f2c5750611f256012600a613a10565b8160800151115b15611f4a576040516366e3134960e11b815260040160405180910390fd5b8051610133556020808201516101345560408201518051610135558101516101365560608201518051610137550151610138556080015161013955565b600080611f92612328565b611f9a612381565b611fa383612060565b909250905081158015611fb4575080155b15611fc457506000905080611ffe565b611fce3384612987565b61012e54611fe6906001600160a01b03163384612472565b61012d54611ffe906001600160a01b03163383612472565b612008600160fb55565b915091565b60008082602001511161202257600019610a04565b610a046120316012600a613a10565b606084015161013054602086015161204a9290916124ae565b604085015161012f548651610bf39290916124ae565b6000806000831161207657506000928392509050565b600061208160355490565b61013454909150612122906120986012600a613a10565b6120a29190613919565b6120ae6012600a613a10565b61012e546040516370a0823160e01b8152306004820152610bf391899187916001600160a01b0316906370a08231906024015b602060405180830381865afa1580156120fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190613836565b61013454909350612186906121396012600a613a10565b6121439190613919565b61214f6012600a613a10565b61012d546040516370a0823160e01b8152306004820152610bf391899187916001600160a01b0316906370a08231906024016120e1565b915050915091565b612196612abb565b6001600160a01b0381166121fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016117ac565b61117f81612b15565b6001600160a01b0383166122665760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016117ac565b6001600160a01b0382166122c75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016117ac565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600260fb540361237a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016117ac565b600260fb55565b60c95460ff16156110ae5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016117ac565b6040516001600160a01b038085166024830152831660448201526064810182905261246c9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612d83565b50505050565b6040516001600160a01b0383166024820152604481018290526124a290849063a9059cbb60e01b90606401612408565b505050565b600160fb55565b60008080600019858709858702925082811083820303915050806000036124e8578382816124de576124de613a65565b0492505050610d2a565b8084116125375760405162461bcd60e51b815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f77000000000000000000000060448201526064016117ac565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b03838116600090815260346020908152604080832093861683529290522054600019811461246c578181101561261f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016117ac565b61246c8484848403612204565b6001600160a01b0383166126905760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016117ac565b6001600160a01b0382166126f25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016117ac565b6001600160a01b0383166000908152603360205260409020548181101561276a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016117ac565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127ca9086815260200190565b60405180910390a361246c565b6001600160a01b03821661282d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016117ac565b806035600082825461283f9190613906565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6128a0612e6b565b60c9805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000818311612905576128fe868585612ebd565b9050612968565b818410612917576128fe858585612ebd565b6129396129248385613919565b61292e8686613919565b610bf3888688612ebd565b61295b6129468685613919565b6129508787613919565b610bf38a8988612ebd565b6129659190613906565b90505b61297d816129786012600a613a10565b612fb7565b9695505050505050565b6001600160a01b0382166129e75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016117ac565b6001600160a01b03821660009081526033602052604090205481811015612a5b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016117ac565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6097546001600160a01b031633146110ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016117ac565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16612bc05760405162461bcd60e51b815260206004820152602b6024820152600080516020613c7683398151915260448201526a6e697469616c697a696e6760a81b60648201526084016117ac565b611a568282612fcd565b600054610100900460ff166110ae5760405162461bcd60e51b815260206004820152602b6024820152600080516020613c7683398151915260448201526a6e697469616c697a696e6760a81b60648201526084016117ac565b600054610100900460ff16612c7c5760405162461bcd60e51b815260206004820152602b6024820152600080516020613c7683398151915260448201526a6e697469616c697a696e6760a81b60648201526084016117ac565b6110ae61303f565b600054610100900460ff16612cdd5760405162461bcd60e51b815260206004820152602b6024820152600080516020613c7683398151915260448201526a6e697469616c697a696e6760a81b60648201526084016117ac565b6110ae6130a1565b600054610100900460ff16612d3e5760405162461bcd60e51b815260206004820152602b6024820152600080516020613c7683398151915260448201526a6e697469616c697a696e6760a81b60648201526084016117ac565b6110ae613106565b612d4e612381565b60c9805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128cd3390565b6000612dd8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661315f9092919063ffffffff16565b9050805160001480612df9575080806020019051810190612df99190613a7b565b6124a25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016117ac565b60c95460ff166110ae5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016117ac565b60008360600151846020015103612ed957506060830151610d2a565b6000612ee8856020015161316e565b612ef5866060015161316e565b612eff9190613a96565b90506000612f10866000015161316e565b612f1d876040015161316e565b612f279190613a96565b905060008183612f3a896040015161316e565b612f449190613abd565b612f4e9190613aed565b612f5b886060015161316e565b612f659190613a96565b9050612fac81612f76846002613abd565b85612f89612f848a8c613906565b61316e565b612f939190613abd565b612f9d9190613aed565b612fa79190613b29565b61320a565b979650505050505050565b6000818310612fc65781610d2a565b5090919050565b600054610100900460ff166130265760405162461bcd60e51b815260206004820152602b6024820152600080516020613c7683398151915260448201526a6e697469616c697a696e6760a81b60648201526084016117ac565b60366130328382613b99565b5060376124a28282613b99565b600054610100900460ff166130985760405162461bcd60e51b815260206004820152602b6024820152600080516020613c7683398151915260448201526a6e697469616c697a696e6760a81b60648201526084016117ac565b6110ae33612b15565b600054610100900460ff166130fa5760405162461bcd60e51b815260206004820152602b6024820152600080516020613c7683398151915260448201526a6e697469616c697a696e6760a81b60648201526084016117ac565b60c9805460ff19169055565b600054610100900460ff166124a75760405162461bcd60e51b815260206004820152602b6024820152600080516020613c7683398151915260448201526a6e697469616c697a696e6760a81b60648201526084016117ac565b6060610e13848460008561321d565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156132065760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e206160448201527f6e20696e7432353600000000000000000000000000000000000000000000000060648201526084016117ac565b5090565b6000808212156132065781600003610a04565b60608247101561327e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016117ac565b600080866001600160a01b0316858760405161329a9190613c59565b60006040518083038185875af1925050503d80600081146132d7576040519150601f19603f3d011682016040523d82523d6000602084013e6132dc565b606091505b5091509150612fac8783838760608315613357578251600003613350576001600160a01b0385163b6133505760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016117ac565b5081610e13565b610e13838381511561336c5781518083602001fd5b8060405162461bcd60e51b81526004016117ac91906133aa565b60005b838110156133a1578181015183820152602001613389565b50506000910152565b60208152600082518060208401526133c9816040850160208701613386565b601f01601f19169190910160400192915050565b6000602082840312156133ef57600080fd5b5035919050565b6001600160a01b038116811461117f57600080fd5b6000806040838503121561341e57600080fd5b8235613429816133f6565b946020939093013593505050565b6000806040838503121561344a57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b60006080828403121561348157600080fd5b6040516080810181811067ffffffffffffffff821117156134a4576134a4613459565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b60008060a083850312156134e857600080fd5b823591506134f9846020850161346f565b90509250929050565b60008060006060848603121561351757600080fd5b8335613522816133f6565b92506020840135613532816133f6565b929592945050506040919091013590565b6000806000806080858703121561355957600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561358757600080fd5b8135610d2a816133f6565b600082601f8301126135a357600080fd5b813567ffffffffffffffff808211156135be576135be613459565b604051601f8301601f19908116603f011681019082821181831017156135e6576135e6613459565b816040528381528660208588010111156135ff57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a0868803121561363757600080fd5b853567ffffffffffffffff8082111561364f57600080fd5b61365b89838a01613592565b9650602088013591508082111561367157600080fd5b5061367e88828901613592565b945050604086013561368f816133f6565b9250606086013561369f816133f6565b915060808601356136af816133f6565b809150509295509295909350565b6000604082840312156136cf57600080fd5b6040516040810181811067ffffffffffffffff821117156136f2576136f2613459565b604052823581526020928301359281019290925250919050565b6000806080838503121561371f57600080fd5b61372984846136bd565b91506134f984604085016136bd565b8151815260208083015190820152604080830151908201526060808301519082015260808101610a04565b600060e0828403121561377557600080fd5b60405160a0810181811067ffffffffffffffff8211171561379857613798613459565b806040525082358152602083013560208201526137b884604085016136bd565b60408201526137ca84608085016136bd565b606082015260c09290920135608083015250919050565b600080604083850312156137f457600080fd5b82356137ff816133f6565b9150602083013561380f816133f6565b809150509250929050565b60006080828403121561382c57600080fd5b610d2a838361346f565b60006020828403121561384857600080fd5b5051919050565b600181811c9082168061386357607f821691505b602082108103610bc057634e487b7160e01b600052602260045260246000fd5b82815260a08101610d2a6020830184805182526020810151602083015260408101516040830152606081015160608301525050565b805180151581146138c857600080fd5b919050565b600080604083850312156138e057600080fd5b825191506134f9602084016138b8565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a0457610a046138f0565b81810381811115610a0457610a046138f0565b600181815b8085111561396757816000190482111561394d5761394d6138f0565b8085161561395a57918102915b93841c9390800290613931565b509250929050565b60008261397e57506001610a04565b8161398b57506000610a04565b81600181146139a157600281146139ab576139c7565b6001915050610a04565b60ff8411156139bc576139bc6138f0565b50506001821b610a04565b5060208310610133831016604e8410600b84101617156139ea575081810a610a04565b6139f4838361392c565b8060001904821115613a0857613a086138f0565b029392505050565b6000610d2a838361396f565b8082028115828204841417610a0457610a046138f0565b600060208284031215613a4557600080fd5b815160ff81168114610d2a57600080fd5b6000610d2a60ff84168361396f565b634e487b7160e01b600052601260045260246000fd5b600060208284031215613a8d57600080fd5b610d2a826138b8565b8181036000831280158383131683831282161715613ab657613ab66138f0565b5092915050565b80820260008212600160ff1b84141615613ad957613ad96138f0565b8181058314821517610a0457610a046138f0565b600082613b0a57634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615613b2457613b246138f0565b500590565b8082018281126000831280158216821582161715613b4957613b496138f0565b505092915050565b601f8211156124a2576000816000526020600020601f850160051c81016020861015613b7a5750805b601f850160051c820191505b81811015611a3957828155600101613b86565b815167ffffffffffffffff811115613bb357613bb3613459565b613bc781613bc1845461384f565b84613b51565b602080601f831160018114613bfc5760008415613be45750858301515b600019600386901b1c1916600185901b178555611a39565b600085815260208120601f198616915b82811015613c2b57888601518255948401946001909101908401613c0c565b5085821015613c495787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613c6b818460208701613386565b919091019291505056fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a26469706673582212203cf8de8a942f288e8f202eeb2588b0bc6d426713db0cc56a033692a1b3f7a8ff64736f6c63430008180033