[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ACCRUE_RECORDED", "type": "error" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "BELOW_MIN_AMOUNT", "type": "error" }, { "inputs": [], "name": "BLACKLISTED_ACCOUNT", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "INVALID_SHARE", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "LARGE_MIGRATE_AMOUNT", "type": "error" }, { "inputs": [], "name": "LARGE_SLASH_AMOUNT", "type": "error" }, { "inputs": [], "name": "MINT_PROCESSED", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "SLASH_RECORDED", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "TOO_SMALL_SHARE", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "inputs": [], "name": "ZERO_ADDRESS", "type": "error" }, { "inputs": [], "name": "ZERO_AMOUNT", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "string", "name": "uniqueStr", "type": "string" } ], "name": "AccrueReward", "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": "account", "type": "address" } ], "name": "Blacklist", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Migrate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shareAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "requestId", "type": "uint256" } ], "name": "MintZkCro", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "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": false, "internalType": "uint256", "name": "oldLimit", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "SetMinToUnstake", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "string", "name": "uniqueStr", "type": "string" } ], "name": "Slash", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shareAmount", "type": "uint256" } ], "name": "Stake", "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": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "UnBlacklist", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shareAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "requestId", "type": "uint256" } ], "name": "Unstake", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "DECIMALS_MULTIPLIER", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ROLE_BOT", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "string", "name": "_uniqueStr", "type": "string" } ], "name": "accrueReward", "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": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "blacklist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shareAmount", "type": "uint256" } ], "name": "convertToAsset", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenAmount", "type": "uint256" } ], "name": "convertToShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "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": "contract IERC20", "name": "_token", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "isBlacklisted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "migrate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minToUnstake", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "uint256", "name": "_croAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_requestId", "type": "uint256" } ], "name": "mintZkCro", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "mintZkCroRequests", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextRequestId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "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": "uint256", "name": "_minToUnstake", "type": "uint256" } ], "name": "setMinToUnstake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "string", "name": "_uniqueStr", "type": "string" } ], "name": "slash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "stake", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "togglePause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalPooledCro", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalTokenToMigrate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "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": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "unBlacklist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "", "type": "string" } ], "name": "uniqueStr2AccrueRewardAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "", "type": "string" } ], "name": "uniqueStr2SlashAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "uint256", "name": "_shareAmount", "type": "uint256" } ], "name": "unstake", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" } ]
60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131376200010460003960008181611a8601528181611aaf0152611be901526131376000f3fe60806040526004361061027d5760003560e01c80638d8f87611161014f578063bbdd366a116100c1578063dd62ed3e1161007a578063dd62ed3e146107d5578063e073ba31146107f5578063e2943b8a14610815578063f9f92be414610835578063fc0c546a14610855578063fe575a871461088257600080fd5b8063bbdd366a14610727578063c2a672e014610740578063c4ae316814610760578063c608aff814610775578063ca15c87314610795578063d547741f146107b557600080fd5b806395d89b411161011357806395d89b411461065c578063a217fddf14610671578063a9059cbb14610686578063ab137f35146106a6578063ad3cb1cc146106d6578063adc9772e1461070757600080fd5b80638d8f8761146105c35780639010d07c146105d957806390653a1714610606578063906571471461061c57806391d148541461063c57600080fd5b8063454b0608116101f35780635c975abb116101ac5780635c975abb146104d757806363323534146104fc5780636a84a9851461051257806370a082311461052857806371575ca91461056b5780637a50892f146105a357600080fd5b8063454b06081461042d5780634b5a24651461044d5780634ccc35fb1461046d5780634f1ef2861461048f57806352d1902d146104a257806358f61256146104b757600080fd5b80631e433237116102455780631e4332371461035957806323b872dd14610391578063248a9ca3146103b15780632f2ff15d146103d1578063313ce567146103f157806336568abe1461040d57600080fd5b806301ffc9a71461028257806306fdde03146102b8578063095ea7b3146102da57806318160ddd146102fa5780631a89526614610337575b600080fd5b34801561028e57600080fd5b506102a261029d3660046126c5565b6108bb565b6040516102af91906126f0565b60405180910390f35b3480156102c457600080fd5b506102cd6108e6565b6040516102af9190612754565b3480156102e657600080fd5b506102a26102f536600461279b565b6109a9565b34801561030657600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040516102af91906127de565b34801561034357600080fd5b506103576103523660046127ec565b610a3a565b005b34801561036557600080fd5b5061032a610374366004612908565b805160208183018101805160038252928201919093012091525481565b34801561039d57600080fd5b506102a26103ac366004612943565b610a8f565b3480156103bd57600080fd5b5061032a6103cc366004612993565b610b67565b3480156103dd57600080fd5b506103576103ec3660046129b4565b610b89565b3480156103fd57600080fd5b5060126040516102af91906129f0565b34801561041957600080fd5b506103576104283660046129b4565b610bab565b34801561043957600080fd5b50610357610448366004612993565b610be3565b34801561045957600080fd5b5061032a610468366004612993565b610c8f565b34801561047957600080fd5b5061032a60008051602061306283398151915281565b61035761049d3660046129fe565b610d12565b3480156104ae57600080fd5b5061032a610d31565b3480156104c357600080fd5b506103576104d2366004612a9e565b610d4e565b3480156104e357600080fd5b506000805160206130c28339815191525460ff166102a2565b34801561050857600080fd5b5061032a60055481565b34801561051e57600080fd5b5061032a60065481565b34801561053457600080fd5b5061032a6105433660046127ec565b6001600160a01b03166000908152600080516020613042833981519152602052604090205490565b34801561057757600080fd5b5061032a610586366004612908565b805160208183018101805160028252928201919093012091525481565b3480156105af57600080fd5b506103576105be366004612993565b610e62565b3480156105cf57600080fd5b5061032a60085481565b3480156105e557600080fd5b506105f96105f4366004612afa565b610eb4565b6040516102af9190612b25565b34801561061257600080fd5b5061032a60015481565b34801561062857600080fd5b50610357610637366004612b52565b610ee3565b34801561064857600080fd5b506102a26106573660046129b4565b611069565b34801561066857600080fd5b506102cd6110a1565b34801561067d57600080fd5b5061032a600081565b34801561069257600080fd5b506102a26106a136600461279b565b6110e0565b3480156106b257600080fd5b506102a26106c1366004612993565b60046020526000908152604090205460ff1681565b3480156106e257600080fd5b506102cd604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561071357600080fd5b5061032a61072236600461279b565b611163565b34801561073357600080fd5b5061032a6402540be40081565b34801561074c57600080fd5b5061032a61075b36600461279b565b6112e7565b34801561076c57600080fd5b50610357611455565b34801561078157600080fd5b50610357610790366004612a9e565b61148a565b3480156107a157600080fd5b5061032a6107b0366004612993565b61159d565b3480156107c157600080fd5b506103576107d03660046129b4565b6115c3565b3480156107e157600080fd5b5061032a6107f0366004612bce565b6115df565b34801561080157600080fd5b5061032a610810366004612993565b611629565b34801561082157600080fd5b5061032a610830366004612bf0565b6116aa565b34801561084157600080fd5b506103576108503660046127ec565b611816565b34801561086157600080fd5b50600054610875906001600160a01b031681565b6040516102af9190612c67565b34801561088e57600080fd5b506102a261089d3660046127ec565b6001600160a01b031660009081526007602052604090205460ff1690565b60006001600160e01b03198216635a05180f60e01b14806108e057506108e08261186e565b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060916000805160206130428339815191529161092590612c8b565b80601f016020809104026020016040519081016040528092919081815260200182805461095190612c8b565b801561099e5780601f106109735761010080835404028352916020019161099e565b820191906000526020600020905b81548152906001019060200180831161098157829003601f168201915b505050505091505090565b60006109b36118a3565b3360008181526007602052604090205460ff16156109e4576040516321ce79cf60e21b815260040160405180910390fd5b6001600160a01b038416600090815260076020526040902054849060ff1615610a20576040516321ce79cf60e21b815260040160405180910390fd5b33610a2c8187876118d6565b60019350505b505092915050565b6000610a45816118e3565b6001600160a01b038216600081815260076020526040808220805460ff19169055517fc653d95790bb2472667b557ef27642a37cac57b69d6d5fddcaacef8f62589dcb9190a25050565b6000610a996118a3565b3360008181526007602052604090205460ff1615610aca576040516321ce79cf60e21b815260040160405180910390fd5b6001600160a01b038516600090815260076020526040902054859060ff1615610b06576040516321ce79cf60e21b815260040160405180910390fd5b6001600160a01b038516600090815260076020526040902054859060ff1615610b42576040516321ce79cf60e21b815260040160405180910390fd5b33610b4e8882886118ed565b610b59888888611943565b506001979650505050505050565b60009081526000805160206130a2833981519152602052604090206001015490565b610b9282610b67565b610b9b816118e3565b610ba583836119a2565b50505050565b6001600160a01b0381163314610bd45760405163334bd91960e11b815260040160405180910390fd5b610bde82826119e7565b505050565b610beb6118a3565b600080516020613062833981519152610c03816118e3565b600554821115610c265760405163bfe046bb60e01b815260040160405180910390fd5b8160056000828254610c389190612ccd565b9091555050600054610c54906001600160a01b03163384611a23565b7fd5837b673ffaac69230366d3f7eb7cb2ba2b9fd8f2d4e9d0f5e92d3756b1d54682604051610c8391906127de565b60405180910390a15050565b600080610cba7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b905080600003610ccd5750600092915050565b60008160015485610cde9190612ce0565b610ce89190612d0e565b905080600003610d0b5760405163380d10e760e01b815260040160405180910390fd5b9392505050565b610d1a611a7b565b610d2382611b20565b610d2d8282611b2b565b5050565b6000610d3b611bde565b5060008051602061308283398151915290565b610d566118a3565b600080516020613062833981519152610d6e816118e3565b83600003610d8f57604051630f6fa54560e41b815260040160405180910390fd5b600060028484604051610da3929190612d35565b9081526020016040518091039020541115610dd15760405163118df50560e21b815260040160405180910390fd5b8360016000828254610de39190612d42565b925050819055508360028484604051610dfd929190612d35565b90815260405190819003602001812091909155610e1d9084908490612d35565b60405180910390207f61728c6bcea2c9a14085005e8b8d5f502591ae8f1c96fe5ecaf72e51698de4bb85604051610e5491906127de565b60405180910390a250505050565b6000610e6d816118e3565b60088054908390556040517f7e7c66fdd2ebe3e2e13c3b165a5e43b9cca4cf216b1867ec40957e1976509f2b90610ea79083908690612d55565b60405180910390a1505050565b6000828152600080516020613022833981519152602081905260408220610edb9084611c27565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f295750825b905060008267ffffffffffffffff166001148015610f465750303b155b905081158015610f54575080155b15610f725760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f9c57845460ff60401b1916600160401b1785555b6001600160a01b038816610fc35760405163538ba4f960e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b038a16179055610fe88787611c33565b610ff0611c45565b610ff8611c4d565b611000611c45565b611008611c5d565b6110136000336119a2565b50831561105f57845460ff60401b191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061105690600190612d8b565b60405180910390a15b5050505050505050565b60009182526000805160206130a2833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060916000805160206130428339815191529161092590612c8b565b60006110ea6118a3565b3360008181526007602052604090205460ff161561111b576040516321ce79cf60e21b815260040160405180910390fd5b6001600160a01b038416600090815260076020526040902054849060ff1615611157576040516321ce79cf60e21b815260040160405180910390fd5b33610a2c818787611943565b600061116d6118a3565b3360008181526007602052604090205460ff161561119e576040516321ce79cf60e21b815260040160405180910390fd5b6001600160a01b038416600090815260076020526040902054849060ff16156111da576040516321ce79cf60e21b815260040160405180910390fd5b6111e2611c6d565b6001600160a01b0385166112095760405163538ba4f960e01b815260040160405180910390fd5b8360000361122a57604051630f6fa54560e41b815260040160405180910390fd5b600054611242906001600160a01b0316333087611ca5565b600061124d85611629565b90506112598682611ccd565b846001600082825461126b9190612d42565b9250508190555084600560008282546112849190612d42565b92505081905550856001600160a01b03167f5af417134f72a9d41143ace85b0a26dce6f550f894f2cbc1eeee8810603d91b686836040516112c6929190612d55565b60405180910390a29250610a3260016000805160206130e283398151915255565b60006112f16118a3565b3360008181526007602052604090205460ff1615611322576040516321ce79cf60e21b815260040160405180910390fd5b6001600160a01b038416600090815260076020526040902054849060ff161561135e576040516321ce79cf60e21b815260040160405180910390fd5b611366611c6d565b6001600160a01b03851661138d5760405163538ba4f960e01b815260040160405180910390fd5b6008548410156113b057604051633223fe5160e01b815260040160405180910390fd5b6006805490819060006113c283612d99565b919050555060006113d286610c8f565b905080600160008282546113e69190612ccd565b909155506113f690503387611d17565b866001600160a01b03167ffbd65cfd6de1493db337385c0712095397ecbd0504df64b861cdfceb80c7b42287838560405161143393929190612db3565b60405180910390a2935050610a3260016000805160206130e283398151915255565b6000611460816118e3565b6000805160206130c28339815191525460ff166114825761147f611d4d565b50565b61147f611daa565b6000611495816118e3565b836000036114b657604051630f6fa54560e41b815260040160405180910390fd5b6000600384846040516114ca929190612d35565b90815260200160405180910390205411156114f8576040516322df829960e11b815260040160405180910390fd5b600154841061151a57604051636c1f7abf60e01b815260040160405180910390fd5b836003848460405161152d929190612d35565b90815260200160405180910390208190555083600160008282546115519190612ccd565b90915550506040516115669084908490612d35565b60405180910390207fc13d8ac8176ef23d562030616346bd00330885c73b28406dce0faa843a1a13f185604051610e5491906127de565b6000818152600080516020613022833981519152602081905260408220610d0b90611df0565b6115cc82610b67565b6115d5816118e3565b610ba583836119e7565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6000806116547f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b90508060000361166d57610d0b6402540be40084612ce0565b60015460009061167d8386612ce0565b6116879190612d0e565b905080600003610d0b5760405163c4ca4f5160e01b815260040160405180910390fd5b60006116b46118a3565b6001600160a01b038416600090815260076020526040902054849060ff16156116f0576040516321ce79cf60e21b815260040160405180910390fd5b600080516020613062833981519152611708816118e3565b6001600160a01b03861661172f5760405163538ba4f960e01b815260040160405180910390fd5b8460000361175057604051630f6fa54560e41b815260040160405180910390fd5b60008481526004602052604090205460ff161561178057604051634910ddbd60e11b815260040160405180910390fd5b6000848152600460205260408120805460ff191660011790556117a286611629565b90506117ae8782611ccd565b85600160008282546117c09190612d42565b92505081905550866001600160a01b03167ff6dbebe2f2f2f974e3e876d482cc4fcb3cb398aa75dd2018fc709d77b6b36d9387838860405161180493929190612db3565b60405180910390a29695505050505050565b6000611821816118e3565b6001600160a01b038216600081815260076020526040808220805460ff19166001179055517f7811ed4e4b787e4f0f046ffb4a5ec1e064b0eb6d191ffabb66270ed8be89b3259190a25050565b60006001600160e01b03198216637965db0b60e01b14806108e057506301ffc9a760e01b6001600160e01b03198316146108e0565b6000805160206130c28339815191525460ff16156118d45760405163d93c066560e01b815260040160405180910390fd5b565b610bde8383836001611dfa565b61147f8133611ee0565b60006118f984846115df565b90506000198114610ba5578181101561193457828183604051637dc7a0d960e11b815260040161192b93929190612ddb565b60405180910390fd5b610ba584848484036000611dfa565b6001600160a01b03831661196d576000604051634b637e8f60e11b815260040161192b9190612b25565b6001600160a01b03821661199757600060405163ec442f0560e01b815260040161192b9190612b25565b610bde838383611f0b565b6000600080516020613022833981519152816119be8585612034565b90508015610edb5760008581526020839052604090206119de90856120e0565b50949350505050565b600060008051602061302283398151915281611a0385856120f5565b90508015610edb5760008581526020839052604090206119de9085612171565b610bde83846001600160a01b031663a9059cbb8585604051602401611a49929190612de9565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612186565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b0257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611af6600080516020613082833981519152546001600160a01b031690565b6001600160a01b031614155b156118d45760405163703e46dd60e11b815260040160405180910390fd5b6000610d2d816118e3565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b85575060408051601f3d908101601f19168201909252611b8291810190612e02565b60015b611ba45781604051634c9c8ce360e01b815260040161192b9190612b25565b6000805160206130828339815191528114611bd45780604051632a87526960e21b815260040161192b91906127de565b610bde83836121e0565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118d45760405163703e46dd60e11b815260040160405180910390fd5b6000610d0b8383612236565b611c3b612260565b610d2d82826122a9565b6118d4612260565b611c55612260565b6118d46122fa565b611c65612260565b6118d461231b565b6000805160206130e2833981519152805460011901611c9f57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b610ba584856001600160a01b03166323b872dd868686604051602401611a4993929190612e23565b6001600160a01b038216611cf757600060405163ec442f0560e01b815260040161192b9190612b25565b610d2d60008383611f0b565b60016000805160206130e283398151915255565b6001600160a01b038216611d41576000604051634b637e8f60e11b815260040161192b9190612b25565b610d2d82600083611f0b565b611d556118a3565b6000805160206130c2833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b604051611d9f9190612b25565b60405180910390a150565b611db2612323565b6000805160206130c2833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611d92565b60006108e0825490565b6000805160206130428339815191526001600160a01b038516611e3357600060405163e602df0560e01b815260040161192b9190612b25565b6001600160a01b038416611e5d576000604051634a1406b160e11b815260040161192b9190612b25565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115611ed957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611ed091906127de565b60405180910390a35b5050505050565b611eea8282611069565b610d2d57808260405163e2517d3f60e01b815260040161192b929190612de9565b6000805160206130428339815191526001600160a01b038416611f475781816002016000828254611f3c9190612d42565b90915550611fa69050565b6001600160a01b03841660009081526020829052604090205482811015611f875784818460405163391434e360e21b815260040161192b93929190612ddb565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316611fc4576002810180548390039055611fe3565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161202691906127de565b60405180910390a350505050565b60006000805160206130a283398151915261204f8484611069565b6120cf576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556120853390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108e0565b60009150506108e0565b5092915050565b6000610d0b836001600160a01b038416612353565b60006000805160206130a28339815191526121108484611069565b156120cf576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108e0565b6000610d0b836001600160a01b0384166123a2565b600061219b6001600160a01b0384168361248b565b905080516000141580156121c05750808060200190518101906121be9190612e51565b155b15610bde5782604051635274afe760e01b815260040161192b9190612b25565b6121e982612499565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561222e57610bde82826124f5565b610d2d61256b565b600082600001828154811061224d5761224d612e72565b9060005260206000200154905092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166118d457604051631afcd79f60e31b815260040160405180910390fd5b6122b1612260565b6000805160206130428339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036122eb8482612f19565b5060048101610ba58382612f19565b612302612260565b6000805160206130c2833981519152805460ff19169055565b611d03612260565b6000805160206130c28339815191525460ff166118d457604051638dfc202b60e01b815260040160405180910390fd5b600081815260018301602052604081205461239a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108e0565b5060006108e0565b600081815260018301602052604081205480156120cf5760006123c6600183612ccd565b85549091506000906123da90600190612ccd565b905080821461243f5760008660000182815481106123fa576123fa612e72565b906000526020600020015490508087600001848154811061241d5761241d612e72565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061245057612450612fdd565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108e0565b6060610d0b8383600061258a565b806001600160a01b03163b6000036124c65780604051634c9c8ce360e01b815260040161192b9190612b25565b60008051602061308283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125129190613015565b600060405180830381855af49150503d806000811461254d576040519150601f19603f3d011682016040523d82523d6000602084013e612552565b606091505b5091509150612562858383612627565b95945050505050565b34156118d45760405163b398979f60e01b815260040160405180910390fd5b6060814710156125af573060405163cd78605960e01b815260040161192b9190612b25565b600080856001600160a01b031684866040516125cb9190613015565b60006040518083038185875af1925050503d8060008114612608576040519150601f19603f3d011682016040523d82523d6000602084013e61260d565b606091505b509150915061261d868383612627565b9695505050505050565b60608261263c576126378261267a565b610d0b565b815115801561265357506001600160a01b0384163b155b156126735783604051639996b31560e01b815260040161192b9190612b25565b5080610d0b565b80511561268a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160e01b031981165b811461147f57600080fd5b80356108e0816126a3565b6000602082840312156126da576126da600080fd5b6000610edb84846126ba565b8015155b82525050565b602081016108e082846126e6565b60005b83811015612719578181015183820152602001612701565b50506000910152565b600061272c825190565b8084526020840193506127438185602086016126fe565b601f01601f19169290920192915050565b60208082528101610d0b8184612722565b60006001600160a01b0382166108e0565b6126af81612765565b80356108e081612776565b806126af565b80356108e08161278a565b600080604083850312156127b1576127b1600080fd5b60006127bd858561277f565b92505060206127ce85828601612790565b9150509250929050565b806126ea565b602081016108e082846127d8565b60006020828403121561280157612801600080fd5b6000610edb848461277f565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156128495761284961280d565b6040525050565b600061285b60405190565b90506128678282612823565b919050565b600067ffffffffffffffff8211156128865761288661280d565b601f19601f83011660200192915050565b82818337506000910152565b60006128b66128b18461286c565b612850565b9050828152602081018484840111156128d1576128d1600080fd5b6128dc848285612897565b509392505050565b600082601f8301126128f8576128f8600080fd5b8135610edb8482602086016128a3565b60006020828403121561291d5761291d600080fd5b813567ffffffffffffffff81111561293757612937600080fd5b610edb848285016128e4565b60008060006060848603121561295b5761295b600080fd5b6000612967868661277f565b93505060206129788682870161277f565b925050604061298986828701612790565b9150509250925092565b6000602082840312156129a8576129a8600080fd5b6000610edb8484612790565b600080604083850312156129ca576129ca600080fd5b60006129d68585612790565b92505060206127ce8582860161277f565b60ff81166126ea565b602081016108e082846129e7565b60008060408385031215612a1457612a14600080fd5b6000612a20858561277f565b925050602083013567ffffffffffffffff811115612a4057612a40600080fd5b6127ce858286016128e4565b60008083601f840112612a6157612a61600080fd5b50813567ffffffffffffffff811115612a7c57612a7c600080fd5b602083019150836001820283011115612a9757612a97600080fd5b9250929050565b600080600060408486031215612ab657612ab6600080fd5b6000612ac28686612790565b935050602084013567ffffffffffffffff811115612ae257612ae2600080fd5b612aee86828701612a4c565b92509250509250925092565b60008060408385031215612b1057612b10600080fd5b60006127bd8585612790565b6126ea81612765565b602081016108e08284612b1c565b60006108e082612765565b6126af81612b33565b80356108e081612b3e565b600080600060608486031215612b6a57612b6a600080fd5b6000612b768686612b47565b935050602084013567ffffffffffffffff811115612b9657612b96600080fd5b612ba2868287016128e4565b925050604084013567ffffffffffffffff811115612bc257612bc2600080fd5b612989868287016128e4565b60008060408385031215612be457612be4600080fd5b60006129d6858561277f565b600080600060608486031215612c0857612c08600080fd5b6000612c14868661277f565b935050602061297886828701612790565b60006108e06001600160a01b038316612c3c565b90565b6001600160a01b031690565b60006108e082612c25565b60006108e082612c48565b6126ea81612c53565b602081016108e08284612c5e565b634e487b7160e01b600052602260045260246000fd5b600281046001821680612c9f57607f821691505b602082108103612cb157612cb1612c75565b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108e0576108e0612cb7565b8181028082158382048514176120d9576120d9612cb7565b634e487b7160e01b600052601260045260246000fd5b600082612d1d57612d1d612cf8565b500490565b6000612d2f838584612897565b50500190565b6000610edb828486612d22565b808201808211156108e0576108e0612cb7565b60408101612d6382856127d8565b610d0b60208301846127d8565b600067ffffffffffffffff82166108e0565b6126ea81612d70565b602081016108e08284612d82565b60006000198203612dac57612dac612cb7565b5060010190565b60608101612dc182866127d8565b612dce60208301856127d8565b610edb60408301846127d8565b60608101612dc18286612b1c565b60408101612d638285612b1c565b80516108e08161278a565b600060208284031215612e1757612e17600080fd5b6000610edb8484612df7565b60608101612e318286612b1c565b612dce6020830185612b1c565b8015156126af565b80516108e081612e3e565b600060208284031215612e6657612e66600080fd5b6000610edb8484612e46565b634e487b7160e01b600052603260045260246000fd5b60006108e0612c398381565b612e9d83612e88565b815460001960089490940293841b1916921b91909117905550565b6000610bde818484612e94565b81811015610d2d57612ed8600082612eb8565b600101612ec5565b601f821115610bde576000818152602090206020601f85010481016020851015612f075750805b611ed96020601f860104830182612ec5565b815167ffffffffffffffff811115612f3357612f3361280d565b612f3d8254612c8b565b612f48828285612ee0565b6020601f831160018114612f7c5760008415612f645750858201515b600019600886021c1981166002860217865550612fd5565b600085815260208120601f198616915b82811015612fac5788850151825560209485019460019092019101612f8c565b86831015612fc85784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b634e487b7160e01b600052603160045260246000fd5b6000612ffd825190565b61300b8185602086016126fe565b9290920192915050565b6000610d0b8284612ff356fec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace005bf81cabe53ab1fac30c9f534a726d1efa4d39604cae6fbb7d5396c82ef5f5cf360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220cc5737fe2e7ec8d835683552aa03d1442dcfb6b10b45d962f3100453e264af2164736f6c63430008180033