UNPKG

@ensuro/extensions

Version:

Extension contracts that operate with the Ensuro Protocol

1,217 lines 115 kB
{ "_format": "hh-sol-artifact-1", "contractName": "ETokensBundleVault", "sourceName": "contracts/ETokensBundleVault.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminChanged", "type": "event" }, { "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": true, "internalType": "address", "name": "beacon", "type": "address" } ], "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract EToken", "name": "etk", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "percentage", "type": "uint256" } ], "name": "UnderlyingChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "CHANGE_PERCENTAGE_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "GUARDIAN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REBALANCER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REORDER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract EToken", "name": "newETK", "type": "address" }, { "internalType": "uint256[]", "name": "percentages", "type": "uint256[]" } ], "name": "addEToken", "outputs": [], "stateMutability": "nonpayable", "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": "asset", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "uint256[]", "name": "percentages", "type": "uint256[]" } ], "name": "changePercentages", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getUnderlying", "outputs": [ { "internalType": "contract EToken[]", "name": "etks", "type": "address[]" }, { "internalType": "uint256[]", "name": "percentages", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "contract EToken[]", "name": "etks", "type": "address[]" }, { "internalType": "uint256[]", "name": "percentages", "type": "uint256[]" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "ret", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "ret", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "policyPool", "outputs": [ { "internalType": "contract IPolicyPool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "from_", "type": "uint256" }, { "internalType": "uint256", "name": "to_", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "rebalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract EToken", "name": "etkToRemove", "type": "address" }, { "internalType": "uint256[]", "name": "percentages", "type": "uint256[]" } ], "name": "removeEToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "a", "type": "uint256" }, { "internalType": "uint256", "name": "b", "type": "uint256" } ], "name": "reorderETokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "ret", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516157736200011f600039600081816112f2015281816113320152818161163701528181611677015261170601526157736000f3fe6080604052600436106102c95760003560e01c806352d1902d11610175578063a457c2d7116100dc578063c6e6f59211610095578063d547741f1161006f578063d547741f146108ed578063d905777e1461090d578063dd62ed3e1461092d578063ef8b30f71461088d57600080fd5b8063c6e6f5921461088d578063ce96cb77146108ad578063d1b70789146108cd57600080fd5b8063a457c2d7146107cd578063a9059cbb146107ed578063b3d7f6b91461080d578063b460af941461082d578063ba0876521461084d578063c63d75b61461086d57600080fd5b806391d148541161012e57806391d148541461072057806394bf804d1461074057806395d89b41146107605780639816f473146107755780639d3d287b14610798578063a217fddf146107b857600080fd5b806352d1902d1461062d5780635a7a827b146106425780636e553f651461066257806370a082311461068257806375b238fc146106b857806390dd56d3146106ec57600080fd5b8063313ce56711610234578063402d267d116101ed578063490b48f8116101c7578063490b48f8146105d15780634cdad506146103485780634d15eb03146106055780634f1ef2861461061a57600080fd5b8063402d267d1461055d578063445d97871461057d578063487ca1211461059d57600080fd5b8063313ce5671461048357806332b5d1ab146104aa57806336568abe146104ca5780633659cfe6146104ea57806338d52e0f1461050a578063395093511461053d57600080fd5b80630e62ac25116102865780630e62ac25146103a857806318160ddd146103ca57806323b872dd146103df578063248a9ca3146103ff57806324ea54f41461042f5780632f2ff15d1461046357600080fd5b806301e1d114146102ce57806301ffc9a7146102f657806306fdde031461032657806307a2d13a14610348578063095ea7b3146103685780630a28a47714610388575b600080fd5b3480156102da57600080fd5b506102e361094d565b6040519081526020015b60405180910390f35b34801561030257600080fd5b50610316610311366004614ae8565b610a07565b60405190151581526020016102ed565b34801561033257600080fd5b5061033b610a3e565b6040516102ed9190614b36565b34801561035457600080fd5b506102e3610363366004614b69565b610ad0565b34801561037457600080fd5b50610316610383366004614b97565b610add565b34801561039457600080fd5b506102e36103a3366004614b69565b610af5565b3480156103b457600080fd5b506103c86103c3366004614c08565b610b02565b005b3480156103d657600080fd5b5060fd546102e3565b3480156103eb57600080fd5b506103166103fa366004614c5d565b610fe9565b34801561040b57600080fd5b506102e361041a366004614b69565b60009081526065602052604090206001015490565b34801561043b57600080fd5b506102e37f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b34801561046f57600080fd5b506103c861047e366004614c9e565b61100f565b34801561048f57600080fd5b50610498611039565b60405160ff90911681526020016102ed565b3480156104b657600080fd5b506103c86104c5366004614cce565b611059565b3480156104d657600080fd5b506103c86104e5366004614c9e565b61126a565b3480156104f657600080fd5b506103c8610505366004614cfa565b6112e8565b34801561051657600080fd5b5061012d546001600160a01b03165b6040516001600160a01b0390911681526020016102ed565b34801561054957600080fd5b50610316610558366004614b97565b6113c7565b34801561056957600080fd5b506102e3610578366004614cfa565b6113e9565b34801561058957600080fd5b506103c8610598366004614dc3565b611488565b3480156105a957600080fd5b506102e37f0210352125167815ae2d54bb8e405f542b6cd4763cd039d14f046edad97dc03d81565b3480156105dd57600080fd5b506102e37fccc64574297998b6c3edf6078cc5e01268465ff116954e3af02ff3a70a730f4681565b34801561061157600080fd5b506105256115a4565b6103c8610628366004614e7c565b61162d565b34801561063957600080fd5b506102e36116f9565b34801561064e57600080fd5b506103c861065d366004614ee0565b6117ac565b34801561066e57600080fd5b506102e361067d366004614c9e565b611a38565b34801561068e57600080fd5b506102e361069d366004614cfa565b6001600160a01b0316600090815260fb602052604090205490565b3480156106c457600080fd5b506102e37fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156106f857600080fd5b506102e37fc15ea570bf43c187d4fde326d11355fc85c61642a0aaa03bed05b4ecc45557fe81565b34801561072c57600080fd5b5061031661073b366004614c9e565b611aab565b34801561074c57600080fd5b506102e361075b366004614c9e565b611ad6565b34801561076c57600080fd5b5061033b611b49565b34801561078157600080fd5b5061078a611b58565b6040516102ed929190614f02565b3480156107a457600080fd5b506103c86107b3366004614c08565b611ca7565b3480156107c457600080fd5b506102e3600081565b3480156107d957600080fd5b506103166107e8366004614b97565b612052565b3480156107f957600080fd5b50610316610808366004614b97565b6120d8565b34801561081957600080fd5b506102e3610828366004614b69565b6120e6565b34801561083957600080fd5b506102e3610848366004614f86565b6120f3565b34801561085957600080fd5b506102e3610868366004614f86565b61216f565b34801561087957600080fd5b506102e3610888366004614cfa565b6121e3565b34801561089957600080fd5b506102e36108a8366004614b69565b6121f8565b3480156108b957600080fd5b506102e36108c8366004614cfa565b612205565b3480156108d957600080fd5b506103c86108e8366004614fc8565b6122af565b3480156108f957600080fd5b506103c8610908366004614c9e565b612429565b34801561091957600080fd5b506102e3610928366004614cfa565b61244e565b34801561093957600080fd5b506102e361094836600461500a565b61245c565b6000805b61015f54811015610a035761015f818154811061097057610970615038565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156109c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e5919061504e565b6109ef908361507d565b9150806109fb81615090565b915050610951565b5090565b60006001600160e01b03198216637965db0b60e01b1480610a3857506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060fe8054610a4d906150a9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a79906150a9565b8015610ac65780601f10610a9b57610100808354040283529160200191610ac6565b820191906000526020600020905b815481529060010190602001808311610aa957829003601f168201915b5050505050905090565b6000610a38826000612487565b600033610aeb8185856124c1565b5060019392505050565b6000610a388260016125e5565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610b2c81612615565b61015f54610b3c906001906150e3565b82148015610b4957508115155b610b6e5760405162461bcd60e51b8152600401610b65906150f6565b60405180910390fd5b60008060005b61015f54610b84906001906150e3565b811015610d395781610bc15761015f8181548110610ba457610ba4615038565b6000918252602090912001546001600160a01b0388811691161491505b8115610c3c5761015f610bd582600161507d565b81548110610be557610be5615038565b60009182526020909120015461015f80546001600160a01b039092169183908110610c1257610c12615038565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b610c5d868683818110610c5157610c51615038565b9050602002013561261f565b61015f8281548110610c7157610c71615038565b9060005260206000200160000160146101000a81548161ffff021916908361ffff1602179055506000805160206156d783398151915261015f8281548110610cbb57610cbb615038565b6000918252602090912001546001600160a01b031682888882818110610ce357610ce3615038565b90506020020135604051610cf993929190615147565b60405180910390a1858582818110610d1357610d13615038565b9050602002013583610d25919061507d565b925080610d3181615090565b915050610b74565b508080610d85575061015f80546001600160a01b0388169190610d5e906001906150e3565b81548110610d6e57610d6e615038565b6000918252602090912001546001600160a01b0316145b610de85760405162461bcd60e51b815260206004820152602e60248201527f45546f6b656e7342756e646c655661756c743a20746f6b656e20746f2072656d60448201526d6f7665206e6f7420666f756e642160901b6064820152608401610b65565b670de0b6b3a76400008214610e0f5760405162461bcd60e51b8152600401610b6590615168565b61015f805480610e2157610e216151b9565b600082815260209020810160001990810180546001600160b01b03191690559081019091556040516000805160206156d783398151915291610e67918991908190615147565b60405180910390a16040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda919061504e565b90508015610fe057610eea6115a4565b6001600160a01b031663f3fef3a388836040518363ffffffff1660e01b8152600401610f179291906151cf565b6020604051808303816000875af1158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a919061504e565b50610fe0610f7161012d546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb919061504e565b612639565b50505050505050565b600033610ff78582856126d4565b611002858585612748565b60019150505b9392505050565b60008281526065602052604090206001015461102a81612615565b61103483836128f3565b505050565b60008061012d546110549190600160a01b900460ff166151e8565b905090565b7fccc64574297998b6c3edf6078cc5e01268465ff116954e3af02ff3a70a730f4661108381612615565b61015f5484108015611097575061015f5483105b6110b35760405162461bcd60e51b8152600401610b6590615201565b6110bb6115a4565b6001600160a01b031663f3fef3a361015f86815481106110dd576110dd615038565b6000918252602090912001546040516001600160e01b031960e084901b168152611115916001600160a01b03169086906004016151cf565b6020604051808303816000875af1158015611134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611158919061504e565b506111616115a4565b6001600160a01b03166347e7ef2461015f858154811061118357611183615038565b6000918252602090912001546001600160a01b03166111ab61012d546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156111f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611215919061504e565b6040518363ffffffff1660e01b81526004016112329291906151cf565b600060405180830381600087803b15801561124c57600080fd5b505af1158015611260573d6000803e3d6000fd5b5050505050505050565b6001600160a01b03811633146112da5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610b65565b6112e48282612979565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113305760405162461bcd60e51b8152600401610b6590615249565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113796000805160206156f7833981519152546001600160a01b031690565b6001600160a01b03161461139f5760405162461bcd60e51b8152600401610b6590615295565b6113a8816129e0565b604080516000808252602082019092526113c491839190612a0a565b50565b600033610aeb8185856113da838361245c565b6113e4919061507d565b6124c1565b60006113f6826001612b75565b61140257506000919050565b6000805b61015f548110156114815761144b8361144661015f848154811061142c5761142c615038565b6000918252602090912001546001600160a01b0316612d49565b612ebd565b935091508161145f57506000199392505050565b600019830361146f575050919050565b8061147981615090565b915050611406565b5050919050565b600054610100900460ff16158080156114a85750600054600160ff909116105b806114c25750303b1580156114c2575060005460ff166001145b6115255760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b65565b6000805460ff191660011790558015611548576000805461ff0019166101001790555b611556878787878787612ee6565b8015610fe0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b600061015f6000815481106115bb576115bb615038565b6000918252602091829020015460408051634d15eb0360e01b815290516001600160a01b0390921692634d15eb03926004808401938290030181865afa158015611609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105491906152e1565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036116755760405162461bcd60e51b8152600401610b6590615249565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166116be6000805160206156f7833981519152546001600160a01b031690565b6001600160a01b0316146116e45760405162461bcd60e51b8152600401610b6590615295565b6116ed826129e0565b6112e482826001612a0a565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117995760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610b65565b506000805160206156f783398151915290565b7f0210352125167815ae2d54bb8e405f542b6cd4763cd039d14f046edad97dc03d6117d681612615565b61015f54831080156117ea575061015f5482105b80156117f65750818314155b6118125760405162461bcd60e51b8152600401610b6590615201565b600061015f848154811061182857611828615038565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b900461ffff169181019190915261015f8054919250908490811061187757611877615038565b9060005260206000200161015f858154811061189557611895615038565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160b01b0319909216909217600160a01b9182900461ffff1690910217905561015f8054829190859081106118fb576118fb615038565b6000918252602091829020835191018054939092015161ffff16600160a01b026001600160b01b03199093166001600160a01b039091161791909117905561015f80546000805160206156d783398151915291908690811061195f5761195f615038565b60009182526020909120015461015f80546001600160a01b039092169187916119ae918390811061199257611992615038565b600091825260209091200154600160a01b900461ffff166130a0565b6040516119bd93929190615147565b60405180910390a16000805160206156d783398151915261015f84815481106119e8576119e8615038565b60009182526020909120015461015f80546001600160a01b03909216918691611a1b918390811061199257611992615038565b604051611a2a93929190615147565b60405180910390a150505050565b6000611a43826113e9565b831115611a925760405162461bcd60e51b815260206004820152601e60248201527f455243343632363a206465706f736974206d6f7265207468616e206d617800006044820152606401610b65565b6000611a9d846121f8565b9050611008338486846130b6565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000611ae1826121e3565b831115611b305760405162461bcd60e51b815260206004820152601b60248201527f455243343632363a206d696e74206d6f7265207468616e206d617800000000006044820152606401610b65565b6000611b3b846120e6565b9050611008338483876130b6565b606060ff8054610a4d906150a9565b61015f54606090819067ffffffffffffffff811115611b7957611b79614d17565b604051908082528060200260200182016040528015611ba2578160200160208202803683370190505b5061015f5490925067ffffffffffffffff811115611bc257611bc2614d17565b604051908082528060200260200182016040528015611beb578160200160208202803683370190505b50905060005b61015f54811015611ca25761015f8181548110611c1057611c10615038565b60009182526020909120015483516001600160a01b0390911690849083908110611c3c57611c3c615038565b60200260200101906001600160a01b031690816001600160a01b031681525050611c7361015f828154811061199257611992615038565b828281518110611c8557611c85615038565b602090810291909101015280611c9a81615090565b915050611bf1565b509091565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611cd181612615565b61015f54611ce090600161507d565b8214611cfe5760405162461bcd60e51b8152600401610b65906150f6565b836001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6091906152e1565b6001600160a01b0316611d716115a4565b6001600160a01b031614611d975760405162461bcd60e51b8152600401610b65906152fe565b6000805b61015f54811015611f2b5761015f8181548110611dba57611dba615038565b6000918252602090912001546001600160a01b0390811690871603611e3a5760405162461bcd60e51b815260206004820152603060248201527f45546f6b656e7342756e646c655661756c743a2065546f6b656e20616c72656160448201526f647920696e207468652062756e646c6560801b6064820152608401610b65565b848482818110611e4c57611e4c615038565b9050602002013582611e5e919061507d565b9150611e75858583818110610c5157610c51615038565b61015f8281548110611e8957611e89615038565b9060005260206000200160000160146101000a81548161ffff021916908361ffff1602179055506000805160206156d783398151915261015f8281548110611ed357611ed3615038565b6000918252602090912001546001600160a01b031682878782818110611efb57611efb615038565b90506020020135604051611f1193929190615147565b60405180910390a180611f2381615090565b915050611d9b565b5061015f5484908490818110611f4357611f43615038565b9050602002013581611f55919061507d565b61015f549091506000805160206156d7833981519152908690868682818110611f8057611f80615038565b90506020020135604051611f9693929190615147565b60405180910390a161015f6040518060400160405280876001600160a01b03168152602001611fd6878761015f80549050818110610c5157610c51615038565b61ffff908116909152825460018101845560009384526020938490208351910180549490930151909116600160a01b026001600160b01b03199093166001600160a01b0390911617919091179055670de0b6b3a7640000811461204b5760405162461bcd60e51b8152600401610b6590615168565b5050505050565b60003381612060828661245c565b9050838110156120c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b65565b6120cd82868684036124c1565b506001949350505050565b600033610aeb818585612748565b6000610a38826001612487565b60006120fe82612205565b84111561214d5760405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606401610b65565b600061215885610af5565b905061216733858588856130cb565b949350505050565b600061217a8261244e565b8411156121c95760405162461bcd60e51b815260206004820152601d60248201527f455243343632363a2072656465656d206d6f7265207468616e206d61780000006044820152606401610b65565b60006121d485610ad0565b905061216733858584896130cb565b6000610a386121f1836113e9565b60006125e5565b6000610a388260006125e5565b6000612212826000612b75565b61221e57506000919050565b6001600160a01b038216600090815260fb6020526040812054612242906000612487565b905060005b61015f548110156114815761228361015f828154811061226957612269615038565b6000918252602090912001546001600160a01b0316613183565b61228d908461507d565b925081831061229d575092915050565b806122a781615090565b915050612247565b7fc15ea570bf43c187d4fde326d11355fc85c61642a0aaa03bed05b4ecc45557fe6122d981612615565b61015f5482146122fb5760405162461bcd60e51b8152600401610b65906150f6565b6000805b61015f548110156123fb5761231f858583818110610c5157610c51615038565b61015f828154811061233357612333615038565b9060005260206000200160000160146101000a81548161ffff021916908361ffff1602179055506000805160206156d783398151915261015f828154811061237d5761237d615038565b6000918252602090912001546001600160a01b0316828787828181106123a5576123a5615038565b905060200201356040516123bb93929190615147565b60405180910390a18484828181106123d5576123d5615038565b90506020020135826123e7919061507d565b9150806123f381615090565b9150506122ff565b50670de0b6b3a764000081146124235760405162461bcd60e51b8152600401610b6590615168565b50505050565b60008281526065602052604090206001015461244481612615565b6110348383612979565b6000610a386121f183612205565b6001600160a01b03918216600090815260fc6020908152604080832093909416825291909152205490565b600061100861249461094d565b61249f90600161507d565b6124ab6000600a61543f565b60fd546124b8919061507d565b85919085613259565b6001600160a01b0383166125235760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b65565b6001600160a01b0382166125845760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b65565b6001600160a01b03838116600081815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110086125f582600a61543f565b60fd54612602919061507d565b61260a61094d565b6124b890600161507d565b6113c481336132b4565b6000610a38612634655af3107a400084615464565b61330d565b600061264c6126466115a4565b83613370565b905080156126685761266561265f6115a4565b8261354f565b90505b80156112e45760405162461bcd60e51b815260206004820152603560248201527f45546f6b656e7342756e646c655661756c743a20636f756c646e277420616c6c6044820152741bd8d85d1948185b1b081d1a194819195c1bdcda5d605a1b6064820152608401610b65565b60006126e0848461245c565b90506000198114612423578181101561273b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b65565b61242384848484036124c1565b6001600160a01b0383166127ac5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b65565b6001600160a01b03821661280e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b65565b6001600160a01b038316600090815260fb6020526040902054818110156128865760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b65565b6001600160a01b03808516600081815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906128e69086815260200190565b60405180910390a3612423565b6128fd8282611aab565b6112e45760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556129353390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6129838282611aab565b156112e45760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50416112e481612615565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612a3d576110348361364c565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612a97575060408051601f3d908101601f19168201909252612a949181019061504e565b60015b612afa5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610b65565b6000805160206156f78339815191528114612b695760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610b65565b506110348383836136e8565b6000805b61015f54811015610aeb57600061015f8281548110612b9a57612b9a615038565b6000918252602080832090910154604080516393e59dc160e01b815290516001600160a01b03909216945084926393e59dc1926004808401938290030181865afa158015612bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1091906152e1565b90506001600160a01b03811615801590612d23575084612ca857604051639051c76360e01b81526001600160a01b038381166004830152878116602483015260016044830152821690639051c76390606401602060405180830381865afa158015612c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca39190615486565b612d21565b6040516337ee20dd60e01b81526001600160a01b0383811660048301528781166024830152600160448301528216906337ee20dd90606401602060405180830381865afa158015612cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d219190615486565b155b15612d345760009350505050610a38565b50508080612d4190615090565b915050612b79565b600080826001600160a01b031663ee01a1836040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dae919061504e565b905080600003612dc2575060001992915050565b6000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e26919061504e565b90506000612e9683866001600160a01b0316636c6f45426040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e90919061504e565b9061370d565b9050808210612eaa57506000949350505050565b612eb482826150e3565b95945050505050565b60008083830184811015612ed8576000809250925050612edf565b6001925090505b9250929050565b600054610100900460ff16612f0d5760405162461bcd60e51b8152600401610b65906154a8565b612f15613744565b612f1d613744565b82612f905760405162461bcd60e51b815260206004820152603f60248201527f45546f6b656e7342756e646c655661756c743a20746865207661756c74206d7