UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

1,602 lines 79.4 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MockDepositStakeTokenFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class MockDepositStakeTokenFactory extends contracts_1.ContractFactory { constructor(signer) { super(_abi, _bytecode, signer); } deploy(overrides) { return super.deploy(overrides || {}); } getDeployTransaction(overrides) { return super.getDeployTransaction(overrides || {}); } attach(address) { return super.attach(address); } connect(signer) { return super.connect(signer); } static connect(address, signerOrProvider) { return new contracts_1.Contract(address, _abi, signerOrProvider); } } exports.MockDepositStakeTokenFactory = MockDepositStakeTokenFactory; const _abi = [ { inputs: [], stateMutability: "nonpayable", type: "constructor", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "owner", type: "address", }, { indexed: true, internalType: "address", name: "spender", type: "address", }, { indexed: false, internalType: "uint256", name: "value", type: "uint256", }, ], name: "Approval", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint16", name: "", type: "uint16", }, ], name: "BaselinePercentageUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "account", type: "address", }, { indexed: false, internalType: "uint32", name: "at", type: "uint32", }, ], name: "CooldownStarted", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint32", name: "cooldownPeriod", type: "uint32", }, { indexed: false, internalType: "uint32", name: "unstakePeriod", type: "uint32", }, ], name: "CooldownUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "by", type: "address", }, { indexed: false, internalType: "bool", name: "paused", type: "bool", }, ], name: "EmergencyPaused", type: "event", }, { anonymous: false, inputs: [ { components: [ { internalType: "contract IMarketAccessController", name: "stakeController", type: "address", }, { internalType: "contract IERC20", name: "stakedToken", type: "address", }, { internalType: "contract IUnderlyingStrategy", name: "strategy", type: "address", }, { internalType: "uint32", name: "cooldownPeriod", type: "uint32", }, { internalType: "uint32", name: "unstakePeriod", type: "uint32", }, { internalType: "uint16", name: "maxSlashable", type: "uint16", }, { internalType: "uint8", name: "stakedTokenDecimals", type: "uint8", }, ], indexed: false, internalType: "struct StakeTokenConfig", name: "params", type: "tuple", }, { indexed: false, internalType: "string", name: "tokenName", type: "string", }, { indexed: false, internalType: "string", name: "tokenSymbol", type: "string", }, ], name: "Initialized", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint16", name: "maxSlash", type: "uint16", }, ], name: "MaxSlashUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "provider", type: "address", }, { indexed: false, internalType: "address", name: "token", type: "address", }, ], name: "ProviderAdded", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "provider", type: "address", }, ], name: "ProviderRemoved", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint256", name: "rate", type: "uint256", }, ], name: "RateUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "bool", name: "redeemable", type: "bool", }, ], name: "RedeemableUpdated", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "from", type: "address", }, { indexed: true, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "underlyingAmount", type: "uint256", }, ], name: "Redeemed", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "totalBeforeSlash", type: "uint256", }, ], name: "Slashed", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "from", type: "address", }, { indexed: true, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, { indexed: true, internalType: "uint256", name: "referal", type: "uint256", }, ], name: "Staked", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "from", type: "address", }, { indexed: true, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "value", type: "uint256", }, ], name: "Transfer", type: "event", }, { inputs: [], name: "COOLDOWN_PERIOD", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "DOMAIN_SEPARATOR", outputs: [ { internalType: "bytes32", name: "", type: "bytes32", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "EIP712_REVISION", outputs: [ { internalType: "bytes", name: "", type: "bytes", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "PERMIT_TYPEHASH", outputs: [ { internalType: "bytes32", name: "", type: "bytes32", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "REVISION", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [], name: "UNDERLYING_ASSET_ADDRESS", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "UNSTAKE_PERIOD", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, ], name: "_nonces", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", type: "address", }, ], name: "addRewardProvider", outputs: [], stateMutability: "view", type: "function", }, { 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: [], name: "attachedToRewardController", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, ], name: "balanceAndCooldownOf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint32", name: "windowStart", type: "uint32", }, { internalType: "uint32", name: "windowEnd", type: "uint32", }, ], stateMutability: "view", 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", }, ], name: "balanceOfUnderlying", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint32", name: "at", type: "uint32", }, ], name: "calcRewardFor", outputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint32", name: "since", type: "uint32", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, ], name: "claimRewardFor", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint32", name: "", type: "uint32", }, { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint256", name: "baseAmount", type: "uint256", }, { internalType: "uint256", name: "limit", type: "uint256", }, { internalType: "uint16", name: "minPct", type: "uint16", }, ], name: "claimRewardWithLimitFor", outputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint32", name: "since", type: "uint32", }, { internalType: "bool", name: "keepPull", type: "bool", }, { internalType: "uint256", name: "newLimit", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "cooldown", outputs: [], 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: [], name: "detachedFromRewardController", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "exchangeRate", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getBaselinePercentage", outputs: [ { internalType: "uint16", name: "", type: "uint16", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, ], name: "getCooldown", outputs: [ { internalType: "uint32", name: "", type: "uint32", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getIncentivesController", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getMaxSlashablePercentage", outputs: [ { internalType: "uint16", name: "", type: "uint16", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getOwner", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getPoolName", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getRate", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getRewardController", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getScaleIndex", outputs: [ { internalType: "uint256", name: "", 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: [ { components: [ { internalType: "contract IRewardController", name: "controller", type: "address", }, { internalType: "string", name: "poolName", type: "string", }, { internalType: "uint16", name: "baselinePercentage", type: "uint16", }, ], internalType: "struct IInitializableRewardPool.InitRewardPoolData", name: "config", type: "tuple", }, ], name: "initializeRewardPool", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { components: [ { internalType: "contract IMarketAccessController", name: "stakeController", type: "address", }, { internalType: "contract IERC20", name: "stakedToken", type: "address", }, { internalType: "contract IUnderlyingStrategy", name: "strategy", type: "address", }, { internalType: "uint32", name: "cooldownPeriod", type: "uint32", }, { internalType: "uint32", name: "unstakePeriod", type: "uint32", }, { internalType: "uint16", name: "maxSlashable", type: "uint16", }, { internalType: "uint8", name: "stakedTokenDecimals", type: "uint8", }, ], internalType: "struct StakeTokenConfig", name: "params", type: "tuple", }, { internalType: "string", name: "name", type: "string", }, { internalType: "string", name: "symbol", type: "string", }, ], name: "initializeStakeToken", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "initializedRewardPoolWith", outputs: [ { components: [ { internalType: "contract IRewardController", name: "controller", type: "address", }, { internalType: "string", name: "poolName", type: "string", }, { internalType: "uint16", name: "baselinePercentage", type: "uint16", }, ], internalType: "struct IInitializableRewardPool.InitRewardPoolData", name: "", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "initializedStakeTokenWith", outputs: [ { components: [ { internalType: "contract IMarketAccessController", name: "stakeController", type: "address", }, { internalType: "contract IERC20", name: "stakedToken", type: "address", }, { internalType: "contract IUnderlyingStrategy", name: "strategy", type: "address", }, { internalType: "uint32", name: "cooldownPeriod", type: "uint32", }, { internalType: "uint32", name: "unstakePeriod", type: "uint32", }, { internalType: "uint16", name: "maxSlashable", type: "uint16", }, { internalType: "uint8", name: "stakedTokenDecimals", type: "uint8", }, ], internalType: "struct StakeTokenConfig", name: "params", type: "tuple", }, { internalType: "string", name: "name_", type: "string", }, { internalType: "string", name: "symbol_", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isPaused", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isRedeemable", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "name", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "addr", type: "address", }, ], name: "nonces", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "owner", type: "address", }, { internalType: "address", name: "spender", type: "address", }, { internalType: "uint256", name: "value", type: "uint256", }, { internalType: "uint256", name: "deadline", type: "uint256", }, { internalType: "uint8", name: "v", type: "uint8", }, { internalType: "bytes32", name: "r", type: "bytes32", }, { internalType: "bytes32", name: "s", type: "bytes32", }, ], name: "permit", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "uint256", name: "stakeAmount", type: "uint256", }, ], name: "redeem", outputs: [ { internalType: "uint256", name: "stakeAmount_", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, ], name: "redeemUnderlying", outputs: [ { internalType: "uint256", name: "underlyingAmount_", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "provider", type: "address", }, ], name: "removeRewardProvider", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "rewardedBalanceOf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "factor", type: "uint16", }, ], name: "setBaselinePercentage", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint32", name: "cooldownPeriod", type: "uint32", }, { internalType: "uint32", name: "unstakePeriod", type: "uint32", }, ], name: "setCooldown", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, ], name: "setIncentivesController", outputs: [], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "slashPct", type: "uint16", }, ], name: "setMaxSlashablePercentage", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "paused", type: "bool", }, ], name: "setPaused", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "redeemable", type: "bool", }, ], name: "setRedeemable", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "destination", type: "address", }, { internalType: "uint256", name: "minAmount", type: "uint256", }, { internalType: "uint256", name: "maxAmount", type: "uint256", }, ], name: "slashUnderlying", outputs: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "bool", name: "erc20Transfer", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "uint256", name: "underlyingAmount", type: "uint256", }, { internalType: "uint256", name: "referral", type: "uint256", }, ], name: "stake", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "stub", outputs: [], stateMutability: "nonpayable", 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: "recipient", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "transfer", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "sender", type: "address", }, { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "transferFrom", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "baseline", type: "uint256", }, ], name: "updateBaseline", outputs: [ { internalType: "bool", name: "hasBaseline", type: "bool", }, { internalType: "uint256", name: "appliedRate", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "owner", type: "address", }, { internalType: "uint256", name: "subtractedValue", type: "uint256", }, ], name: "useAllowance", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, ]; const _bytecode = "0x6080604052600080546001600160a01b0316676765c793fa10079d60bb1b1790556001805463ffffffff60301b191666780000000000001781556200004790600019620008db565b60105560006011553480156200005c57600080fd5b5060408051602080820183526000808352835191820190935282815282546001600160a01b031916835590918080808062000097816200011b565b50620000bb83838360405180602001604052806000815250620001c660201b60201c565b50508351620000d39150600890602086019062000790565b508151620000e990600990602085019062000790565b50600a805460ff191660ff92909216919091179055506200010b90506200020f565b62000115620002bd565b62000986565b600080546001600160a01b0316676765c793fa10079d60bb1b179055600262000147600160646200088c565b620001549060646200088c565b62000160919062000851565b61ffff168161ffff1610620001b15760026200017f600160646200088c565b6200018c9060646200088c565b62000198919062000851565b6001805461ffff191661ffff9290921691909117905550565b6001805461ffff191661ffff83161790555b50565b600780546001600160a01b0319166001600160a01b03861617905561ffff821615620001f757620001f78262000397565b82156200020957620002098362000478565b50505050565b467f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200023b620004be565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c00160408051601f198184030181529190528051602090910120600c5550565b303b15620003125760405162461bcd60e51b815260206004820152601460248201527f6f6e6c7920666f7220636f6e7374727563746f7200000000000000000000000060448201526064015b60405180910390fd5b620003216001600019620008db565b601054141562000332576000601055565b60105415620003955760405162461bcd60e51b815260206004820152602860248201527f63616e206f6e6c792062652063616c6c6564206265666f726520696e697469616044820152676c697a657228732960c01b606482015260840162000309565b565b620003a1620004da565b61ffff8116620003bd57620003b7600062000478565b62000421565b620003cb600160646200088c565b620003d89060646200088c565b61ffff168161ffff161115620004215760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b604482015260640162000309565b6007805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020015b60405180910390a150565b62000482620004da565b6200048d8162000534565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b906020016200046d565b6060620004d56200054a60201b6200090f1760201c565b905090565b6007546001600160a01b0316620003955760405162461bcd60e51b815260206004820152601660248201527f636f6e74726f6c6c657220697320726571756972656400000000000000000000604482015260640162000309565b620001c381620005e460201b620017681760201c565b6060600880546200055b906200091d565b80601f016020809104026020016040519081016040528092919081815260200182805462000589906200091d565b8015620005da5780601f10620005ae57610100808354040283529160200191620005da565b820191906000526020600020905b815481529060010190602001808311620005bc57829003601f168201915b5050505050905090565b620001c381426004546001600160e01b031682141562000602575050565b6001600160e01b038211156200061757600080fd5b60045463ffffffff600160e01b9091048116908216811462000684576004546001600160e01b0390811690620006509084906200068916565b600480546001600160e01b0319166001600160e01b0386811691909117909155620002099082811690849086906200070816565b505050565b60045463ffffffff600160e01b90910481169082161015620006e35760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b604482015260640162000309565b6004805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b6006546200071557505050565b8163ffffffff168163ffffffff1614620006845760065462000747906ec097ce7bc90715b34b9f100000000062000875565b620007539084620008b9565b9250620007618282620008f5565b620007739063ffffffff1684620008b9565b6005600082825462000786919062000836565b9091555050505050565b8280546200079e906200091d565b90600052602060002090601f016020900481019282620007c257600085556200080d565b82601f10620007dd57805160ff19168380011785556200080d565b828001600101855582156200080d579182015b828111156200080d578251825591602001919060010190620007f0565b506200081b9291506200081f565b5090565b5b808211156200081b576000815560010162000820565b600082198211156200084c576200084c6200095a565b500190565b600061ffff8084168062000869576200086962000970565b92169190910492915050565b60008262000887576200088762000970565b500490565b600061ffff80831681851681830481118215151615620008b057620008b06200095a565b02949350505050565b6000816000190483118215151615620008d657620008d66200095a565b500290565b600082821015620008f057620008f06200095a565b500390565b600063ffffffff838116908316818110156200091557620009156200095a565b039392505050565b600181811c908216806200093257607f821691505b602082108114156200095457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6143b480620009966000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c806375d26413116101f4578063a8346a8c1161011a578063d2993983116100ad578063dde43cba1161007c578063dde43cba146108b4578063e655dbd8146108bb578063f34d96da146108ce578063ff85a2ba146108da57600080fd5b8063d29939831461084d578063d354f24014610855578063d505accf14610868578063dd62ed3e1461087b57600080fd5b8063b16a19de116100e9578063b16a19de146107f2578063b187bd2614610808578063b6fe2e9c1461081a578063b9844d8d1461082d57600080fd5b8063a8346a8c14610799578063a9059cbb146107d7578063a9dd770214610654578063af920582146107ea57600080fd5b8063893d20e8116101925780639629417811610161578063962941781461076b57806396dbab81146104905780639cfa77681461077e578063a457c2d71461078657600080fd5b8063893d20e81461070d5780638abc37d31461071e57806392efda791461075257806395d89b411461076357600080fd5b806379b57862116101ce57806379b57862146106a957806379d08c34146106be5780637ecebe00146106d15780637fcea80e146106fa57600080fd5b806375d26413146106675780637816037614610681578063787a08a6146106a157600080fd5b8063313ce567116102d95780633af9e6691161027757806355f4f1971161024657806355f4f19714610630578063679aefce146106385780636e99d52f1461064057806370a082311461065457600080fd5b80633af9e669146105e05780633ba0b9a9146105f35780634800df8c146105fb5780634d25c4f11461060e57600080fd5b806338907118116102b3578063389071181461057d578063395093511461059057806339b84ecf146105a35780633a7d4089146105cb57600080fd5b8063313ce5671461054c5780633644e5151461056157806337a926261461056a57600080fd5b806316195210116103515780631e9a6950116103205780631e9a6950146104e857806323b872dd146104fb57806326cc73a41461050e57806330adf81f1461052557600080fd5b8063161952101461049257806316c38b3c146104ba57806318160ddd146104cd5780631dd0f483146104d557600080fd5b80630c51b88f1161038d5780630c51b88f1461040b5780630ca2103d1461041e578063115eb1cf1461044857806314e613a81461047d57600080fd5b806306fdde03146103b45780630746363d146103d2578063095ea7b3146103e8575b600080fd5b6103bc61090f565b6040516103c99190613f90565b60405180910390f35b6103da6109a1565b6040519081526020016103c9565b6103fb6103f6366004613bc1565b6109b6565b60405190151581526020016103c9565b6103da610419366004613bec565b6109cd565b61043161042c366004613e67565b6109e3565b6040805192151583526020830191909152016103c9565b61045b610456366004613ac0565b610a40565b6040805193845263ffffffff92831660208501529116908201526060016103c9565b61049061048b366004613d0b565b610aba565b005b6104a56104a0366004613bec565b610bda565b604080519283529015156020830152016103c9565b6104906104c8366004613c9b565b610cc3565b6103da610d35565b6104906104e3366004613ac0565b610d40565b6103da6104f6366004613bc1565b610d4b565b6103fb610509366004613b14565b610da7565b610516610dc8565b6040516103c9939291906140c9565b6103da7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600a5460405160ff90911681526020016103c9565b6103da600c5481565b610490610578366004613cd3565b610e52565b61049061058b366004613c9b565b610f3d565b6103fb61059e366004613bc1565b610fc1565b6105b66105b1366004613ac0565b610ffd565b60405163ffffffff90911681526020016103c9565b6105d3611012565b6040516103c99190613fa3565b6103da6105ee366004613ac0565b61109b565b6103da6110c1565b610490610609366004613e4d565b6110e8565b600754600160a01b900461ffff165b60405161ffff90911681526020016103c9565b6103da6110f9565b6103da611108565b60015462010000900463ffffffff166103da565b6103da610662366004613ac0565b611112565b305b6040516001600160a01b0390911681526020016103c9565b6103bc604051806040016040528060018152602001603160f81b81525081565b61049061112d565b600154600160301b900463ffffffff166103da565b6104906106cc366004613e4d565b6111b5565b6103da6106df366004613ac0565b6001600160a01b03166000908152600d602052604090205490565b6103fb610708366004613bc1565b61129a565b6000546001600160a01b0316610669565b61073161072c366004613c67565b6112c0565b60408051938452602084019290925263ffffffff16908201526060016103c9565b6007546001600160a01b0316610669565b6103bc6112f9565b6103da610779366004613bc1565b611308565b6103da611377565b6103fb610794366004613bc1565b6113fb565b6107ac6107a7366004613c20565b611421565b6040805194855263ffffffff90931660208501529015159183019190915260608201526080016103c9565b6103fb6107e5366004613bc1565b61144d565b6103fb61145a565b600e5461010090046001600160a01b0316610669565b600754600160b01b900460ff166103fb565b610490610828366004613adc565b61147d565b6103da61083b366004613ac0565b600d6020526000908152604090205481565b6103bc611491565b610490610863366004613e97565b61149b565b610490610876366004613b54565b6114de565b6103da610889366004613adc565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b60016103da565b6104906108c9366004613ac0565b611705565b60015461ffff1661061d565b6108ed6108e8366004613ac0565b611745565b6040805193845263ffffffff90921660208401521515908201526060016103c9565b60606008805461091e906142ad565b80601f016020809104026020016040519081016040528092919081815260200182805461094a906142ad565b80156109975780601f1061096c57610100808354040283529160200191610997565b820191906000526020600020905b81548152906001019060200180831161097a57829003601f168201915b5050505050905090565b60006109ab611772565b50600090565b905090565b60006109c33384846117b9565b5060015b92915050565b60006109db338585856118de565b949350505050565b6000806109ee611772565b600754600160a01b900461ffff16610a13576000610a0a611a79565b91509150915091565b600754610a2c908490600160a01b900461ffff16611a8d565b9050610a3781611b89565b60019150915091565b6000806000610a4e84610ffd565b915063ffffffff821615610aa75760015462010000900463ffffffff16610a7590836141cb565b6001549092506