[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "CheckpointUnorderedInsertion", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "requestId", "type": "uint256" }, { "internalType": "uint256", "name": "cooldownTime", "type": "uint256" } ], "name": "Cooldown", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "increasedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "cap", "type": "uint256" } ], "name": "ERC20ExceededSafeSupply", "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": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" }, { "internalType": "uint48", "name": "clock", "type": "uint48" } ], "name": "ERC5805FutureLookup", "type": "error" }, { "inputs": [], "name": "ERC6372InconsistentClock", "type": "error" }, { "inputs": [], "name": "EmptyRequestIds", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "available", "type": "uint256" } ], "name": "InsufficientStakeBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "requestId", "type": "uint256" }, { "internalType": "enum IStakingVault.UnstakeRequestState", "name": "current", "type": "uint8" }, { "internalType": "enum IStakingVault.UnstakeRequestState", "name": "expected", "type": "uint8" } ], "name": "InvalidRequestState", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "type": "error" }, { "inputs": [], "name": "NonTransferable", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "VotesExpiredSignature", "type": "error" }, { "inputs": [], "name": "ZeroAmount", "type": "error" }, { "inputs": [], "name": "ZeroRewardPeriod", "type": "error" }, { "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": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousVotes", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newVotes", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "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": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "requestId", "type": "uint256" } ], "name": "RequestCancelled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "requestId", "type": "uint256" } ], "name": "RequestExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "rewardRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rewardPeriod", "type": "uint256" } ], "name": "RewardConfigUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RewardsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Staked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "requestId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "UnstakeRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Unstaked", "type": "event" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NAME", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REWARD_SCALE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SYMBOL", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UNSTAKE_COOLDOWN", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "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": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "requestIds", "type": "uint256[]" } ], "name": "cancelUnstakeRequests", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint48", "name": "_key", "type": "uint48" }, { "internalType": "uint208", "name": "_value", "type": "uint208" } ], "internalType": "struct Checkpoints.Checkpoint208", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clock", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAccumulatedRewardPerToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "requestId", "type": "uint256" } ], "name": "getUnstakeRequest", "outputs": [ { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "requestTimestamp", "type": "uint256" }, { "internalType": "enum IStakingVault.UnstakeRequestState", "name": "state", "type": "uint8" } ], "internalType": "struct IStakingVault.UnstakeRequest", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "contract IERC20", "name": "_stakingToken", "type": "address" }, { "internalType": "uint256", "name": "_rewardRate", "type": "uint256" }, { "internalType": "uint256", "name": "_rewardPeriod", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastAccumulatedRewardPerToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "lastAccumulatedRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastRewardUpdateTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "requestId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "requestUnstake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardPeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stakingToken", "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": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "requestIds", "type": "uint256[]" } ], "name": "unstake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_rewardRate", "type": "uint256" }, { "internalType": "uint256", "name": "_rewardPeriod", "type": "uint256" } ], "name": "updateRewardConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6080806040523460d2577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b60405161467b90816100d88239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880604d565b63f92ee8a960e01b60005260046000fd5b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806306a60e91146102f257806306fdde03146102ed578063095ea7b31461025c5780630b60c58f146102e85780630fd8edfc146102e357806318160ddd146102de57806323b872dd146102d9578063313ce567146102d45780633a46b1a8146102cf5780634ae6c4ae146102ca5780634bf5d7e9146102c5578063587cde1e146102c05780635c19a95c146102bb57806368d4341f146102b65780636fcfff45146102b157806370a08231146102ac578063715018a6146102a757806372f702f3146102a257806379ba50971461029d57806379ee54f7146102985780637b0a47ee146102935780637b9451ec1461028e5780637ecebe001461028957806384b0196e146102845780638b0bd55b1461027f5780638da5cb5b1461027a5780638e539e8c1461027557806391ddadf41461027057806395d89b411461026b5780639ab24eb014610266578063a3f4df7e14610261578063a9059cbb1461025c578063ad876fe814610257578063adc9772e14610252578063c3cda5201461024d578063dd62ed3e14610248578063e17be67d14610243578063e30c39781461023e578063e449f34114610239578063e88dc5b714610234578063eb990c591461022f578063ed9617a31461022a578063f1127ed814610225578063f2fde38b14610220578063f76f8d781461021b5763ffa1ad741461021657600080fd5b61232f565b6122d8565b6121b5565b6120e7565b6120c9565b611e45565b611e27565b611c80565b611c3a565b611c17565b611b98565b611a1d565b6118c0565b6118a2565b61053f565b611872565b6117cd565b6116e7565b6116bb565b6114de565b611498565b61130a565b6110d2565b610fd2565b610f94565b610f76565b610f4f565b610ed6565b610eaf565b610d98565b610d3d565b610c96565b610a0f565b6109e7565b610981565b6108d6565b61083a565b610645565b610629565b610602565b6105c5565b6105a2565b610585565b6103f5565b3461039b57604060031936011261039b57600435602435610311612afc565b8015610371577f05b4a406cc49242fbafb4d06aade318d1d56085d0b08343cc62ef69ecf5846c2916103416125ee565b60035542600255806000558160015561036c6040519283928360209093929193604081019481520152565b0390a1005b7f27d10fcf0000000000000000000000000000000000000000000000000000000060005260046000fd5b600080fd5b919082519283825260005b8481106103cc575050601f19601f8460006020809697860101520116010190565b806020809284010151828286010152016103ab565b9060206103f29281815201906103a0565b90565b3461039b57600060031936011261039b5760405160007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03546104368161234b565b80845290600181169081156104ec575060011461046e575b61046a8361045e81850382611230565b604051918291826103e1565b0390f35b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0360009081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106104d25750909150810160200161045e61044e565b9192600181602092548385880101520191019092916104ba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b8401909101915061045e905061044e565b6001600160a01b0381160361039b57565b3461039b57604060031936011261039b5761055b60043561052e565b7f9cbe23570000000000000000000000000000000000000000000000000000000060005260046000fd5b3461039b57600060031936011261039b5760206040516102588152f35b3461039b57600060031936011261039b5760206105bd6125ee565b604051908152f35b3461039b57600060031936011261039b5760207f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254604051908152f35b3461039b57606060031936011261039b5761061e60043561052e565b61055b60243561052e565b3461039b57600060031936011261039b57602060405160128152f35b3461039b57604060031936011261039b576004356106628161052e565b6024359065ffffffffffff61067643612c96565b16808310156107a757506106bf6106c5916001600160a01b03166000527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604060002090565b91612c96565b9060009080548293816005811161072e575b509079ffffffffffffffffffffffffffffffffffffffffffffffffffff946106ff928461375f565b806107135750505b60405191168152602090f35b61071c906125b5565b9082526020909120015460301c610707565b94610738866135ea565b86039586116107a25779ffffffffffffffffffffffffffffffffffffffffffffffffffff956106ff9385875265ffffffffffff826020892001541665ffffffffffff8516106000146107905750915b919250946106d7565b92915061079c906125d3565b90610787565b612586565b827fecd3f81e0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600411156107e257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91909160408060608301948051845260208101516020850152015191610836836107d8565b0152565b3461039b57604060031936011261039b576004356108578161052e565b6001600160a01b0360243591600060408051610872816111f3565b828152826020820152015216600052600760205260406000209060005260205261046a604060002060ff6002604051926108ab846111f3565b80548452600181015460208501520154166108c5816107d8565b604082015260405191829182610811565b3461039b57600060031936011261039b576108f043612c96565b65ffffffffffff8061090143612c96565b169116036109575761046a604080519061091b8183611230565b601d82527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c740000006020830152519182916020835260208301906103a0565b7f6ff071400000000000000000000000000000000000000000000000000000000060005260046000fd5b3461039b57602060031936011261039b576001600160a01b036004356109a68161052e565b166000527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0060205260206001600160a01b0360406000205416604051908152f35b3461039b57602060031936011261039b57610a0d600435610a078161052e565b33612ce0565b005b3461039b57604060031936011261039b57600435602435610a2e612db8565b610a366125ee565b60035542600255610a463361276f565b3360005260066020526040600020556003543360005260056020526040600020558015610c6c5780610aaa336001600160a01b03166000527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604060002090565b5410610bf157610aed6002610ae584610ad6336001600160a01b03166000526007602052604060002090565b90600052602052604060002090565b015460ff1690565b610af6816107d8565b80610bb65750610b8a7f57e41df54512c76148b5ba9b643d149752b0d35e493b969bd017d0a3fe5228cf91610b67610b2c611253565b828152426020820152610b4160408201612646565b610b6286610ad6336001600160a01b03166000526007602052604060002090565b612719565b610b718133612e31565b6040805194855260208501919091523393918291820190565b0390a2610a0d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b82610bed6040519283927f52c793680000000000000000000000000000000000000000000000000000000084523360048501612655565b0390fd5b610c6890610c31336001600160a01b03166000527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604060002090565b547fd3d3e62f0000000000000000000000000000000000000000000000000000000060005233600452602491909152604452606490565b6000fd5b7f1f2a20050000000000000000000000000000000000000000000000000000000060005260046000fd5b3461039b57602060031936011261039b57610cee600435610cb68161052e565b6001600160a01b03166000527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604060002090565b5463ffffffff8111610d0b5760209063ffffffff60405191168152f35b7f6dfcc65000000000000000000000000000000000000000000000000000000000600052602060045260245260446000fd5b3461039b57602060031936011261039b5760206105bd600435610d5f8161052e565b6001600160a01b03166000527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0060205260406000205490565b3461039b57600060031936011261039b57610db1612afc565b7fffffffffffffffffffffffff00000000000000000000000000000000000000007f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0054167f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005560006001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461039b57600060031936011261039b5760206001600160a01b0360045416604051908152f35b3461039b57600060031936011261039b57336001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00541603610f2157610a0d33612f98565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b3461039b57602060031936011261039b5760206105bd600435610f718161052e565b61276f565b3461039b57600060031936011261039b576020600054604051908152f35b3461039b57602060031936011261039b576001600160a01b03600435610fb98161052e565b1660005260056020526020604060002054604051908152f35b3461039b57602060031936011261039b576001600160a01b03600435610ff78161052e565b166000527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526020604060002054604051908152f35b9293906001600160a01b0392611076611084927f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e08701906103a0565b9085820360408701526103a0565b936060840152166080820152600060a082015260c08183039101526020808351928381520192019060005b8181106110bc5750505090565b82518452602093840193909201916001016110af565b3461039b57600060031936011261039b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054158061119b575b1561113d5761111961239e565b6111216124b1565b9061046a61112d6127e0565b604051938493309146918661102f565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101541561110c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff82111761120f57604052565b6111c4565b6040810190811067ffffffffffffffff82111761120f57604052565b90601f601f19910116810190811067ffffffffffffffff82111761120f57604052565b60405190611262606083611230565b565b60405190611262604083611230565b67ffffffffffffffff811161120f5760051b60200190565b602060031982011261039b576004359067ffffffffffffffff821161039b578060238301121561039b5781600401356112c381611273565b926112d16040519485611230565b8184526024602085019260051b82010192831161039b57602401905b8282106112fa5750505090565b81358152602091820191016112ed565b3461039b576113183661128b565b611320612db8565b6113286125ee565b600355426002556113383361276f565b33600052600660205260406000205560035433600052600560205260406000205580511561146e5760009060005b815181101561143b57611379818361282b565b519261139c84610ad6336001600160a01b03166000526007602052604060002090565b60028101805460ff166113ae816107d8565b600181036114045750916113cf916113c8600195946126af565b54906125e1565b6040519485529333907f1bdb4261b8cc605afbfe72b63a1f1f08ab6eb83dce866bdbed9ba6fc9c74d00490602090a201611366565b86610bed6040519283927f52c793680000000000000000000000000000000000000000000000000000000084523360048501612689565b611445833361309b565b610a0d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f38cc8a080000000000000000000000000000000000000000000000000000000060005260046000fd5b3461039b57600060031936011261039b5760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461039b57602060031936011261039b5760043565ffffffffffff61150243612c96565b16908181101561168b5761151590612c96565b60007fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0254819281600581116115f7575b509079ffffffffffffffffffffffffffffffffffffffffffffffffffff9361158d927fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0261375f565b8061159f575060405191168152602090f35b6115a8906125b5565b7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d029091527f88c46c62109817164d0ae1873830d4299a82e5daf552a3d8e989b27638fcf748015460301c610707565b93611601856135ea565b85039485116107a25779ffffffffffffffffffffffffffffffffffffffffffffffffffff9461158d937fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d02865265ffffffffffff826020882001541665ffffffffffff8516106000146116795750915b91925093611545565b929150611685906125d3565b90611670565b7fecd3f81e0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b3461039b57600060031936011261039b5760206116d743612c96565b65ffffffffffff60405191168152f35b3461039b57600060031936011261039b5760405160007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04546117288161234b565b80845290600181169081156104ec575060011461174f5761046a8361045e81850382611230565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0460009081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b8082106117b35750909150810160200161045e61044e565b91926001816020925483858801015201910190929161179b565b3461039b57602060031936011261039b57602079ffffffffffffffffffffffffffffffffffffffffffffffffffff61181261180d600435610cb68161052e565b61321d565b16604051908152f35b67ffffffffffffffff811161120f57601f01601f191660200190565b60405190611846604083611230565b601182527f5374616b696e67205661756c74204253580000000000000000000000000000006020830152565b3461039b57600060031936011261039b5761046a61188e611837565b6040519182916020835260208301906103a0565b3461039b57600060031936011261039b576020600254604051908152f35b3461039b57604060031936011261039b576004356118dd8161052e565b6024356118e8612db8565b6118f06125ee565b600355426002556119008261276f565b916001600160a01b038116928360005260066020526040600020556003548360005260056020526040600020558115610c6c578161193d9161309b565b61195e6119526004546001600160a01b031690565b6001600160a01b031690565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390529190602090839060649082906000905af1908115611a18577f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d92610b8a926119eb575b506040519081529081906020820190565b611a0c9060203d602011611a11575b611a048183611230565b810190612844565b6119da565b503d6119fa565b61285c565b3461039b5760c060031936011261039b57600435611a3a8161052e565b6044359060243560643560ff8116810361039b5760843560a43591854211611b6a5791611b5e91611b65936042610a0d9860405160208101917fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf83526001600160a01b038b166040830152896060830152608082015260808152611abf60a082611230565b519020611aca6142c6565b611ad2614330565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611b2360c082611230565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522061324b565b9182613263565b612ce0565b857f4683af0e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461039b57604060031936011261039b57600435611bb58161052e565b6001600160a01b0360243591611bca8361052e565b166000527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526001600160a01b03604060002091166000526020526020604060002054604051908152f35b3461039b57600060031936011261039b576020604051670de0b6b3a76400008152f35b3461039b57600060031936011261039b5760206001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005416604051908152f35b3461039b57611c8e3661128b565b611c96612db8565b80511561146e576000906000905b8051821015611dd657611cb7828261282b565b5191611cda83610ad6336001600160a01b03166000526007602052604060002090565b936002850194611ceb865460ff1690565b611cf4816107d8565b60018103611d9f5750600181015495611d0c876125c4565b4210611d5c57600194959650906113c8611d2693926126e4565b6040519485529333907fdb6471f9e4b5d2a693dd6e5dd51b9e17556916aa1560b83130de0649be4f574890602090a20190611ca4565b610c6886611d69896125c4565b7fa345023a0000000000000000000000000000000000000000000000000000000060005233600452602491909152604452606490565b85610bed6040519283927f52c793680000000000000000000000000000000000000000000000000000000084523360048501612689565b82611df38133611dee6004546001600160a01b031690565b6132dd565b60405190815233907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75908060208101610b8a565b3461039b57600060031936011261039b576020600154604051908152f35b3461039b57608060031936011261039b57600435611e628161052e565b60243590611e6f8261052e565b604435606435907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549367ffffffffffffffff611ec8611eba611eb68860ff9060401c1690565b1590565b9667ffffffffffffffff1690565b16801590816120c1575b60011490816120b7575b1590816120ae575b5061208457611f659385611f5c60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61200957612868565b611f6b57005b611fd67fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290806020810161036c565b61207f680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b612868565b7ff92ee8a90000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538611ee4565b303b159150611edc565b869150611ed2565b3461039b57600060031936011261039b576020600354604051908152f35b3461039b57604060031936011261039b576004356121048161052e565b60243563ffffffff8116810361039b5761217961217f9161216b604094612129612ae3565b50612132612ae3565b506001600160a01b03166000527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604060002090565b612173612ae3565b50613f2e565b50613f46565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff602083519265ffffffffffff81511684520151166020820152f35b3461039b57602060031936011261039b576001600160a01b036004356121da8161052e565b6121e2612afc565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005416177f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00556001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700600080a3005b604051906122ac604083611230565b600582527f73764253580000000000000000000000000000000000000000000000000000006020830152565b3461039b57600060031936011261039b5761046a61188e61229d565b60405190612303604083611230565b600182527f31000000000000000000000000000000000000000000000000000000000000006020830152565b3461039b57600060031936011261039b5761046a61188e6122f4565b90600182811c92168015612394575b602083101461236557565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161235a565b604051906000827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254916123d18361234b565b808352926001811690811561247457506001146123f5575b61126292500383611230565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102600090815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310612458575050906020611262928201016123e9565b6020919350806001915483858901015201910190918492612440565b602092506112629491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016123e9565b604051906000827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354916124e48361234b565b808352926001811690811561247457506001146125075761126292500383611230565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103600090815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b81831061256a575050906020611262928201016123e9565b6020919350806001915483858901015201910190918492612552565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060001982019182116107a257565b9061025882018092116107a257565b90600182018092116107a257565b919082018092116107a257565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254156126405760035460025442034281116107a2576126349060005460015491612c0e565b81018091116107a25790565b60035490565b600190612652826107d8565b52565b60609194936000936001600160a01b036080840197168352602083015261267b816107d8565b6040820152610836836107d8565b60609194936001936001600160a01b036080840197168352602083015261267b816107d8565b6126b960026107d8565b60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b6126ee60036107d8565b60037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b6002604091835181556020840151600182015501910151612739816107d8565b612742816107d8565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008354169116179055565b6001600160a01b031680600052600660205260406000205490806000527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604060002054906127bf6125ee565b90600052600560205260406000205481039081116107a25761263491612b68565b604051906127ef602083611230565b6000808352366020840137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561283f5760209160051b010190565b6127fc565b9081602091031261039b5751801515810361039b5790565b6040513d6000823e3d90fd5b93929190612874611837565b9461287d6122f4565b612885613ab1565b61288d613ab1565b865167ffffffffffffffff811161120f576128d1816128cc7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025461234b565b613b0a565b6020601f8211600114612a10576129b092612911836129f4979694612938946129fc9c9d600092612a05575b50506000198260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10255613c40565b61296160007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10055565b61298a60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155565b6129a3612995611837565b61299d61229d565b906133e5565b6129ab613ab1565b61355d565b6129b8613ab1565b6129c06135b4565b6001600160a01b03167fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455565b600055600155565b61126242600255565b0151905038806128fd565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102600052601f198216987f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9960005b818110612acb5750836129fc9a9b612938946129b097946129f49a999760019510612ab2575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10255613c40565b015160001960f88460031b161c19169055388080612a85565b838301518c556001909b019a60209384019301612a5f565b60405190612af082611214565b60006020838281520152565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303610f2157565b8115612b39570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8181029060001983820990828083109203918083039214612bfd5781670de0b6b3a76400001115612bd3577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac1066993670de0b6b3a7640000910990828211900360ee1b910360121c170290565b7f227bc1530000000000000000000000000000000000000000000000000000000060005260046000fd5b50670de0b6b3a76400009250500490565b90918282029160001984820993838086109503948086039514612c895784831115612bd357829109816000038216809204600281600302188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018380600003040190848311900302920304170290565b5050906103f29250612b2f565b65ffffffffffff8111612cae5765ffffffffffff1690565b7f6dfcc65000000000000000000000000000000000000000000000000000000000600052603060045260245260446000fd5b6001600160a01b0381811660008181527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d006020526040812080548685167fffffffffffffffffffffffff00000000000000000000000000000000000000008216811790925561126296941694612db29390928691907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9080a46001600160a01b03166000527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0060205260406000205490565b916137c6565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005414612e075760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b91906001600160a01b038316928315612f6957600090612e83816001600160a01b03166000527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604060002090565b54838110612f2a57611262949584849203612ed0846001600160a01b03166000527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604060002090565b557f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02805486900390556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3614151565b7fe450d38c0000000000000000000000000000000000000000000000000000000083526001600160a01b03909116600452602452604491909152606490fd5b7f96c6fd1e00000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000007f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0054167f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00556001600160a01b03807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054921691827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b91906001600160a01b0383169283156131ee577f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02548281018091116107a2577f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025560009361313b826001600160a01b03166000527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604060002090565b80548401905560405183815285907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a37f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025479ffffffffffffffffffffffffffffffffffffffffffffffffffff908181116131c05750506112629293614151565b7f1cb15d26000000000000000000000000000000000000000000000000000000008652600452602452604484fd5b7fec442f0500000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b80548061322b575050600090565b806000198101116107a25760001991600052602060002001015460301c90565b916103f2939161325a9361395b565b909291926139e4565b6001600160a01b0316806000527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260406000208054928391600183019055036132ad575050565b7f752d88c00000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292613373926000928392919061333b606488611230565b1694519082865af13d156133dd573d906133548261181b565b916133626040519384611230565b82523d6000602084013e5b836145b5565b80519081151591826133bf575b50506133895750565b7f5274afe7000000000000000000000000000000000000000000000000000000006000526001600160a01b031660045260246000fd5b6133d6925090602080611eb6938301019101612844565b3880613380565b60609061336d565b6133ed613ab1565b6133f5613ab1565b80519067ffffffffffffffff821161120f5761343a826134357f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace035461234b565b613b7c565b602090601f831160011461349557918061346e926112629594600092612a055750506000198260011b9260031b1c19161790565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0355613db7565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03600052601f19831691907f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab09260005b81811061354557509160019391856112629796941061352c575b505050811b017f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0355613db7565b015160001960f88460031b161c191690553880806134ff565b929360206001819287860151815501950193016134e5565b613565613ab1565b61356d613ab1565b6001600160a01b038116156135855761126290612f98565b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b6135bc613ab1565b6135c4613ab1565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b8015613759576103f2906136ef6136e86136de6136d46136ca6136c06136b66136ac600161369a60008b608081901c8061374b575b508061362e6136909260401c90565b8061373e575b5061363f8160201c90565b80613731575b506136508160101c90565b80613724575b506136618160081c90565b80613717575b506136728160041c90565b8061370a575b506136838160021c90565b806136fd575b5060011c90565b6136f55760011c90565b1b6136a5818b612b2f565b0160011c90565b6136a5818a612b2f565b6136a58189612b2f565b6136a58188612b2f565b6136a58187612b2f565b6136a58186612b2f565b6136a58185612b2f565b8092612b2f565b90613f6a565b820160011c90565b6002915092019138613689565b6004915092019138613678565b6008915092019138613667565b6010915092019138613656565b6020915092019138613645565b6040915092019138613634565b60809250905061369061361f565b50600090565b91905b83821061376f5750505090565b9091928083169080841860011c82018092116107a2578460005265ffffffffffff82602060002001541665ffffffffffff8416106000146137b45750925b9190613762565b9392506137c0906125d3565b916137ad565b91906001600160a01b038116926001600160a01b038116908482141580613952575b6137f4575b5050505050565b816138bb575b505082613809575b80806137ed565b6138b06138977fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249361389161388b79ffffffffffffffffffffffffffffffffffffffffffffffffffff956001600160a01b03166000527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604060002090565b91613f7c565b90614052565b6040805192851683529316602082015291829190820190565b0390a2388080613802565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff6139486138976139397fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724946001600160a01b03166000527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604060002090565b61394288613f7c565b90613fee565b0390a238806137fa565b508315156137e8565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116139d8579160209360809260ff60009560405194855216868401526040830152606082015282805260015afa15611a18576000516001600160a01b038116156139cc5790600090600090565b50600090600190600090565b50505060009160039190565b6139ed816107d8565b806139f6575050565b6139ff816107d8565b60018103613a31577ff645eedf0000000000000000000000000000000000000000000000000000000060005260046000fd5b613a3a816107d8565b60028103613a7057507ffce698f70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b80613a7c6003926107d8565b14613a845750565b7fd78bce0c0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615613ae057565b7fd7e6bcf80000000000000000000000000000000000000000000000000000000060005260046000fd5b601f8111613b16575050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026000526020600020906020601f840160051c83019310613b72575b601f0160051c01905b818110613b66575050565b60008155600101613b5b565b9091508190613b52565b601f8111613b88575050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036000526020600020906020601f840160051c83019310613be4575b601f0160051c01905b818110613bd8575050565b60008155600101613bcd565b9091508190613bc4565b601f8211613bfb57505050565b6000526020600020906020601f840160051c83019310613c36575b601f0160051c01905b818110613c2a575050565b60008155600101613c1f565b9091508190613c16565b90815167ffffffffffffffff811161120f57613ca681613c807fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035461234b565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103613bee565b602092601f8211600114613cfa57613cd692938291600092612a055750506000198260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103600052601f198216937f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b759160005b868110613d9f5750836001959610613d86575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b015160001960f88460031b161c19169055388080613d5c565b91926020600181928685015181550194019201613d49565b90815167ffffffffffffffff811161120f57613e1d81613df77f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace045461234b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04613bee565b602092601f8211600114613e7157613e4d92938291600092612a055750506000198260011b9260031b1c19161790565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0455565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04600052601f198216937f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa9160005b868110613f165750836001959610613efd575b505050811b017f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0455565b015160001960f88460031b161c19169055388080613ed3565b91926020600181928685015181550194019201613ec0565b805482101561283f5760005260206000200190600090565b90604051613f5381611214565b915465ffffffffffff8116835260301c6020830152565b9080821015613f77575090565b905090565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff8111613fbc5779ffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7f6dfcc6500000000000000000000000000000000000000000000000000000000060005260d060045260245260446000fd5b90613ff843612c96565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff8061401e8561321d565b92169116039079ffffffffffffffffffffffffffffffffffffffffffffffffffff82116107a25761404e9261440b565b9091565b9061405c43612c96565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff806140828561321d565b92169116019079ffffffffffffffffffffffffffffffffffffffffffffffffffff82116107a25761404e9261440b565b6140bb43612c96565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff806141017fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0261321d565b921691160379ffffffffffffffffffffffffffffffffffffffffffffffffffff81116107a25761404e917fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0261440b565b9091906001600160a01b03168015614204575b6001600160a01b0361126293169081156141ec575b6000527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d006020526001600160a01b0360406000205416906000527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d006020526001600160a01b0360406000205416906137c6565b6141fd6141f884613f7c565b6140b2565b5050614179565b61420d82613f7c565b9261421743612c96565b9379ffffffffffffffffffffffffffffffffffffffffffffffffffff8061425d7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0261321d565b92169116019079ffffffffffffffffffffffffffffffffffffffffffffffffffff82116107a257611262946001600160a01b03926142bb917fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0261440b565b905050935050614164565b6142ce61239e565b80519081156142de576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054801561430b5790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b6143386124b1565b8051908115614348576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10154801561430b5790565b80546801000000000000000081101561120f5761439791600182018155613f2e565b6143dc5781516020929092015160301b7fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001665ffffffffffff92909216919091179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b80549293929190821561457857614439614434614427856125b5565b8360005260206000200190565b613f46565b9065ffffffffffff614451835165ffffffffffff1690565b818516918291161161454e576144ff946020948892614484614479875165ffffffffffff1690565b65ffffffffffff1690565b0361450357506144de9261449a6144a7926125b5565b9060005260206000200190565b9065ffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000083549260301b169116179055565b015179ffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b9190565b91505061454991614523614515611264565b65ffffffffffff9093168352565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff881682860152614375565b6144de565b7f2520601d0000000000000000000000000000000000000000000000000000000060005260046000fd5b6145af9250614588614515611264565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff85166020830152614375565b60009190565b906145f457508051156145ca57805190602001fd5b7f1425ea420000000000000000000000000000000000000000000000000000000060005260046000fd5b8151158061463c575b614605575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b156145fd56fea2646970667358221220a8a8d4c967c57dfa4bb07225e2885877ed3bc6b35a76bff05c49c9dbc1b6b94564736f6c634300081c0033