[ { "inputs": [ { "components": [ { "internalType": "address", "name": "underlying", "type": "address" }, { "internalType": "address", "name": "short", "type": "address" }, { "internalType": "address", "name": "cTokenLend", "type": "address" }, { "internalType": "address", "name": "cTokenBorrow", "type": "address" }, { "internalType": "address", "name": "uniPair", "type": "address" }, { "internalType": "address", "name": "uniFarm", "type": "address" }, { "internalType": "address", "name": "farmToken", "type": "address" }, { "internalType": "uint256", "name": "farmId", "type": "uint256" }, { "internalType": "address", "name": "farmRouter", "type": "address" }, { "internalType": "address", "name": "comptroller", "type": "address" }, { "internalType": "address", "name": "lendRewardRouter", "type": "address" }, { "internalType": "address", "name": "lendRewardToken", "type": "address" }, { "internalType": "address", "name": "vault", "type": "address" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "maxTvl", "type": "uint256" } ], "internalType": "struct Config", "name": "config", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "contract IERC20[]", "name": "tokens", "type": "address[]" } ], "name": "EmergencyWithdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "harvested", "type": "uint256" } ], "name": "Harvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "HarvestedToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isManager", "type": "bool" } ], "name": "ManagerUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "shortPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tvlBeforeRebalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "positionOffset", "type": "uint256" } ], "name": "Rebalance", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "startLoanHealth", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "updatedLoanHealth", "type": "uint256" } ], "name": "RebalanceLoan", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "loanHealth", "type": "uint256" } ], "name": "SetMaxPriceMismatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "loanHealth", "type": "uint256" } ], "name": "SetMaxTvl", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "loanHealth", "type": "uint256" } ], "name": "SetRebalanceThreshold", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "collateralRatio", "type": "uint256" } ], "name": "SetSafeCollateralRaio", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "vault", "type": "address" } ], "name": "VaultUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "loanHealth", "type": "uint256" } ], "name": "setMinLoanHealth", "type": "event" }, { "inputs": [], "name": "BASE_UNIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOfUnderlying", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "balanceOfUnderlying", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cTokenBorrow", "outputs": [ { "internalType": "contract ICTokenErc20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cTokenLend", "outputs": [ { "internalType": "contract ICTokenErc20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "closePosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "comptroller", "outputs": [ { "internalType": "contract IComptroller", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "contract IERC20[]", "name": "tokens", "type": "address[]" } ], "name": "emergencyWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "farmRouter", "outputs": [ { "internalType": "contract IUniswapV2Router01", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCollateralRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMaxTvl", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPositionOffset", "outputs": [ { "internalType": "uint256", "name": "positionOffset", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPricePerShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTVL", "outputs": [ { "internalType": "uint256", "name": "tvl", "type": "uint256" }, { "internalType": "uint256", "name": "collateralBalance", "type": "uint256" }, { "internalType": "uint256", "name": "borrowPosition", "type": "uint256" }, { "internalType": "uint256", "name": "borrowBalance", "type": "uint256" }, { "internalType": "uint256", "name": "lpBalance", "type": "uint256" }, { "internalType": "uint256", "name": "underlyingBalance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalTVL", "outputs": [ { "internalType": "uint256", "name": "tvl", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getUnderlyingShortReserves", "outputs": [ { "internalType": "uint256", "name": "reserveA", "type": "uint256" }, { "internalType": "uint256", "name": "reserveB", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address[]", "name": "path", "type": "address[]" }, { "internalType": "uint256", "name": "min", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct HarvestSwapParms[]", "name": "uniParams", "type": "tuple[]" }, { "components": [ { "internalType": "address[]", "name": "path", "type": "address[]" }, { "internalType": "uint256", "name": "min", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct HarvestSwapParms[]", "name": "lendingParams", "type": "tuple[]" } ], "name": "harvest", "outputs": [ { "internalType": "uint256[]", "name": "farmHarvest", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "lendHarvest", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isCEther", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "isIntialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "isManager", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastHarvest", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lendFarmRouter", "outputs": [ { "internalType": "contract IUniswapV2Router01", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "loanHealth", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxPriceMismatch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minLoanHealth", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "errCode", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "oracle", "outputs": [ { "internalType": "contract ICompPriceOracle", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pair", "outputs": [ { "internalType": "contract IUniswapV2Pair", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rebalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rebalanceLoan", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rebalanceThreshold", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "redeemUnderlying", "outputs": [ { "internalType": "uint256", "name": "errCode", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "safeCollateralRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bool", "name": "_isManager", "type": "bool" } ], "name": "setManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxPriceMismatch_", "type": "uint256" } ], "name": "setMaxPriceMismatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxTvl_", "type": "uint256" } ], "name": "setMaxTvl", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minLoanHealth_", "type": "uint256" } ], "name": "setMinLoanHeath", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "rebalanceThreshold_", "type": "uint16" } ], "name": "setRebalanceThreshold", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "safeCollateralRatio_", "type": "uint256" } ], "name": "setSafeCollateralRatio", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "vault_", "type": "address" } ], "name": "setVault", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "short", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "underlying", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vault", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040526096600c55670e27c49886e60000600d55600e805461ffff19166101901790556120d06010553480156200003757600080fd5b5060405162006235380380620062358339810160408190526200005a9162000e03565b6101808101516101a08201516101c0830151620000773362000147565b60018055600480546001600160a01b0319166001600160a01b0385161790558151620000ab90600790602085019062000c24565b508051620000c190600690602084019062000c24565b505050608082015160a083015161010084015160c085015160e0860151620000ea955062000197565b6200010a816101200151826040015183606001516200021c60201b60201c565b62000126816101400151826101600151620002e860201b60201c565b805160208201516101e0830151620001409291906200035d565b5062001330565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460ff1615620001c65760405162461bcd60e51b8152600401620001bd9062000fa5565b60405180910390fd5b601880546001600160a01b03199081166001600160a01b039687161790915560198054821694861694909417909355601a8054841692851692909217909155601b80549092169390921692909217909155601c55565b601280546001600160a01b038085166001600160a01b03199283161790925560138054848416908316179055601480549286169290911682179055604080516307dc0d1d60e41b81529051637dc0d1d0916004808201926020929091908290030181865afa15801562000293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b9919062000fca565b601580546001600160a01b0319166001600160a01b0392909216919091179055620002e36200050b565b505050565b60025460ff16156200030e5760405162461bcd60e51b8152600401620001bd9062000fa5565b601780546001600160a01b03199081166001600160a01b0384811691821790935560168054909216928516928317909155620003599160001962000607602090811b620019ea17901c565b5050565b60025460ff1615620003835760405162461bcd60e51b8152600401620001bd9062000fa5565b600a80546001600160a01b038086166001600160a01b03199283168117909355600b805491861691909216179055620003cf9030600019620019ea62000607602090811b91909117901c565b620003d962000752565b620003e690600a620010fd565b600955620003f481620007c8565b7f5ceaf8b7b0d35f85ef4df565057cd318e70d9f8681f89425a2d5e09c1c70a7f9600d546040516200042891815260200190565b60405180910390a17f3e87fa3180c1babd204ce79375729d7a6694a2d2f0fb3e250f9138488ed066bb600c546040516200046491815260200190565b60405180910390a1600e5460405161ffff90911681527f36c98a54ec4f90fe58a67bf25cfc1691dbd53639eee3513536d83e8d34fb0a9b9060200160405180910390a17f4812bd1abd1ad4ea905335e3af941ec67d6d51ecb36ab58f23af0af081aac57b601054604051620004db91815260200190565b60405180910390a1620004ed62000870565b620004f7620008de565b50506002805461ff00191661010017905550565b6040805160028082526060820183526000926020830190803683375050601254919250506001600160a01b0316816000815181106200054e576200054e6200110e565b6001600160a01b03928316602091820292909201015260135416816001815181106200057e576200057e6200110e565b6001600160a01b039283166020918202929092010152601454604051631853304760e31b815291169063c299823890620005bd90849060040162001124565b6000604051808303816000875af1158015620005dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000359919081019062001173565b801580620006865750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e9062000640903090869060040162001223565b602060405180830381865afa1580156200065e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068491906200123d565b155b620006fa5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401620001bd565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620002e3918591620009ba16565b600a546040805163313ce56760e01b815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156200079d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007c3919062001257565b905090565b6000546001600160a01b0316331480620007f657503360009081526008602052604090205460ff1615156001145b620008355760405162461bcd60e51b815260206004820152600e60248201526d0a6e8e4c2e874409c9ebe82aaa8960931b6044820152606401620001bd565b600f8190556040518181527f13d3e08a22782064d3062f92ff1101a623b60e3bf91f236b5d1e9fdddfc12a129060200160405180910390a150565b601254620008b5906001600160a01b031660001962000897600a546001600160a01b031690565b6001600160a01b03166200060760201b620019ea179092919060201c565b601354620008dc906001600160a01b031660001962000897600b546001600160a01b031690565b565b601854601b546200090b916001600160a01b03918216911660001962000607602090811b620019ea17901c565b601a54601954604051636eb1769f60e11b81526001600160a01b039283169263dd62ed3e92620009449230929091169060040162001223565b602060405180830381865afa15801562000962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200098891906200123d565b620008dc57601954601a54620008dc916001600160a01b03918216911660001962000607602090811b620019ea17901c565b600062000a16826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662000a9860201b62001b2a179092919060201c565b805190915015620002e3578080602001905181019062000a3791906200127c565b620002e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620001bd565b606062000aa9848460008562000ab3565b90505b9392505050565b60608247101562000b165760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401620001bd565b843b62000b665760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001bd565b600080866001600160a01b0316858760405162000b849190620012a0565b60006040518083038185875af1925050503d806000811462000bc3576040519150601f19603f3d011682016040523d82523d6000602084013e62000bc8565b606091505b50909250905062000bdb82828662000be6565b979650505050505050565b6060831562000bf757508162000aac565b82511562000c085782518084602001fd5b8160405162461bcd60e51b8152600401620001bd9190620012be565b82805462000c3290620012f3565b90600052602060002090601f01602090048101928262000c56576000855562000ca1565b82601f1062000c7157805160ff191683800117855562000ca1565b8280016001018555821562000ca1579182015b8281111562000ca157825182559160200191906001019062000c84565b5062000caf92915062000cb3565b5090565b5b8082111562000caf576000815560010162000cb4565b634e487b7160e01b600052604160045260246000fd5b60405161020081016001600160401b038111828210171562000d065762000d0662000cca565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000d375762000d3762000cca565b604052919050565b80516001600160a01b038116811462000d5757600080fd5b919050565b60005b8381101562000d7957818101518382015260200162000d5f565b8381111562000d89576000848401525b50505050565b600082601f83011262000da157600080fd5b81516001600160401b0381111562000dbd5762000dbd62000cca565b62000dd2601f8201601f191660200162000d0c565b81815284602083860101111562000de857600080fd5b62000dfb82602083016020870162000d5c565b949350505050565b60006020828403121562000e1657600080fd5b81516001600160401b038082111562000e2e57600080fd5b90830190610200828603121562000e4457600080fd5b62000e4e62000ce0565b62000e598362000d3f565b815262000e696020840162000d3f565b602082015262000e7c6040840162000d3f565b604082015262000e8f6060840162000d3f565b606082015262000ea26080840162000d3f565b608082015262000eb560a0840162000d3f565b60a082015262000ec860c0840162000d3f565b60c082015260e083015160e082015261010062000ee781850162000d3f565b9082015261012062000efb84820162000d3f565b9082015261014062000f0f84820162000d3f565b9082015261016062000f2384820162000d3f565b9082015261018062000f3784820162000d3f565b908201526101a0838101518381111562000f5057600080fd5b62000f5e8882870162000d8f565b8284015250506101c0808401518381111562000f7957600080fd5b62000f878882870162000d8f565b91830191909152506101e09283015192810192909252509392505050565b6020808252600b908201526a125392551250531256915160aa1b604082015260600190565b60006020828403121562000fdd57600080fd5b62000aac8262000d3f565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200103f57816000190482111562001023576200102362000fe8565b808516156200103157918102915b93841c939080029062001003565b509250929050565b6000826200105857506001620010f7565b816200106757506000620010f7565b81600181146200108057600281146200108b57620010ab565b6001915050620010f7565b60ff8411156200109f576200109f62000fe8565b50506001821b620010f7565b5060208310610133831016604e8410600b8410161715620010d0575081810a620010f7565b620010dc838362000ffe565b8060001904821115620010f357620010f362000fe8565b0290505b92915050565b600062000aac60ff84168362001047565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015620011675783516001600160a01b03168352928401929184019160010162001140565b50909695505050505050565b600060208083850312156200118757600080fd5b82516001600160401b03808211156200119f57600080fd5b818501915085601f830112620011b457600080fd5b815181811115620011c957620011c962000cca565b8060051b9150620011dc84830162000d0c565b8181529183018401918481019088841115620011f757600080fd5b938501935b838510156200121757845182529385019390850190620011fc565b98975050505050505050565b6001600160a01b0392831681529116602082015260400190565b6000602082840312156200125057600080fd5b5051919050565b6000602082840312156200126a57600080fd5b815160ff8116811462000aac57600080fd5b6000602082840312156200128f57600080fd5b8151801515811462000aac57600080fd5b60008251620012b481846020870162000d5c565b9190910192915050565b6020815260008251806020840152620012df81604085016020870162000d5c565b601f01601f19169190910160400192915050565b600181811c908216806200130857607f821691505b602082108114156200132a57634e487b7160e01b600052602260045260246000fd5b50919050565b614ef580620013406000396000f3fe60806040526004361061023d5760003560e01c806306fdde03146102495780630c021ae5146102745780630d55046c146102975780630e962f00146102be57806314b0750b146102d45780631585e0b6146102f657806318160ddd14610316578063313ce5671461032b578063358d6a041461035257806338bea4cb146103675780633af9e6691461037c5780633bf295cc1461039c5780633d68175c146103b15780633dcf1342146103c65780633dfe9f6a146103e65780634880f951146104145780635fe3b5671461042957806366be952d1461043e5780636817031b146104545780636f307dc314610474578063711326ce14610489578063715018a6146104a95780637d7c2a1c146104be5780637da64483146104d35780637dc0d1d0146104fd5780637ffe28e314610512578063852a12e31461052757806386aceac7146105475780638da5cb5b1461055d57806395d89b411461057257806397b3fcaa14610587578063a0712d68146105c9578063a52602b9146105e9578063a5e90eee146105fe578063a8aa1b311461061e578063ac784ddc14610633578063b580a12814610647578063c393d0e31461065c578063cb50087f14610671578063cd377c5314610691578063d539fe4b146106a6578063de747e5a146106bb578063f1a392da146106db578063f20aea0f146106f1578063f2fde38b1461071f578063f3ae24151461073f578063f9e40ac414610778578063fbfa77cf1461079b578063fd6bac70146107b0578063fec18b3a146107c557600080fd5b3661024457005b600080fd5b34801561025557600080fd5b5061025e6107da565b60405161026b91906146c6565b60405180910390f35b34801561028057600080fd5b50610289610868565b60405190815260200161026b565b3480156102a357600080fd5b506019546001600160a01b03165b60405161026b91906146d9565b3480156102ca57600080fd5b5061028960095481565b3480156102e057600080fd5b506102f46102ef3660046146ed565b61087d565b005b34801561030257600080fd5b506102f46103113660046146ed565b6108f1565b34801561032257600080fd5b50600554610289565b34801561033757600080fd5b5061034061095b565b60405160ff909116815260200161026b565b34801561035e57600080fd5b506102896109ce565b34801561037357600080fd5b506102b16109f3565b34801561038857600080fd5b5061028961039736600461471b565b610a02565b3480156103a857600080fd5b50610289610a13565b3480156103bd57600080fd5b50610289610a7c565b3480156103d257600080fd5b506102f46103e136600461477c565b610abd565b3480156103f257600080fd5b50600e546104019061ffff1681565b60405161ffff909116815260200161026b565b34801561042057600080fd5b50601154610289565b34801561043557600080fd5b506102b1610c24565b34801561044a57600080fd5b50610289600c5481565b34801561046057600080fd5b506102f461046f36600461471b565b610c33565b34801561048057600080fd5b506102b1610cac565b34801561049557600080fd5b506102f46104a43660046146ed565b610cbb565b3480156104b557600080fd5b506102f4610dad565b3480156104ca57600080fd5b506102f4610de8565b3480156104df57600080fd5b506002546104ed9060ff1681565b604051901515815260200161026b565b34801561050957600080fd5b506102b1610fe4565b34801561051e57600080fd5b506102f4610ff3565b34801561053357600080fd5b506102896105423660046146ed565b611117565b34801561055357600080fd5b50610289600d5481565b34801561056957600080fd5b506102b161117e565b34801561057e57600080fd5b5061025e61118d565b34801561059357600080fd5b5061059c61119a565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161026b565b3480156105d557600080fd5b506102896105e43660046146ed565b611323565b3480156105f557600080fd5b506102b161137c565b34801561060a57600080fd5b506102f46106193660046147de565b61138b565b34801561062a57600080fd5b506102b1611419565b34801561063f57600080fd5b5060006104ed565b34801561065357600080fd5b50610289611428565b34801561066857600080fd5b506102f461152b565b34801561067d57600080fd5b506102f461068c3660046146ed565b611615565b34801561069d57600080fd5b506102896116a1565b3480156106b257600080fd5b50601054610289565b3480156106c757600080fd5b506102f46106d6366004614817565b6116d1565b3480156106e757600080fd5b5061028960035481565b3480156106fd57600080fd5b5061071161070c36600461483b565b611744565b60405161026b9291906148e1565b34801561072b57600080fd5b506102f461073a36600461471b565b6118e6565b34801561074b57600080fd5b506104ed61075a36600461471b565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561078457600080fd5b5061078d611986565b60405161026b92919061490f565b3480156107a757600080fd5b506102b16119bd565b3480156107bc57600080fd5b506102b16119cc565b3480156107d157600080fd5b506102b16119db565b600680546107e79061491d565b80601f01602080910402602001604051908101604052809291908181526020018280546108139061491d565b80156108605780601f1061083557610100808354040283529160200191610860565b820191906000526020600020905b81548152906001019060200180831161084357829003601f168201915b505050505081565b600061087261119a565b509395945050505050565b3361088661117e565b6001600160a01b0316146108b55760405162461bcd60e51b81526004016108ac90614952565b60405180910390fd5b60108190556040518181527f4812bd1abd1ad4ea905335e3af941ec67d6d51ecb36ab58f23af0af081aac57b906020015b60405180910390a150565b336108fa61117e565b6001600160a01b0316146109205760405162461bcd60e51b81526004016108ac90614952565b600d8190556040518181527f5ceaf8b7b0d35f85ef4df565057cd318e70d9f8681f89425a2d5e09c1c70a7f9906020016108e6565b60055490565b600a546040805163313ce56760e01b815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190614987565b905090565b60006109c9600f546109ee6109e96109e4611b43565b611bae565b611cba565b611ce8565b600b546001600160a01b031690565b6000610a0d60115490565b92915050565b600080610a216109e4611cfe565b90506000610a2d611d50565b90506000610a39611e45565b610a4b84670de0b6b3a76400006149c0565b610a5591906149df565b905080610a6a83670de0b6b3a76400006149c0565b610a7491906149df565b935050505090565b600080610a8860115490565b905060055460001415610a9d57505060095490565b600554600954610aad90836149c0565b610ab791906149df565b91505090565b610ac56119bd565b6001600160a01b0316336001600160a01b031614610af55760405162461bcd60e51b81526004016108ac90614a01565b60005b81811015610bcb576000838383818110610b1457610b14614a2c565b9050602002016020810190610b29919061471b565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610b5991906146d9565b602060405180830381865afa158015610b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9a9190614a42565b90508015610bb657610bb66001600160a01b0383168783611ecb565b50508080610bc390614a5b565b915050610af8565b504715610bdc57610bdc3347611eea565b826001600160a01b03167f2b06144d62a3a5785ec284ed392b3d106610ae2ce7af270417c4ca38277571048383604051610c17929190614a76565b60405180910390a2505050565b6014546001600160a01b031690565b33610c3c61117e565b6001600160a01b031614610c625760405162461bcd60e51b81526004016108ac90614952565b600480546001600160a01b0319166001600160a01b0383169081179091556040517fdabed91cf547ed2ee836d5787bae42fc3bca488166c65791051105490fbcf7ca90600090a250565b600a546001600160a01b031690565b610cc361117e565b6001600160a01b0316336001600160a01b03161480610cf657503360009081526008602052604090205460ff1615156001145b610d125760405162461bcd60e51b81526004016108ac90614ac4565b610d1a61117e565b6001600160a01b0316336001600160a01b03161480610d3b57508061012c10155b610d785760405162461bcd60e51b815260206004820152600e60248201526d484c503a20544f4f204c4152474560901b60448201526064016108ac565b600c8190556040518181527f3e87fa3180c1babd204ce79375729d7a6694a2d2f0fb3e250f9138488ed066bb906020016108e6565b33610db661117e565b6001600160a01b031614610ddc5760405162461bcd60e51b81526004016108ac90614952565b610de66000611f3b565b565b610df061117e565b6001600160a01b0316336001600160a01b03161480610e2357503360009081526008602052604090205460ff1615156001145b610e3f5760405162461bcd60e51b81526004016108ac90614ac4565b6000610e52670de0b6b3a7640000611f8b565b90506000610e67670de0b6b3a7640000611bae565b9050818111610e77578082610e7a565b81815b600c54919350915081612710610e908583614aec565b610e9a91906149c0565b610ea491906149df565b10610ec15760405162461bcd60e51b81526004016108ac90614b03565b60026001541415610ee45760405162461bcd60e51b81526004016108ac90614b30565b60026001556000610ef3611fbe565b90506000610eff611428565b600e5490915061ffff168111610f495760405162461bcd60e51b815260206004820152600f60248201526e09098a07440a48a845aa890a48aa69608b1b60448201526064016108ac565b81610f55575050610fc9565b6000610f60836121ab565b9050610f7581610f708186614aec565b6121ce565b7fe0b4077da7dfa5015ff10fab6a214f37acc1b23d745f30336942d17e07848c6b610fa7670de0b6b3a7640000611f8b565b6040805191825260208201859052810185905260600160405180910390a15050505b60018055610fd561119a565b50505060119290925550505050565b6015546001600160a01b031690565b600260015414156110165760405162461bcd60e51b81526004016108ac90614b30565b60026001556000611025610a13565b9050600d548111156110655760405162461bcd60e51b8152602060048201526009602482015268484c503a205341464560b81b60448201526064016108ac565b600061106f6122f9565b5090506000600d54612710838561251c61108991906149c0565b61109391906149c0565b61109d91906149df565b6110a791906149df565b90506000806110b5836123ba565b915091506110c2816124c8565b6110cb826125c3565b337fdacd0a02d11128b25d6c3de23e91f71aa9dd5620c6f5c69f35a18d15e1168468866110f6610a13565b60405161110492919061490f565b60405180910390a2505060018055505050565b60006111216119bd565b6001600160a01b0316336001600160a01b0316146111515760405162461bcd60e51b81526004016108ac90614a01565b600061115c836125f8565b905080600560008282546111709190614aec565b909155506000949350505050565b6000546001600160a01b031690565b600780546107e79061491d565b6000806000806000806111ab611d50565b94506111b5611cfe565b93506111c084611f8b565b600b546040516370a0823160e01b81529194506000916001600160a01b03909116906370a08231906111f69030906004016146d9565b602060405180830381865afa158015611213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112379190614a42565b90506000811561124f5761124a82611bae565b611252565b60005b905060008061125f6122f9565b9150915061126c81611f8b565b6112769083614b67565b600a546040516370a0823160e01b81529197506001600160a01b0316906370a08231906112a79030906004016146d9565b602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e89190614a42565b94508285886112f7898d614b67565b6113019190614aec565b61130b9190614b67565b6113159190614b67565b995050505050909192939495565b600061132d6119bd565b6001600160a01b0316336001600160a01b03161461135d5760405162461bcd60e51b81526004016108ac90614a01565b60006113688361287f565b905080600560008282546111709190614b67565b6012546001600160a01b031690565b3361139461117e565b6001600160a01b0316146113ba5760405162461bcd60e51b81526004016108ac90614952565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f2458f684567d238b66deaa0126265bf3becabda0caaab7ebdda6b1794614a2d3910160405180910390a25050565b601b546001600160a01b031690565b6000806114336122f9565b9150506000611440611cfe565b600b546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906114769030906004016146d9565b602060405180830381865afa158015611493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b79190614a42565b6114c19084614b67565b9050818114156114d5576000935050505090565b816114e557612710935050505090565b81811161151357816127106114fa8383614aec565b61150491906149c0565b61150e91906149df565b610a74565b816127106115218284614aec565b610a6a91906149c0565b61153361117e565b6001600160a01b0316336001600160a01b0316148061156657503360009081526008602052604090205460ff1615156001145b6115825760405162461bcd60e51b81526004016108ac90614ac4565b6000611595670de0b6b3a7640000611f8b565b905060006115aa670de0b6b3a7640000611bae565b90508181116115ba5780826115bd565b81815b600c549193509150816127106115d38583614aec565b6115dd91906149c0565b6115e791906149df565b106116045760405162461bcd60e51b81526004016108ac90614b03565b61160c612a95565b50610fd561119a565b61161d61117e565b6001600160a01b0316336001600160a01b0316148061165057503360009081526008602052604090205460ff1615156001145b61166c5760405162461bcd60e51b81526004016108ac90614ac4565b600f8190556040518181527f13d3e08a22782064d3062f92ff1101a623b60e3bf91f236b5d1e9fdddfc12a12906020016108e6565b6000670de0b6b3a76400006116b560105490565b6116bd611e45565b6116c791906149c0565b6109c991906149df565b336116da61117e565b6001600160a01b0316146117005760405162461bcd60e51b81526004016108ac90614952565b600e805461ffff191661ffff83169081179091556040519081527f36c98a54ec4f90fe58a67bf25cfc1691dbd53639eee3513536d83e8d34fb0a9b906020016108e6565b60608061174f61117e565b6001600160a01b0316336001600160a01b0316148061178257503360009081526008602052604090205460ff1615156001145b61179e5760405162461bcd60e51b81526004016108ac90614ac4565b60006117b1670de0b6b3a7640000611f8b565b905060006117c6670de0b6b3a7640000611bae565b90508181116117d65780826117d9565b81815b600c549193509150816127106117ef8583614aec565b6117f991906149c0565b61180391906149df565b106118205760405162461bcd60e51b81526004016108ac90614b03565b600260015414156118435760405162461bcd60e51b81526004016108ac90614b30565b6002600155600061185261119a565b50939450508a15925061186f9150505761186c8989612cae565b94505b85156118825761187f8787612f57565b93505b61188d6000196131c5565b6040518181527f80f97f878e16410266694f134ddf012f2be424f54f8b5cafa107eccc51d00d589060200160405180910390a150600180556118cd61119a565b5050506011929092555093989297509195505050505050565b336118ef61117e565b6001600160a01b0316146119155760405162461bcd60e51b81526004016108ac90614952565b6001600160a01b03811661197a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ac565b61198381611f3b565b50565b6000806119b4611994610cac565b61199c6109f3565b6119a4611419565b6001600160a01b031691906133c6565b90939092509050565b6004546001600160a01b031690565b6013546001600160a01b031690565b6016546001600160a01b031690565b801580611a645750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a629190614a42565b155b611acf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016108ac565b611b258363095ea7b360e01b8484604051602401611aee929190614b7f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613486565b505050565b6060611b398484600085613558565b90505b9392505050565b6000611b4d6119cc565b6001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190614a42565b6000611bb8610fe4565b6001600160a01b031663fc57d4df611bce61137c565b6040518263ffffffff1660e01b8152600401611bea91906146d9565b602060405180830381865afa158015611c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2b9190614a42565b611c33610fe4565b6001600160a01b031663fc57d4df611c496119cc565b6040518263ffffffff1660e01b8152600401611c6591906146d9565b602060405180830381865afa158015611c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca69190614a42565b611cb090846149c0565b610a0d91906149df565b600080611cc56116a1565b905080611cd481612710614b67565b611cde90856149c0565b611b3c91906149df565b6000818310611cf75781611b3c565b5090919050565b6000611d086119cc565b6001600160a01b03166395dd9193306040518263ffffffff1660e01b8152600401611d3391906146d9565b602060405180830381865afa158015611b8a573d6000803e3d6000fd5b600080611d5b61137c565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611d8691906146d9565b602060405180830381865afa158015611da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc79190614a42565b9050670de0b6b3a7640000611dda61137c565b6001600160a01b031663182df0f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3b9190614a42565b610aad90836149c0565b600080611e50610c24565b6001600160a01b0316638e8f294b611e6661137c565b6040518263ffffffff1660e01b8152600401611e8291906146d9565b606060405180830381865afa158015611e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec39190614b98565b509392505050565b611b258363a9059cbb60e01b8484604051602401611aee929190614b7f565b600080600080600085875af1905080611b255760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b60448201526064016108ac565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008115611fb657600b54600a54611fb19184916001600160a01b039182169116613680565b610a0d565b600092915050565b600080611fc96136b8565b90506000611fd561370c565b90506000611fe282611bae565b600b546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906120189030906004016146d9565b602060405180830381865afa158015612035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120599190614a42565b9050600081156120e057600b546040516370a0823160e01b81526120db916001600160a01b0316906370a08231906120959030906004016146d9565b602060405180830381865afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d69190614a42565b611f8b565b6120e3565b60005b905060006120ef6122f9565b50600a546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906121269030906004016146d9565b602060405180830381865afa158015612143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121679190614a42565b90508281866121778560026149c0565b612181908b614b67565b61218b9190614aec565b6121959190614b67565b61219f9190614b67565b97505050505050505090565b6000806121b66116a1565b90506121c481612710614b67565b611cde82856149c0565b60006121d983613741565b905060006121e5611cfe565b9050808211156122365761221160006121fe86866137dc565b1161220957846123ba565b60005b6123ba565b505061221c83613850565b50612231905061222c8284614aec565b6138b2565b6122ea565b808210156122ea5761224860006123ba565b5050600b546040516370a0823160e01b81526000916122cc916001600160a01b03909116906370a08231906122819030906004016146d9565b602060405180830381865afa15801561229e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c29190614a42565b6109ee8585614aec565b905080156122dd576122dd816124c8565b6122e684613850565b5050505b6122f3826131c5565b50505050565b6000806000612306613998565b9050600080612313611986565b915091506000612321611419565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561235e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123829190614a42565b90508061238f85856149c0565b61239991906149df565b9550806123a685846149c0565b6123b091906149df565b9450505050509091565b60008060006123c76122f9565b5090508084106123dd5750600093849350915050565b60006123e7613998565b90506000826123f687846149c0565b61240091906149df565b9050600061240e8284614aec565b9050600061241a611419565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161244591906146d9565b602060405180830381865afa158015612462573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124869190614a42565b9050808211156124a2576124a261249d8284614aec565b613a2d565b81156124b6576124b182613a95565b6124ba565b6000805b965096505050505050915091565b6124d26001613b8b565b15612547576124df6109f3565b6001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040161250c91815260200190565b600060405180830381600087803b15801561252657600080fd5b505af115801561253a573d6000803e3d6000fd5b5050505061198381613ba7565b61254f6119cc565b6001600160a01b0316630e752702826040518263ffffffff1660e01b815260040161257c91815260200190565b6020604051808303816000875af115801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf9190614a42565b5050565b6125cb61137c565b6001600160a01b031663a0712d68826040518263ffffffff1660e01b815260040161257c91815260200190565b60008061260c670de0b6b3a7640000611f8b565b90506000612621670de0b6b3a7640000611bae565b9050818111612631578082612634565b81815b600c5491935091508161271061264a8583614aec565b61265491906149c0565b61265e91906149df565b1061267b5760405162461bcd60e51b81526004016108ac90614b03565b6002600154141561269e5760405162461bcd60e51b81526004016108ac90614b30565b6002600155836126b15760009250612860565b60006126bb611fbe565b9050806126cc576000935050612860565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a08231906126fd9030906004016146d9565b602060405180830381865afa15801561271a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273e9190614a42565b9050858110156127bb576000600019871461277557612770836103e86127668a6103ed6149c0565b6109ee91906149df565b612777565b825b9050828110156127a3578161279461278f8284614aec565b613be9565b61279e9190614b67565b6127ab565b6127ab612a95565b90506127b78188611ce8565b9650505b6127c361119a565b5093955061280293508592506127db91506109559050565b6127e6896001614b67565b6127f091906149c0565b6127fa91906149df565b600554611ce8565b9450612824306128106119bd565b600a546001600160a01b0316919089613c79565b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243643387604051612855929190614b7f565b60405180910390a150505b6001805561286c61119a565b5050506011929092555092949350505050565b600080612893670de0b6b3a7640000611f8b565b905060006128a8670de0b6b3a7640000611bae565b90508181116128b85780826128bb565b81815b600c549193509150816127106128d18583614aec565b6128db91906149c0565b6128e591906149df565b106129025760405162461bcd60e51b81526004016108ac90614b03565b600260015414156129255760405162461bcd60e51b81526004016108ac90614b30565b6002600155836129385760009250612860565b6000612942611fbe565b905061294c6109ce565b6129568287614b67565b11156129985760405162461bcd60e51b81526020600482015260116024820152701213140e8813d5915497d3505617d51593607a1b60448201526064016108ac565b600554156129c45780856129ab60055490565b6129b591906149c0565b6129bf91906149df565b6129c6565b845b600a549094506001600160a01b03166323b872dd6129e26119bd565b30886040518463ffffffff1660e01b8152600401612a0293929190614bdb565b6020604051808303816000875af1158015612a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a459190614bff565b50612a4f85613c9a565b7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3386604051612a80929190614b7f565b60405180910390a1506001805561286c61119a565b6000612aa160006123ba565b50506000612aad61370c565b600b546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190612ae39030906004016146d9565b602060405180830381865afa158015612b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b249190614a42565b905080821115612b6d57612b67612b3b8284614aec565b600a54600b546001600160a01b039182169116612b56611419565b6001600160a01b0316929190613cf3565b50612bb0565b81811115612bb057612bae612b828383614aec565b600b54600a546001600160a01b039182169116612b9d611419565b6001600160a01b0316929190613dd2565b505b600b546040516370a0823160e01b8152612c28916001600160a01b0316906370a0823190612be29030906004016146d9565b602060405180830381865afa158015612bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c239190614a42565b6124c8565b6000612c326136b8565b9050612c3d81613e33565b600a546040516370a0823160e01b81526001600160a01b03909116906370a0823190612c6d9030906004016146d9565b602060405180830381865afa158015612c8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a749190614a42565b601854601c54604051631c57762b60e31b81526060926001600160a01b03169163e2bbb15891612ce4919060009060040161490f565b600060405180830381600087803b158015612cfe57600080fd5b505af1158015612d12573d6000803e3d6000fd5b5060019250612d1f915050565b604051908082528060200260200182016040528015612d48578160200160208202803683370190505b50601a546040516370a0823160e01b81529192506001600160a01b0316906370a0823190612d7a9030906004016146d9565b602060405180830381865afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190614a42565b81600081518110612dce57612dce614a2c565b60200260200101818152505080600081518110612ded57612ded614a2c565b602002602001015160001415612e0257610a0d565b601954612e64906001600160a01b03168484600081612e2357612e23614a2c565b9050602002810190612e359190614c32565b601a5484516001600160a01b03909116908590600090612e5757612e57614a2c565b6020026020010151613ead565b601a5481516001600160a01b0390911690600080516020614ea0833981519152908390600090612e9657612e96614a2c565b6020026020010151604051612ead91815260200190565b60405180910390a2478015612f5057612ec46109f3565b6001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612efe57600080fd5b505af1158015612f12573d6000803e3d6000fd5b5050505050612f1f6109f3565b6001600160a01b0316600080516020614ea083398151915282604051612f4791815260200190565b60405180910390a25b5092915050565b6060612f61610c24565b6001600160a01b0316630952c5636000306040518363ffffffff1660e01b8152600401612f8f929190614c52565b600060405180830381600087803b158015612fa957600080fd5b505af1158015612fbd573d6000803e3d6000fd5b5060019250612fca915050565b604051908082528060200260200182016040528015612ff3578160200160208202803683370190505b506017546040516370a0823160e01b81529192506001600160a01b0316906370a08231906130259030906004016146d9565b602060405180830381865afa158015613042573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130669190614a42565b8160008151811061307957613079614a2c565b60200260200101818152505060008160008151811061309a5761309a614a2c565b6020026020010151111561314c576130fa6130b36119db565b848460008181106130c6576130c6614a2c565b90506020028101906130d89190614c32565b60175484516001600160a01b03909116908590600090612e5757612e57614a2c565b60175481516001600160a01b0390911690600080516020614ea083398151915290839060009061312c5761312c614a2c565b602002602001015160405161314391815260200190565b60405180910390a25b613154610c24565b6001600160a01b0316630952c5636001306040518363ffffffff1660e01b8152600401613182929190614c52565b600060405180830381600087803b15801561319c57600080fd5b505af11580156131b0573d6000803e3d6000fd5b504792505081159050612f5057612ec46109f3565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a08231906131f69030906004016146d9565b602060405180830381865afa158015613213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132379190614a42565b600b546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061326d9030906004016146d9565b602060405180830381865afa15801561328a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ae9190614a42565b905060006132ba6122f9565b915050808410156132cb5750505050565b60006132f960026132db86614052565b6132e59086614b67565b6132ef91906149df565b6109ee8488614aec565b9050600061330682611f8b565b90508481101561334c5761333861331d8287614aec565b600a54600b546001600160a01b039182169116612b9d611419565b6133429085614b67565b9350809450613371565b8184111561337157613361612b828386614aec565b61336b9086614b67565b94508193505b83600061337d82611f8b565b90508087101561339557508561339281614052565b91505b806133a4575050505050505050565b60006133b08284614078565b90506133bb81614118565b505050505050505050565b60008060006133d5858561414b565b509050600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343d9190614c8a565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614613474578082613477565b81815b90999098509650505050505050565b60006134db826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b2a9092919063ffffffff16565b805190915015611b2557808060200190518101906134f99190614bff565b611b255760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108ac565b6060824710156135b95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108ac565b843b6136075760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108ac565b600080866001600160a01b031685876040516136239190614ccf565b60006040518083038185875af1925050503d8060008114613660576040519150601f19603f3d011682016040523d82523d6000602084013e613665565b606091505b509150915061367582828661422e565b979650505050505050565b60008361368f57506000611b3c565b60008061369f85856119a4611419565b915091506136ae868383614267565b9695505050505050565b60006136c261137c565b6001600160a01b0316633af9e669306040518263ffffffff1660e01b81526004016136ed91906146d9565b6020604051808303816000875af1158015611b8a573d6000803e3d6000fd5b60006137166119cc565b6001600160a01b03166317bfdfbc306040518263ffffffff1660e01b81526004016136ed91906146d9565b600061374b610fe4565b6001600160a01b031663fc57d4df6137616119cc565b6040518263ffffffff1660e01b815260040161377d91906146d9565b602060405180830381865afa15801561379a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137be9190614a42565b6137c6610fe4565b6001600160a01b031663fc57d4df611c4961137c565b6000806137e7611d50565b9050808310156137fb576000915050610a0d565b60006138056122f9565b5090506000818611613818576000613822565b6138228287614aec565b905060006138308487614aec565b9050808210613846576000945050505050610a0d565b6136758282614aec565b600080600061385d611d50565b9050838114156138735750600093849350915050565b8381116138935761388c6138878286614aec565b614329565b60006138a7565b60006138a76138a28684614aec565b6143c8565b909590945092505050565b6138ba6119cc565b6001600160a01b031663c5ebeaec826040518263ffffffff1660e01b81526004016138e791815260200190565b6020604051808303816000875af1158015613906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392a9190614a42565b506139356001613b8b565b15611983576139426109f3565b6001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397c57600080fd5b505af1158015613990573d6000803e3d6000fd5b505050505050565b6000806139a36143f5565b601b546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906139d99030906004016146d9565b602060405180830381865afa1580156139f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1a9190614a42565b9050613a268183614b67565b9250505090565b601854601c54604051630441a3e760e41b81526001600160a01b039092169163441a3e7091613a6091859060040161490f565b600060405180830381600087803b158015613a7a57600080fd5b505af1158015613a8e573d6000803e3d6000fd5b5050505050565b600080613abc613aa3611419565b84613aac611419565b6001600160a01b03169190611ecb565b6000613ad6613ac9610cac565b613ad16109f3565b61414b565b509050600080613ae4611419565b6001600160a01b03166389afcb44306040518263ffffffff1660e01b8152600401613b0f91906146d9565b60408051808303816000875af1158015613b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b519190614ce1565b91509150613b5d610cac565b6001600160a01b0316836001600160a01b031614613b7c578082613b7f565b81815b94509450505050915091565b60008160ff16600114613b9f576000610a0d565b600192915050565b613baf6119cc565b6001600160a01b0316634e4d9fea826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397c57600080fd5b600080613bf5836121ab565b90506000613c016122f9565b5090506000613c0e611cfe565b90506000613c1b84614052565b90508284101580613c2c5750818110155b15613c39576136ae612a95565b600080613c4961220c8787614aec565b91509150613c56816124c8565b613c636138a2838a614aec565b613c6d9083614b67565b98975050505050505050565b6122f3846323b872dd60e01b858585604051602401611aee93929190614bdb565b6103e8811015613ca75750565b6000613cb2826121ab565b90506000613cbf82614052565b9050613cd3613cce8385614aec565b6125c3565b613cdc816138b2565b6000613ce88383614078565b90506122f381614118565b600080613d0286868686614470565b90506000613d10848661414b565b509050600080826001600160a01b0316876001600160a01b031614613d3757876000613d3b565b6000885b9092509050613d546001600160a01b0388168a86611ecb565b6040805160008152602081019182905263022c0d9f60e01b9091526001600160a01b038a169063022c0d9f90613d939085908590309060248101614d05565b600060405180830381600087803b158015613dad57600080fd5b505af1158015613dc1573d6000803e3d6000fd5b50959b9a5050505050505050505050565b600080613de186868686614536565b90506000613def848661414b565b509050600080826001600160a01b0316876001600160a01b031614613e1657836000613e1a565b6000845b9092509050613d546001600160a01b0388168a8a611ecb565b6000613e3d61137c565b6001600160a01b031663852a12e3836040518263ffffffff1660e01b8152600401613e6a91815260200190565b6020604051808303816000875af1158015613e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b259190614a42565b6000613eb98480614d32565b6001613ec58780614d32565b613ed0929150614aec565b818110613edf57613edf614a2c565b9050602002016020810190613ef4919061471b565b90506001600160a01b038316613f0a8580614d32565b6000818110613f1b57613f1b614a2c565b9050602002016020810190613f30919061471b565b6001600160a01b0316148015613f5e5750613f496109f3565b6001600160a01b0316816001600160a01b0316145b80613f815750613f6c610cac565b6001600160a01b0316816001600160a01b0316145b613fc55760405162461bcd60e51b81526020600482015260156024820152740928cc2e4dac2c4d8ca7440aea49e9c8ebea082a89605b1b60448201526064016108ac565b6001600160a01b0385166338ed1739836020870135613fe48880614d32565b308a604001356040518763ffffffff1660e01b815260040161400b96959493929190614d7b565b6000604051808303816000875af115801561402a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139909190810190614dee565b60008115611fb657600a54600b54611fb19184916001600160a01b039182169116613680565b600061408e614085611419565b84613aac610cac565b6140a2614099611419565b83613aac6109f3565b6140aa611419565b6001600160a01b0316636a627842306040518263ffffffff1660e01b81526004016140d591906146d9565b6020604051808303816000875af11580156140f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3c9190614a42565b601854601c54604051631c57762b60e31b81526001600160a01b039092169163e2bbb15891613a6091859060040161490f565b600080826001600160a01b0316846001600160a01b031614156141b05760405162461bcd60e51b815260206004820152601d60248201527f556e695574696c733a204944454e544943414c5f41444452455353455300000060448201526064016108ac565b826001600160a01b0316846001600160a01b0316106141d05782846141d3565b83835b90925090506001600160a01b0382166142275760405162461bcd60e51b8152602060048201526016602482015275556e695574696c733a205a45524f5f4144445245535360501b60448201526064016108ac565b9250929050565b6060831561423d575081611b3c565b82511561424d5782518084602001fd5b8160405162461bcd60e51b81526004016108ac91906146c6565b60008084116142b85760405162461bcd60e51b815260206004820152601d60248201527f556e695574696c733a20494e53554646494349454e545f414d4f554e5400000060448201526064016108ac565b6000831180156142c85750600082115b6143145760405162461bcd60e51b815260206004820181905260248201527f556e695574696c733a20494e53554646494349454e545f4c495155494449545960448201526064016108ac565b8261431f83866149c0565b611b3991906149df565b600080614334610cac565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161435f91906146d9565b602060405180830381865afa15801561437c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143a09190614a42565b90508281116143af57806143b1565b825b915081156143c2576143c2826125c3565b50919050565b6000806143d36145f7565b90508281116143e257806143e4565b825b915081156143c2576143c282613e33565b601854601c546040516393f1a40b60e01b8152600481019190915230602482015260009182916001600160a01b03909116906393f1a40b906044016040805180830381865afa15801561444c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f509190614ce1565b60008084116144cd5760405162461bcd60e51b8152602060048201526024808201527f556e695574696c733a20494e53554646494349454e545f4f55545055545f414d60448201526313d5539560e21b60648201526084016108ac565b6000806144db8786866133c6565b909250905060006144ec87846149c0565b6144f8906103e86149c0565b905060006145068884614aec565b614512906103e56149c0565b905061451e81836149df565b614529906001614b67565b9998505050505050505050565b60008084116145935760405162461bcd60e51b815260206004820152602360248201527f556e695574696c733a20494e53554646494349454e545f494e5055545f414d4f60448201526215539560ea1b60648201526084016108ac565b6000806145a18786866133c6565b909250905060006145b4876103e56149c0565b905060006145c283836149c0565b90506000826145d3866103e86149c0565b6145dd9190614b67565b90506145e981836149df565b9a9950505050505050505050565b600080614602611d50565b905060006146116109e4611cfe565b90506000606361461f611e45565b61463184670de0b6b3a76400006149c0565b61463c9060646149c0565b61464691906149df565b61465091906149df565b905082811115614664576000935050505090565b610a748184614aec565b60005b83811015614689578181015183820152602001614671565b838111156122f35750506000910152565b600081518084526146b281602086016020860161466e565b601f01601f19169290920160200192915050565b602081526000611b3c602083018461469a565b6001600160a01b0391909116815260200190565b6000602082840312156146ff57600080fd5b5035919050565b6001600160a01b038116811461198357600080fd5b60006020828403121561472d57600080fd5b8135611b3c81614706565b60008083601f84011261474a57600080fd5b5081356001600160401b0381111561476157600080fd5b6020830191508360208260051b850101111561422757600080fd5b60008060006040848603121561479157600080fd5b833561479c81614706565b925060208401356001600160401b038111156147b757600080fd5b6147c386828701614738565b9497909650939450505050565b801515811461198357600080fd5b600080604083850312156147f157600080fd5b82356147fc81614706565b9150602083013561480c816147d0565b809150509250929050565b60006020828403121561482957600080fd5b813561ffff81168114611b3c57600080fd5b6000806000806040858703121561485157600080fd5b84356001600160401b038082111561486857600080fd5b61487488838901614738565b9096509450602087013591508082111561488d57600080fd5b5061489a87828801614738565b95989497509550505050565b600081518084526020808501945080840160005b838110156148d6578151875295820195908201906001016148ba565b509495945050505050565b6040815260006148f460408301856148a6565b828103602084015261490681856148a6565b95945050505050565b918252602082015260400190565b600181811c9082168061493157607f821691505b602082108114156143c257634e487b7160e01b600052602260045260246000fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561499957600080fd5b815160ff81168114611b3c57600080fd5b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156149da576149da6149aa565b500290565b6000826149fc57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526011908201527014dd1c985d0e8813d3931657d590555315607a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215614a5457600080fd5b5051919050565b6000600019821415614a6f57614a6f6149aa565b5060010190565b60208082528181018390526000908460408401835b86811015614ab9578235614a9e81614706565b6001600160a01b031682529183019190830190600101614a8b565b509695505050505050565b6020808252600e908201526d0a6e8e4c2e874409c9ebe82aaa8960931b604082015260600190565b600082821015614afe57614afe6149aa565b500390565b60208082526013908201527209098a07440a0a492868abe9a92a69a82a8869606b1b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115614b7a57614b7a6149aa565b500190565b6001600160a01b03929092168252602082015260400190565b600080600060608486031215614bad57600080fd5b8351614bb8816147d0565b602085015160408601519194509250614bd0816147d0565b809150509250925092565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215614c1157600080fd5b8151611b3c816147d0565b634e487b7160e01b600052604160045260246000fd5b60008235605e19833603018112614c4857600080fd5b9190910192915050565b60ff9290921682526001600160a01b0316602082015260400190565b80516001600160701b0381168114614c8557600080fd5b919050565b600080600060608486031215614c9f57600080fd5b614ca884614c6e565b9250614cb660208501614c6e565b9150604084015163ffffffff81168114614bd057600080fd5b60008251614c4881846020870161466e565b60008060408385031215614cf457600080fd5b505080516020909101519092909150565b84815283602082015260018060a01b03831660408201526080606082015260006136ae608083018461469a565b6000808335601e19843603018112614d4957600080fd5b8301803591506001600160401b03821115614d6357600080fd5b6020019150600581901b360382131561422757600080fd5b868152602080820187905260a0604083018190528201859052600090869060c08401835b88811015614dcd578335614db281614706565b6001600160a01b031682529282019290820190600101614d9f565b506001600160a01b0396909616606085015250505060800152949350505050565b60006020808385031215614e0157600080fd5b82516001600160401b0380821115614e1857600080fd5b818501915085601f830112614e2c57600080fd5b815181811115614e3e57614e3e614c1c565b8060051b604051601f19603f83011681018181108582111715614e6357614e63614c1c565b604052918252848201925083810185019188831115614e8157600080fd5b938501935b82851015613c6d57845184529385019392850192614e8656fe3efad319b6afe1e0317f51df66abdc4d7a7c8b1cfda31f03440b4ad255af7245a2646970667358221220171c1168e192f2ef5af63b3873d4c7b0894479bf1900eaa7cb70bc795108b68b64736f6c634300080a00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a7d7079b0fead91f3e65f86e8915cb59c1a4c664000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7000000000000000000000000beb5d47a3f720ec0a390d04b4d41ed7d9688bc7f0000000000000000000000005c0401e81bc07ca70fad469b451682c0d747ef1c000000000000000000000000a389f9430876455c36478deea9769b7ca4e3ddb1000000000000000000000000d6a4f121ca35509af06a0be99093d08462f530520000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd000000000000000000000000000000000000000000000000000000000000002700000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4000000000000000000000000486af39519b4dc9a7fccd318217352830e8ad9b4000000000000000000000000e54ca86531e17ef3616d22ca28b0d458b6c891060000000000000000000000008729438eb15e2c8b576fcc6aecda6a148776c0f50000000000000000000000009a17eb664a80175c389cb11f93ce4d7a007f884b00000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000d55534443617661784a4f457169000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019555344432041564158205472616465724a6f652042656e716900000000000000