@mantleio/contracts
Version:
[Mantle] L1 and L2 smart contracts for Mantle
1,241 lines • 130 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "TssDelegationManager",
"sourceName": "contracts/L1/tss/delegation/TssDelegationManager.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IDelegation",
"name": "_delegation",
"type": "address"
},
{
"internalType": "contract IDelegationSlasher",
"name": "_delegationSlasher",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Paused",
"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": "depositor",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "withdrawer",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "withdrawalRoot",
"type": "bytes32"
}
],
"name": "WithdrawalCompleted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "depositor",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "withdrawer",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "delegatedAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "withdrawalRoot",
"type": "bytes32"
}
],
"name": "WithdrawalQueued",
"type": "event"
},
{
"inputs": [],
"name": "DEPOSIT_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "DOMAIN_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "REASONABLE_STAKES_UPDATE_PERIOD",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "WITHDRAWAL_WAITING_PERIOD",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toAddAddresses",
"type": "address[]"
}
],
"name": "addToWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "contract IDelegationShare[]",
"name": "delegations",
"type": "address[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "shares",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "depositor",
"type": "address"
},
{
"components": [
{
"internalType": "address",
"name": "withdrawer",
"type": "address"
},
{
"internalType": "uint96",
"name": "nonce",
"type": "uint96"
}
],
"internalType": "struct IDelegationManager.WithdrawerAndNonce",
"name": "withdrawerAndNonce",
"type": "tuple"
},
{
"internalType": "address",
"name": "delegatedAddress",
"type": "address"
}
],
"internalType": "struct IDelegationManager.QueuedWithdrawal",
"name": "queuedWithdrawal",
"type": "tuple"
}
],
"name": "calculateWithdrawalRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "contract IDelegationShare[]",
"name": "delegations",
"type": "address[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "shares",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "depositor",
"type": "address"
},
{
"components": [
{
"internalType": "address",
"name": "withdrawer",
"type": "address"
},
{
"internalType": "uint96",
"name": "nonce",
"type": "uint96"
}
],
"internalType": "struct IDelegationManager.WithdrawerAndNonce",
"name": "withdrawerAndNonce",
"type": "tuple"
},
{
"internalType": "address",
"name": "delegatedAddress",
"type": "address"
}
],
"internalType": "struct IDelegationManager.QueuedWithdrawal",
"name": "queuedWithdrawal",
"type": "tuple"
}
],
"name": "canCompleteQueuedWithdrawal",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "contract IDelegationShare[]",
"name": "delegations",
"type": "address[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "shares",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "depositor",
"type": "address"
},
{
"components": [
{
"internalType": "address",
"name": "withdrawer",
"type": "address"
},
{
"internalType": "uint96",
"name": "nonce",
"type": "uint96"
}
],
"internalType": "struct IDelegationManager.WithdrawerAndNonce",
"name": "withdrawerAndNonce",
"type": "tuple"
},
{
"internalType": "address",
"name": "delegatedAddress",
"type": "address"
}
],
"internalType": "struct IDelegationManager.QueuedWithdrawal",
"name": "queuedWithdrawal",
"type": "tuple"
},
{
"internalType": "bool",
"name": "receiveAsTokens",
"type": "bool"
}
],
"name": "completeQueuedWithdrawal",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"components": [
{
"internalType": "contract IDelegationShare[]",
"name": "delegations",
"type": "address[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "shares",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "depositor",
"type": "address"
},
{
"components": [
{
"internalType": "address",
"name": "withdrawer",
"type": "address"
},
{
"internalType": "uint96",
"name": "nonce",
"type": "uint96"
}
],
"internalType": "struct IDelegationManager.WithdrawerAndNonce",
"name": "withdrawerAndNonce",
"type": "tuple"
},
{
"internalType": "address",
"name": "delegatedAddress",
"type": "address"
}
],
"internalType": "struct IDelegationManager.QueuedWithdrawal",
"name": "queuedWithdrawal",
"type": "tuple"
},
{
"internalType": "bool",
"name": "receiveAsTokens",
"type": "bool"
}
],
"name": "completeQueuedWithdrawal",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "delegation",
"outputs": [
{
"internalType": "contract IDelegation",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "delegationSlasher",
"outputs": [
{
"internalType": "contract IDelegationSlasher",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IDelegationShare",
"name": "delegationShare",
"type": "address"
},
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "depositInto",
"outputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IDelegationShare",
"name": "delegationShare",
"type": "address"
},
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "depositInto",
"outputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker",
"type": "address"
},
{
"internalType": "contract IDelegationShare",
"name": "delegationShare",
"type": "address"
}
],
"name": "getDelegationShares",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "depositor",
"type": "address"
}
],
"name": "getDeposits",
"outputs": [
{
"internalType": "contract IDelegationShare[]",
"name": "",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker",
"type": "address"
}
],
"name": "getWithdrawNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "initialOwner",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_stakingSlashing",
"type": "address"
},
{
"internalType": "address",
"name": "_tssGroupManager",
"type": "address"
},
{
"internalType": "uint256",
"name": "_minStakeAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "initialOwner",
"type": "address"
}
],
"name": "initializeT",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker",
"type": "address"
}
],
"name": "investorDelegationLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "contract IDelegationShare",
"name": "",
"type": "address"
}
],
"name": "investorDelegationShares",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "investorDelegations",
"outputs": [
{
"internalType": "contract IDelegationShare",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_addr",
"type": "address"
},
{
"internalType": "contract IDelegationShare",
"name": "delegationShare",
"type": "address"
}
],
"name": "isCanOperator",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "minStakeAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "numWithdrawalsQueued",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "delegationIndexes",
"type": "uint256[]"
},
{
"internalType": "contract IDelegationShare[]",
"name": "delegationShares",
"type": "address[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "shares",
"type": "uint256[]"
},
{
"components": [
{
"internalType": "address",
"name": "withdrawer",
"type": "address"
},
{
"internalType": "uint96",
"name": "nonce",
"type": "uint96"
}
],
"internalType": "struct IDelegationManager.WithdrawerAndNonce",
"name": "withdrawerAndNonce",
"type": "tuple"
}
],
"name": "queueWithdrawal",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "delegationIndexes",
"type": "uint256[]"
},
{
"internalType": "contract IDelegationShare[]",
"name": "delegationShares",
"type": "address[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "shares",
"type": "uint256[]"
},
{
"components": [
{
"internalType": "address",
"name": "withdrawer",
"type": "address"
},
{
"internalType": "uint96",
"name": "nonce",
"type": "uint96"
}
],
"internalType": "struct IDelegationManager.WithdrawerAndNonce",
"name": "withdrawerAndNonce",
"type": "tuple"
},
{
"internalType": "bool",
"name": "undelegateIfPossible",
"type": "bool"
}
],
"name": "queueWithdrawal",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "queuedWithdrawals",
"outputs": [
{
"internalType": "uint32",
"name": "initTimestamp",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "unlockTimestamp",
"type": "uint32"
},
{
"internalType": "address",
"name": "withdrawer",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toRemoveAddresses",
"type": "address[]"
}
],
"name": "removeFromWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "setMinStakeAmount",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_address",
"type": "address"
}
],
"name": "setStakingSlash",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_addr",
"type": "address"
}
],
"name": "setTssGroupManager",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"components": [
{
"internalType": "contract IDelegationShare[]",
"name": "delegations",
"type": "address[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "shares",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "depositor",
"type": "address"
},
{
"components": [
{
"internalType": "address",
"name": "withdrawer",
"type": "address"
},
{
"internalType": "uint96",
"name": "nonce",
"type": "uint96"
}
],
"internalType": "struct IDelegationManager.WithdrawerAndNonce",
"name": "withdrawerAndNonce",
"type": "tuple"
},
{
"internalType": "address",
"name": "delegatedAddress",
"type": "address"
}
],
"internalType": "struct IDelegationManager.QueuedWithdrawal",
"name": "queuedWithdrawal",
"type": "tuple"
}
],
"name": "slashQueuedWithdrawal",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "slashedAddress",
"type": "address"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "contract IDelegationShare[]",
"name": "delegationShares",
"type": "address[]"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "delegationIndexes",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "shareAmounts",
"type": "uint256[]"
}
],
"name": "slashShares",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "stakingSlash",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "withdrawalRoot",
"type": "bytes32"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint32",
"name": "stakeInactiveAfter",
"type": "uint32"
}
],
"name": "startQueuedWithdrawalWaitingPeriod",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "withdrawalRoot",
"type": "bytes32"
},
{
"internalType": "uint32",
"name": "stakeInactiveAfter",
"type": "uint32"
}
],
"name": "startQueuedWithdrawalWaitingPeriod",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "tssGroupManager",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "undelegate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "whitelist",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60c06040523480156200001157600080fd5b50604051620063df380380620063df833981016040819052620000349162000143565b6001600160a01b03808316608052811660a05281816200005362000068565b5062000060905062000068565b505062000182565b600054610100900460ff1615620000d55760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000128576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014057600080fd5b50565b600080604083850312156200015757600080fd5b825162000164816200012a565b602084015190925062000177816200012a565b809150509250929050565b60805160a0516161b962000226600039600081816106b801528181610b7e01528181611127015281816119c201528181611f590152818161270501528181612e370152818161347e015261393c01526000818161071801528181610abf015281816114b20152818161157b01528181613bfb01528181613cbf01528181614460015281816145170152818161478501528181614aab0152614dac01526161b96000f3fe608060405234801561001057600080fd5b50600436106102ff5760003560e01c806388fdccf91161019c578063a49b5234116100ee578063d6495d5f11610097578063f188768411610071578063f18876841461074d578063f2fde38b14610756578063fd3eb81f1461076957600080fd5b8063d6495d5f14610700578063df5cf72314610713578063eb4af0451461073a57600080fd5b8063bb580774116100c8578063bb580774146106b3578063c4d66de8146106da578063cf4c8a7b146106ed57600080fd5b8063a49b52341461067a578063a7c373bc1461068d578063b0eeb55e146106a057600080fd5b806394f649dd116101505780639b19251a1161012a5780639b19251a1461060f5780639cb600ba14610632578063a319af611461065d57600080fd5b806394f649dd146105705780639887bd231461059157806399f5371b1461059957600080fd5b80638da5cb5b116101815780638da5cb5b14610544578063905308631461055557806392ab89bb1461056857600080fd5b806388fdccf91461051e5780638941086c1461053157600080fd5b80635350262e11610255578063715018a6116102095780637f649783116101e35780637f649783146104cf578063863111ac146104e25780638885a1ec146104f557600080fd5b8063715018a614610494578063785112021461049c5780637ecebe00146104af57600080fd5b8063566310281161023a57806356631028146104565780635c975abb1461047657806363f1dcce1461048157600080fd5b80635350262e14610420578063548db1741461044357600080fd5b80633644e515116102b757806348825e941161029157806348825e94146103d3578063520381c0146103fa578063529075a51461040d57600080fd5b80633644e5151461038c5780633fd228f514610395578063423b3cf8146103c057600080fd5b80631abeb0d9116102e85780631abeb0d91461033f57806320606b7014610352578063231c7f0d1461037957600080fd5b806305579ccc1461030457806306f1f6841461032a575b600080fd5b610317610312366004615320565b61077c565b6040519081526020015b60405180910390f35b61033d6103383660046153a5565b610832565b005b61031761034d36600461548d565b610b41565b6103177f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103176103873660046157be565b610def565b61031760c95481565b60d1546103a8906001600160a01b031681565b6040516001600160a01b039091168152602001610321565b6103a86103ce3660046157f3565b610e3c565b6103177f0a564d4cfe5cb0d4ee082aab2ca54b8c48e129485a8f7c77766ab5ef0c3566f181565b61033d61040836600461548d565b610e74565b61031761041b366004615837565b6110e3565b61043361042e36600461592f565b6118f1565b6040519015158152602001610321565b61033d610451366004615964565b611ae3565b6103176104643660046159a6565b60ce6020526000908152604090205481565b60655460ff16610433565b61033d61048f3660046159d7565b611b77565b61033d611ef5565b61033d6104aa366004615a2e565b611f09565b6103176104bd3660046159a6565b60ca6020526000908152604090205481565b61033d6104dd366004615964565b61261d565b61033d6104f0366004615a75565b6126b5565b6103176105033660046159a6565b6001600160a01b0316600090815260cc602052604090205490565b61031761052c366004615ad9565b612dfc565b61033d61053f366004615b1a565b613027565b6033546001600160a01b03166103a8565b61033d610563366004615b46565b61331b565b61033d613778565b61058361057e3660046159a6565b613781565b604051610321929190615c0a565b610317601e81565b6105e36105a7366004615c38565b60cd6020526000908152604090205463ffffffff808216916401000000008104909116906801000000000000000090046001600160a01b031683565b6040805163ffffffff94851681529390921660208401526001600160a01b031690820152606001610321565b61043361061d3660046159a6565b60cf6020526000908152604090205460ff1681565b610317610640366004615320565b60cb60209081526000928352604080842090915290825290205481565b610665600a81565b60405163ffffffff9091168152602001610321565b610317610688366004615c51565b613901565b61031761069b3660046159a6565b613b1d565b6104336106ae366004615320565b613bc0565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b61033d6106e83660046159a6565b613df7565b60d0546103a8906001600160a01b031681565b61033d61070e3660046159a6565b614016565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b61033d610748366004615c38565b614058565b61031760d25481565b61033d6107643660046159a6565b614065565b61033d6107773660046159a6565b6140f5565b60d0546000906001600160a01b031633146108045760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506001600160a01b03808316600090815260cb60209081526040808320938516835292905220545b92915050565b61083a614137565b60d0546001600160a01b031633146108ba5760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b6002609754141561090d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b6002609755600087815b81811015610a8e576109818d88888681811061093557610935615d26565b905060200201358d8d8581811061094e5761094e615d26565b905060200201602081019061096391906159a6565b88888681811061097557610975615d26565b9050602002013561418a565b1561098d578260010192505b8a8a8281811061099f5761099f615d26565b90506020020160208101906109b491906159a6565b6001600160a01b031663d9caed128d8b8b858181106109d5576109d5615d26565b90506020020160208101906109ea91906159a6565b8888868181106109fc576109fc615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050806001019050610917565b506040517f5820491c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635820491c90610afc908f908e908e908a908a90600401615d55565b600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b505060016097555050505050505050505050505050565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015260009183917f0000000000000000000000000000000000000000000000000000000000000000169063e58398369060240160206040518083038186803b158015610bc057600080fd5b505afa158015610bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf89190615dfd565b15610c915760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b60026097541415610ce45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b60026097556001600160a01b038616600090815260cf6020526040902054869060ff16610d535760405162461bcd60e51b815260206004820152601060248201527f4e4f545f494e5f57484954454c4953540000000000000000000000000000000060448201526064016107fb565b60d0546001600160a01b03163314610dd35760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b610ddf848888886142f4565b6001609755979650505050505050565b80516020808301516040808501516060860151608087015160a08801519351600097610e1f979096959101615e1a565b604051602081830303815290604052805190602001209050919050565b60cc6020528160005260406000208181548110610e5857600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff1615808015610e945750600054600160ff909116105b80610eae5750303b158015610eae575060005460ff166001145b610f205760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107fb565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610f7e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600681526020017f4d616e746c6500000000000000000000000000000000000000000000000000008152504630604051602001610fea9493929190615f4c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060c95561102c826143bb565b60d080546001600160a01b038088167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560d180549287169290911691909117905560d283905580156110dc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60006110ed614137565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b03808d1660048301528c917f00000000000000000000000000000000000000000000000000000000000000009091169063e58398369060240160206040518083038186803b15801561116b57600080fd5b505afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190615dfd565b1561123c5760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b60d0546001600160a01b031633146112bc5760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b6002609754141561130f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b60026097556001600160a01b038c16600090815260ce6020908152604091829020549161134191908601908601615f85565b6bffffffffffffffffffffffff16146113c25760405162461bcd60e51b815260206004820152603b60248201527f496e766573746d656e744d616e616765722e717565756557697468647261776160448201527f6c3a2070726f7669646564206e6f6e636520696e636f7272656374000000000060648201526084016107fb565b600188146114125760405162461bcd60e51b815260206004820152601960248201527f6f6e6c79207473732064656c65676174696f6e2073686172650000000000000060448201526064016107fb565b600184146114625760405162461bcd60e51b815260206004820152601960248201527f6f6e6c79207473732064656c65676174696f6e2073686172650000000000000060448201526064016107fb565b6001600160a01b03808d16600081815260ce602052604080822080546001019055517f65da12640000000000000000000000000000000000000000000000000000000081526004810192909252917f000000000000000000000000000000000000000000000000000000000000000016906365da12649060240160206040518083038186803b1580156114f457600080fd5b505afa158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152c9190615fa0565b90506115798d8b8b600081811061154557611545615d26565b905060200201602081019061155a91906159a6565b8888600081811061156d5761156d615d26565b90506020020135614425565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635820491c8e8c8c8a8a6040518663ffffffff1660e01b81526004016115cd959493929190615d55565b600060405180830381600087803b1580156115e757600080fd5b505af11580156115fb573d6000803e3d6000fd5b505050506116588d8d8d600081811061161657611616615d26565b905060200201358c8c600081811061163057611630615d26565b905060200201602081019061164591906159a6565b8989600081811061097557610975615d26565b506040805160e060208c02808301820190935260c082018c815260009383928f918f918291908601908490808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b918291850190849080828437600081840152601f19601f8201169050808301925050505050505081526020018f6001600160a01b03168152602001868036038101906117379190615fbd565b8152602001836001600160a01b03168152509050600061175682610def565b90506040518060600160405280601e426117709190616008565b63ffffffff16815260200163ffffffff8016815260200187600001602081019061179a91906159a6565b6001600160a01b031681525060cd600083815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a8154816001600160a01b0302191690836001600160a01b0316021790555090505060008f905060cc6000826001600160a01b03166001600160a01b03168152602001908152602001600020805490506000141561187657611876816149e7565b6001600160a01b03841661188d60208901896159a6565b6001600160a01b0316826001600160a01b03167f4d91ce160b707b07397f4ad8150b1535d0c2c34d7376c0fe7a227fc088ad6214856040516118d191815260200190565b60405180910390a45060016097559e9d5050505050505050505050505050565b60008061190061038784616020565b600081815260cd6020526040902054909150640100000000900463ffffffff166119b85760405162461bcd60e51b815260206004820152604860248201527f44656c65676174696f6e4d616e616765722e63616e436f6d706c65746551756560448201527f7565645769746864726177616c3a207769746864726177616c20646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107fb565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e58398366119f760e0860160c087016159a6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a869190615dfd565b15611a945750600092915050565b600081815260cd602052604090205463ffffffff640100000000909104811642909116101580611adc57506000611ad160e0850160c086016159a6565b6001600160a01b0316145b9392505050565b611aeb614b03565b60005b81811015611b725760cf6000848484818110611b0c57611b0c615d26565b9050602002016020810190611b2191906159a6565b6001600160a01b03168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580611b6a8161602c565b915050611aee565b505050565b60d0546001600160a01b03163314611bf75760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016107fb565b600083815260cd6020526040902054640100000000900463ffffffff90811614611cd55760405162461bcd60e51b815260206004820152606b60248201527f496e766573746d656e744d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a205769746864726177616c60648201527f207374616b6520696e61637469766520636c61696d2068617320616c7265616460848201527f79206265656e206d61646500000000000000000000000000000000000000000060a482015260c4016107fb565b600083815260cd60205260409020546001600160a01b03838116680100000000000000009092041614611d965760405162461bcd60e51b815260206004820152605260248201527f496e766573746d656e744d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a2053656e6465722069732060648201527f6e6f742074686520776974686472617765720000000000000000000000000000608482015260a4016107fb565b600083815260cd602052604090205463ffffffff164211611e915760405162461bcd60e51b815260206004820152609060248201527f496e766573746d656e744d616e616765722e737461727451756575656457697460448201527f6864726177616c57616974696e67506572696f643a205374616b65206d61792060648201527f7374696c6c206265207375626a65637420746f20736c617368696e672062617360848201527f6564206f6e206e6577207461736b732e205761697420746f207365742073746160a48201527f6b65496e61637469766541667465722e0000000000000000000000000000000060c482015260e4016107fb565b611ea5611e9f600a42616065565b82614b5d565b600093845260cd6020526040909320805463ffffffff94909416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff909416939093179092555050565b611efd614b03565b611f0760006143bb565b565b611f11614137565b611f2160e0830160c084016159a6565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e58398369060240160206040518083038186803b158015611f9b57600080fd5b505afa158015611faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd39190615dfd565b1561206c5760405162461bcd60e51b815260206004820152605660248201527f44656c65676174696f6e4d616e616765722e6f6e6c794e6f7446726f7a656e3a60448201527f207374616b657220686173206265656e2066726f7a656e20616e64206d61792060648201527f6265207375626a65637420746f20736c617368696e6700000000000000000000608482015260a4016107fb565b600260975414156120bf5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107fb565b600260975560006120d261038785616020565b600081815260cd60209081526040918290208251606081018452905463ffffffff80821683526401000000008204169282018390526801000000000000000090046001600160a01b031692810192909252919250906121bf5760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a207769746864726177616c20646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107fb565b806020015163ffffffff164263ffffffff161015806121f6575060006121eb60e0870160c088016159a6565b6001600160a01b0316145b6122da5760405162461bcd60e51b815260206004820152608e60248201527f44656c65676174696f6e4d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a207769746864726177616c2077616974696e67207060648201527f6572696f6420686173206e6f74207965742070617373656420616e642064657060848201527f6f7369746f72207761732064656c656761746564207768656e2077697468647260a48201527f6177616c20696e6974696174656400000000000000000000000000000000000060c482015260e4016107fb565b6122ea60a08601608087016159a6565b6001600160a01b0316336001600160a01b0316146123bc5760405162461bcd60e51b815260206004820152606660248201527f44656c65676174696f6e4d616e616765722e636f6d706c65746551756575656460448201527f5769746864726177616c3a206f6e6c792073706563696669656420776974686460648201527f72617765722063616e20636f6d706c657465206120717565756564207769746860848201527f64726177616c000000000000000000000000000000000000000000000000000060a482015260c4016107fb565b600082815260cd6020526040812080547fffffffff000000000000000000000000000000000000000000000000000000001690556123fa868061608d565b915050841561253a5760005b8181101561253457612418878061608d565b8281811061242857612428615d26565b905060200201602081019061243d91906159a6565b6001600160a01b031663d9caed128460400151898060200190612460919061608d565b8581811061247057612470615d26565b905060200201602081019061248591906159a6565b61249260408c018c61608d565b868181106124a2576124a2615d26565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561251157600080fd5b505af1158015612525573d6000803e3d6000fd5b50505050806001019050612406565b506125b0565b60005b818110156125ae5760408301516125a690612558898061608d565b8481811061256857612568615d26565b905060200201602081019061257d91906159a6565b61258a60408b018b61608d565b8581811061259a5761259a615d26565b90506020020135614b7f565b60010161253d565b505b60408201516001600160a01b03166125ce60808801606089016159a6565b6001600160a01b03167f68c822b7070b88d8b19e597c8468af2178f99568172a673cff038bd572932d9f8560405161260891815260200190565b60405180910390a35050600160975550505050565b612625614b03565b60005b81811015611b7257600160cf600085858581811061264857612648615d26565b905060200201602081019061265d91906159a6565b6001600160a01b03168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055806126ad8161602c565b915050612628565b6126bd614137565b6126cd60e0830160c084016159a6565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301