test-contracts-sovryn
Version:
Smart contracts for the Sovryn protocol and external integrations.
860 lines • 58.6 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "VestingRegistryLogicMockup",
"sourceName": "contracts/mockup/VestingRegistryLogicMockUp.sol",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "AdminAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "AdminRemoved",
"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": "receiver",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "SOVTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "vesting",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "cliff",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "duration",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "vestingCreationType",
"type": "uint256"
}
],
"name": "TeamVestingCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "vesting",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "TokensStaked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "vesting",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "cliff",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "duration",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "vestingCreationType",
"type": "uint256"
}
],
"name": "VestingCreated",
"type": "event"
},
{
"constant": true,
"inputs": [],
"name": "SOV",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_admin",
"type": "address"
}
],
"name": "addAdmin",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address[]",
"name": "_tokenOwners",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_vestingCreationTypes",
"type": "uint256[]"
}
],
"name": "addDeployedVestings",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "admins",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_tokenOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_cliff",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_duration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_vestingCreationType",
"type": "uint256"
}
],
"name": "createTeamVesting",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_tokenOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_cliff",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_duration",
"type": "uint256"
}
],
"name": "createVesting",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_tokenOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_cliff",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_duration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_vestingCreationType",
"type": "uint256"
}
],
"name": "createVestingAddr",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "feeSharingProxy",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_tokenOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "_cliff",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_duration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_vestingCreationType",
"type": "uint256"
}
],
"name": "getTeamVesting",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_tokenOwner",
"type": "address"
}
],
"name": "getVesting",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_tokenOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "_cliff",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_duration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_vestingCreationType",
"type": "uint256"
}
],
"name": "getVestingAddr",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_vestingAddress",
"type": "address"
}
],
"name": "getVestingDetails",
"outputs": [
{
"internalType": "uint256",
"name": "cliff",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "duration",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_tokenOwner",
"type": "address"
}
],
"name": "getVestingsOf",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "vestingType",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "vestingCreationType",
"type": "uint256"
},
{
"internalType": "address",
"name": "vestingAddress",
"type": "address"
}
],
"internalType": "struct VestingRegistryStorage.Vesting[]",
"name": "",
"type": "tuple[]"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_vestingFactory",
"type": "address"
},
{
"internalType": "address",
"name": "_SOV",
"type": "address"
},
{
"internalType": "address",
"name": "_staking",
"type": "address"
},
{
"internalType": "address",
"name": "_feeSharingProxy",
"type": "address"
},
{
"internalType": "address",
"name": "_vestingOwner",
"type": "address"
},
{
"internalType": "address",
"name": "_lockedSOV",
"type": "address"
},
{
"internalType": "address[]",
"name": "_vestingRegistries",
"type": "address[]"
}
],
"name": "initialize",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isOwner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "isVesting",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_vestingAddress",
"type": "address"
}
],
"name": "isVestingAdress",
"outputs": [
{
"internalType": "bool",
"name": "isVestingAddr",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "lockedSOV",
"outputs": [
{
"internalType": "contract LockedSOV",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_admin",
"type": "address"
}
],
"name": "removeAdmin",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_vestingFactory",
"type": "address"
}
],
"name": "setVestingFactory",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_vesting",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "stakeTokens",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "staking",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "transferSOV",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "vestingFactory",
"outputs": [
{
"internalType": "contract IVestingFactory",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "vestingOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "vestingRegistries",
"outputs": [
{
"internalType": "contract IVestingRegistry",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "vestings",
"outputs": [
{
"internalType": "uint256",
"name": "vestingType",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "vestingCreationType",
"type": "uint256"
},
{
"internalType": "address",
"name": "vestingAddress",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "vestingsOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x608060405260006100176001600160e01b0361007016565b6000805462010000600160b01b031916620100006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610074565b3390565b6126b3806100836000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80638da5cb5b11610104578063c680c0b7116100a2578063efb9573311610071578063efb95733146103e7578063f2f46b3b14610407578063f2fde38b1461040f578063f60826ee14610422576101da565b8063c680c0b71461038e578063cc49ede7146103a1578063dbb049d1146103b4578063dfb9366d146103c7576101da565b8063b810c648116100de578063b810c6481461034d578063bd7b590814610360578063c0e0985214610368578063c36519d11461037b576101da565b80638da5cb5b1461031c5780638dedf009146103245780638f32d59b14610345576101da565b806342a82b4f1161017c57806379a83f5a1161014b57806379a83f5a146102b4578063821bee73146102c7578063842a49d5146102e9578063862e229d14610309576101da565b806342a82b4f1461027e5780634cf088d9146102915780636a26b57f1461029957806370480275146102a1576101da565b80631785f53c116101b85780631785f53c146102255780631f50932614610238578063377220fd1461024b578063429b62e51461025e576101da565b806302df0476146101df5780630665a06f1461020857806308dcb3601461021d575b600080fd5b6101f26101ed366004611d2a565b61042a565b6040516101ff91906123a6565b60405180910390f35b61021b610216366004611d2a565b61048b565b005b6101f26104e6565b61021b610233366004611bfc565b6104f5565b61021b610246366004611d8b565b610574565b61021b610259366004611bfc565b610616565b61027161026c366004611bfc565b610646565b6040516101ff919061249b565b61021b61028c366004611c38565b61065b565b6101f26108ca565b6101f26108d9565b61021b6102af366004611bfc565b6108e8565b61021b6102c2366004611cf0565b610961565b6102da6102d5366004611e8e565b610b0d565b6040516101ff939291906125d3565b6102fc6102f7366004611e8e565b610b37565b6040516101ff91906124a9565b61021b610317366004611d8b565b610b5e565b6101f2610bed565b610337610332366004611bfc565b610c02565b6040516101ff9291906125c5565b610271610cf6565b61021b61035b366004611e00565b610d20565b6101f2610e30565b610271610376366004611bfc565b610e3f565b6101f2610389366004611d2a565b610e54565b61021b61039c366004611cf0565b610e5d565b6101f26103af366004611bfc565b610f9d565b6102716103c2366004611bfc565b6110bc565b6103da6103d5366004611cf0565b6110c2565b6040516101ff91906125b7565b6103fa6103f5366004611bfc565b6110f0565b6040516101ff919061248a565b6102fc61123a565b61021b61041d366004611bfc565b611249565b6102fc611276565b60008060015b90506000868287878760405160200161044d95949392919061234d565b60408051601f198184030181529181528151602092830120600090815260099092529020600201546001600160a01b0316925050505b949350505050565b610493610cf6565b806104ad57503360009081526001602052604090205460ff165b6104d25760405162461bcd60e51b81526004016104c990612537565b60405180910390fd5b6104e0848484846000610574565b50505050565b6005546001600160a01b031681565b6104fd610cf6565b6105195760405162461bcd60e51b81526004016104c990612537565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f906105699083906123a6565b60405180910390a150565b61057c610cf6565b8061059657503360009081526001602052604090205460ff165b6105b25760405162461bcd60e51b81526004016104c990612537565b60006105c386858560015b86611285565b9050856001600160a01b03167fd6fcfd83804f6b6b63260c7b99eb10060bc1319dbc9177fb6defc7bd614017bf828686898760405161060695949392919061243e565b60405180910390a2505050505050565b61061e610cf6565b61063a5760405162461bcd60e51b81526004016104c990612537565b61064381611535565b50565b60016020526000908152604090205460ff1681565b610663610cf6565b61067f5760405162461bcd60e51b81526004016104c990612537565b600054610100900460ff1680610698575060005460ff16155b6106b45760405162461bcd60e51b81526004016104c990612527565b600054610100900460ff161580156106df576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0388166107055760405162461bcd60e51b81526004016104c9906125a7565b6001600160a01b03871661072b5760405162461bcd60e51b81526004016104c990612587565b6001600160a01b0386166107515760405162461bcd60e51b81526004016104c990612567565b6001600160a01b0385166107775760405162461bcd60e51b81526004016104c990612517565b6001600160a01b03841661079d5760405162461bcd60e51b81526004016104c990612577565b6107a689611535565b600580546001600160a01b03199081166001600160a01b038b8116919091179092556006805482168a84161790556007805482168984161790556008805482168884161790556003805490911691861691909117905560005b828110156108ac57600084848381811061081557fe5b905060200201602061082a9190810190611bfc565b6001600160a01b031614156108515760405162461bcd60e51b81526004016104c9906124b7565b600484848381811061085f57fe5b90506020020160206108749190810190611bfc565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b0392909216919091179055016107ff565b5080156108bf576000805461ff00191690555b505050505050505050565b6006546001600160a01b031681565b6007546001600160a01b031681565b6108f0610cf6565b61090c5760405162461bcd60e51b81526004016104c990612537565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339906105699083906123a6565b610969610cf6565b8061098357503360009081526001602052604090205460ff165b61099f5760405162461bcd60e51b81526004016104c990612537565b6001600160a01b0382166109c55760405162461bcd60e51b81526004016104c990612507565b600081116109e55760405162461bcd60e51b81526004016104c9906124f7565b60055460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390610a17908590859060040161241c565b602060405180830381600087803b158015610a3157600080fd5b505af1158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a699190810190611e70565b50604051637547c7a360e01b81526001600160a01b03831690637547c7a390610a969084906004016125b7565b600060405180830381600087803b158015610ab057600080fd5b505af1158015610ac4573d6000803e3d6000fd5b50505050816001600160a01b03167fb539ca1e5c8d398ddf1c41c30166f33404941683be4683319b57669a93dad4ef82604051610b0191906125b7565b60405180910390a25050565b6009602052600090815260409020805460018201546002909201549091906001600160a01b031683565b60048181548110610b4457fe5b6000918252602090912001546001600160a01b0316905081565b610b66610cf6565b80610b8057503360009081526001602052604090205460ff165b610b9c5760405162461bcd60e51b81526004016104c990612537565b6000610baa868585846105bd565b9050856001600160a01b03167f3791c6c90c276d011b4b885c0bfba0554342acf50a539baca1b06f070af25ff4828686898760405161060695949392919061243e565b6000546201000090046001600160a01b031690565b6000806000839050806001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4357600080fd5b505afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c7b9190810190611eac565b816001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cec9190810190611eac565b9250925050915091565b600080546201000090046001600160a01b0316610d1161157d565b6001600160a01b031614905090565b610d28610cf6565b80610d4257503360009081526001602052604090205460ff165b610d5e5760405162461bcd60e51b81526004016104c990612537565b60005b83811015610e29576000858583818110610d7757fe5b9050602002016020610d8c9190810190611bfc565b6001600160a01b03161415610db35760405162461bcd60e51b81526004016104c9906124c7565b6000838383818110610dc157fe5b9050602002013511610de55760405162461bcd60e51b81526004016104c990612547565b610e21858583818110610df457fe5b9050602002016020610e099190810190611bfc565b848484818110610e1557fe5b90506020020135611581565b600101610d61565b5050505050565b6008546001600160a01b031681565b600b6020526000908152604090205460ff1681565b60008080610430565b610e65610cf6565b610e815760405162461bcd60e51b81526004016104c990612537565b6001600160a01b038216610ea75760405162461bcd60e51b81526004016104c990612557565b80610ec45760405162461bcd60e51b81526004016104c9906124f7565b60055460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610ef6908590859060040161241c565b602060405180830381600087803b158015610f1057600080fd5b505af1158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f489190810190611e70565b610f645760405162461bcd60e51b81526004016104c990612597565b816001600160a01b03167fe1b0ada289bf82fb641c8c1e1c78f820fae44e8f845760725cdeb09167a289ad82604051610b0191906125b7565b60006110b682600360009054906101000a90046001600160a01b03166001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110299190810190611eac565b600360009054906101000a90046001600160a01b03166001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561107757600080fd5b505afa15801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110af9190810190611eac565b600061042a565b92915050565b50600190565b600a60205281600052604060002081815481106110db57fe5b90600052602060002001600091509150505481565b606080600a6000846001600160a01b03166001600160a01b0316815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561116257602002820191906000526020600020905b81548152602001906001019080831161114e575b50505050509050600081519050606082516040519080825280602002602001820160405280156111ac57816020015b611199611b52565b8152602001906001900390816111915790505b50905060005b8281101561123157600960008583815181106111ca57fe5b6020908102919091018101518252818101929092526040908101600020815160608101835281548152600182015493810193909352600201546001600160a01b031690820152825183908390811061121e57fe5b60209081029190910101526001016111b2565b50949350505050565b6003546001600160a01b031681565b611251610cf6565b61126d5760405162461bcd60e51b81526004016104c990612537565b61064381611ac3565b6002546001600160a01b031681565b600080600087858888876040516020016112a395949392919061234d565b60408051601f198184030181529181528151602092830120600081815260099093529120600201549091506001600160a01b031661150f57846001141561138757600254600554600654600754604051637d2fbb8f60e11b81526001600160a01b039485169463fa5f771e9461132e9490821693908216928f928f928f9291169084906004016123b4565b602060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113809190810190611c1a565b915061147d565b600260009054906101000a90046001600160a01b03166001600160a01b031663546344f0600560009054906101000a90046001600160a01b0316600660009054906101000a90046001600160a01b03168b8b8b600760009054906101000a90046001600160a01b0316600860009054906101000a90046001600160a01b03166040518863ffffffff1660e01b815260040161142897969594939291906123b4565b602060405180830381600087803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061147a9190810190611c1a565b91505b6040805160608101825286815260208082018781526001600160a01b038681168486018181526000888152600986528781209651875593516001808801919091559051600290960180546001600160a01b03191696841696909617909555908d168252600a835284822080548086018255908352838320018690558152600b90915291909120805460ff191690911790555b6000908152600960205260409020600201546001600160a01b0316979650505050505050565b6001600160a01b03811661155b5760405162461bcd60e51b81526004016104c9906124e7565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6004546001906000908190815b81811015611aba576000600482815481106115a557fe5b60009182526020909120015460405163cc49ede760e01b81526001600160a01b039091169063cc49ede7906115de908b906004016123a6565b60206040518083038186803b1580156115f657600080fd5b505afa15801561160a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061162e9190810190611c1a565b90506001600160a01b038116156117e45760008190508887826001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b15801561167f57600080fd5b505afa158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116b79190810190611eac565b836001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b1580156116f057600080fd5b505afa158015611704573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117289190810190611eac565b8b60405160200161173d95949392919061234d565b60408051808303601f1901815282825280516020918201206060840183528a84528184018c81526001600160a01b038781168686018181526000858152600987528781209851895593516001808a01919091559051600290980180546001600160a01b03191698841698909817909755908f168252600a845284822080548088018255908352848320018390558152600b909252919020805460ff19169092179091559450505b6000600483815481106117f357fe5b60009182526020909120015460405163c810a3e360e01b81526001600160a01b039091169063c810a3e39061182c908c906004016123a6565b60206040518083038186803b15801561184457600080fd5b505afa158015611858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061187c9190810190611c1a565b90506001600160a01b03811615611ab05760008190508987826001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b1580156118cd57600080fd5b505afa1580156118e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119059190810190611eac565b836001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561193e57600080fd5b505afa158015611952573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119769190810190611eac565b8c60405160200161198b95949392919061234d565b6040516020818303038152906040528051906020012060001c955060405180606001604052808881526020018a8152602001836001600160a01b031681525060096000888152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050600a60008b6001600160a01b03166001600160a01b031681526020019081526020016000208690806001815401808255809150509060018203906000526020600020016000909192909190915055506001600b6000846001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550505b505060010161158e565b50505050505050565b6001600160a01b038116611ae95760405162461bcd60e51b81526004016104c9906124d7565b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b80356110b68161264a565b80516110b68161264a565b60008083601f840112611ba457600080fd5b50813567ffffffffffffffff811115611bbc57600080fd5b602083019150836020820283011115611bd457600080fd5b9250929050565b80516110b68161265e565b80356110b681612667565b80516110b681612667565b600060208284031215611c0e57600080fd5b60006104838484611b7c565b600060208284031215611c2c57600080fd5b60006104838484611b87565b60008060008060008060008060e0898b031215611c5457600080fd5b6000611c608b8b611b7c565b9850506020611c718b828c01611b7c565b9750506040611c828b828c01611b7c565b9650506060611c938b828c01611b7c565b9550506080611ca48b828c01611b7c565b94505060a0611cb58b828c01611b7c565b93505060c089013567ffffffffffffffff811115611cd257600080fd5b611cde8b828c01611b92565b92509250509295985092959890939650565b60008060408385031215611d0357600080fd5b6000611d0f8585611b7c565b9250506020611d2085828601611be6565b9150509250929050565b60008060008060808587031215611d4057600080fd5b6000611d4c8787611b7c565b9450506020611d5d87828801611be6565b9350506040611d6e87828801611be6565b9250506060611d7f87828801611be6565b91505092959194509250565b600080600080600060a08688031215611da357600080fd5b6000611daf8888611b7c565b9550506020611dc088828901611be6565b9450506040611dd188828901611be6565b9350506060611de288828901611be6565b9250506080611df388828901611be6565b9150509295509295909350565b60008060008060408587031215611e1657600080fd5b843567ffffffffffffffff811115611e2d57600080fd5b611e3987828801611b92565b9450945050602085013567ffffffffffffffff811115611e5857600080fd5b611e6487828801611b92565b95989497509550505050565b600060208284031215611e8257600080fd5b60006104838484611bdb565b600060208284031215611ea057600080fd5b60006104838484611be6565b600060208284031215611ebe57600080fd5b60006104838484611bf1565b6000611ed683836122fc565b505060600190565b611ee78161260e565b82525050565b611ee7611ef98261260e565b612638565b6000611f0982612601565b611f138185612605565b9350611f1e836125fb565b8060005b83811015611f4c578151611f368882611eca565b9750611f41836125fb565b925050600101611f22565b509495945050505050565b611ee781612619565b611ee78161262d565b6000611f76602083612605565b7f56657374696e67207265676973747279206164647265737320696e76616c6964815260200192915050565b6000611faf601f83612605565b7f746f6b656e206f776e65722063616e6e6f742062652030206164647265737300815260200192915050565b6000611fe8602683612605565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000612030601e83612605565b7f76657374696e67466163746f7279206164647265737320696e76616c69640000815260200192915050565b6000612069600e83612605565b6d185b5bdd5b9d081a5b9d985b1a5960921b815260200192915050565b6000612093601783612605565b7f76657374696e67206164647265737320696e76616c6964000000000000000000815260200192915050565b60006120cc601c83612605565b7f76657374696e674f776e6572206164647265737320696e76616c696400000000815260200192915050565b6000612105602e83612605565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015260400192915050565b6000612155600c83612605565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b600061217d602c83612605565b7f76657374696e67206372656174696f6e2074797065206d75737420626520677281526b06561746572207468616e20360a41b602082015260400192915050565b60006121cb601883612605565b7f7265636569766572206164647265737320696e76616c69640000000000000000815260200192915050565b6000612204601f83612605565b7f66656553686172696e6750726f7879206164647265737320696e76616c696400815260200192915050565b600061223d601983612605565b7f4c6f636b6564534f56206164647265737320696e76616c696400000000000000815260200192915050565b6000612276601783612605565b7f7374616b696e67206164647265737320696e76616c6964000000000000000000815260200192915050565b60006122af600f83612605565b6e1d1c985b9cd9995c8819985a5b1959608a1b815260200192915050565b60006122da601383612605565b7214d3d5881859191c995cdcc81a5b9d985b1a59606a1b815260200192915050565b8051606083019061230d8482612333565b5060208201516123206020850182612333565b5060408201516104e06040850182611ede565b611ee78161262a565b611ee76123488261262a565b61262a565b60006123598288611eed565b601482019150612369828761233c565b602082019150612379828661233c565b602082019150612389828561233c565b602082019150612399828461233c565b5060200195945050505050565b602081016110b68284611ede565b60e081016123c2828a611ede565b6123cf6020830189611ede565b6123dc6040830188611ede565b6123e96060830187612333565b6123f66080830186612333565b61240360a0830185611ede565b61241060c0830184611ede565b98975050505050505050565b6040810161242a8285611ede565b6124376020830184612333565b9392505050565b60a0810161244c8288611ede565b6124596020830187612333565b6124666040830186612333565b6124736060830185612333565b6124806080830184612333565b9695505050505050565b602080825281016124378184611efe565b602081016110b68284611f57565b602081016110b68284611f60565b602080825281016110b681611f69565b602080825281016110b681611fa2565b602080825281016110b681611fdb565b602080825281016110b681612023565b602080825281016110b68161205c565b602080825281016110b681612086565b602080825281016110b6816120bf565b602080825281016110b6816120f8565b602080825281016110b681612148565b602080825281016110b681612170565b602080825281016110b6816121be565b602080825281016110b6816121f7565b602080825281016110b681612230565b602080825281016110b681612269565b602080825281016110b6816122a2565b602080825281016110b6816122cd565b602081016110b68284612333565b6040810161242a8285612333565b606081016125e18286612333565b6125ee6020830185612333565b6104836040830184611ede565b60200190565b5190565b90815260200190565b60006110b68261261e565b151590565b6001600160a01b031690565b90565b60006110b68261260e565b60006110b68260006110b68260601b90565b6126538161260e565b811461064357600080fd5b61265381612619565b6126538161262a56fea365627a7a723158207c8f2e0de246ffebef083dd4557d8d44cb2b6338b0bc85081ebfc7e3b29954e56c6578706572696d656e74616cf564736f6c63430005110040",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80638da5cb5b11610104578063c680c0b7116100a2578063efb9573311610071578063efb95733146103e7578063f2f46b3b14610407578063f2fde38b1461040f578063f60826ee14610422576101da565b8063c680c0b71461038e578063cc49ede7146103a1578063dbb049d1146103b4578063dfb9366d146103c7576101da565b8063b810c648116100de578063b810c6481461034d578063bd7b590814610360578063c0e0985214610368578063c36519d11461037b576101da565b80638da5cb5b1461031c5780638dedf009146103245780638f32d59b14610345576101da565b806342a82b4f1161017c57806379a83f5a1161014b57806379a83f5a146102b4578063821bee73146102c7578063842a49d5146102e9578063862e229d14610309576101da565b806342a82b4f1461027e5780634cf088d9146102915780636a26b57f1461029957806370480275146102a1576101da565b80631785f53c116101b85780631785f53c146102255780631f50932614610238578063377220fd1461024b578063429b62e51461025e576101da565b806302df0476146101df5780630665a06f1461020857806308dcb3601461021d575b600080fd5b6101f26101ed366004611d2a565b61042a565b6040516101ff91906123a6565b60405180910390f35b61021b610216366004611d2a565b61048b565b005b6101f26104e6565b61021b610233366004611bfc565b6104f5565b61021b610246366004611d8b565b610574565b61021b610259366004611bfc565b610616565b61027161026c366004611bfc565b610646565b6040516101ff919061249b565b61021b61028c366004611c38565b61065b565b6101f26108ca565b6101f26108d9565b61021b6102af366004611bfc565b6108e8565b61021b6102c2366004611cf0565b610961565b6102da6102d5366004611e8e565b610b0d565b6040516101ff939291906125d3565b6102fc6102f7366004611e8e565b610b37565b6040516101ff91906124a9565b61021b610317366004611d8b565b610b5e565b6101f2610bed565b610337610332366004611bfc565b610c02565b6040516101ff9291906125c5565b610271610cf6565b61021b61035b366004611e00565b610d20565b6101f2610e30565b610271610376366004611bfc565b610e3f565b6101f2610389366004611d2a565b610e54565b61021b61039c366004611cf0565b610e5d565b6101f26103af366004611bfc565b610f9d565b6102716103c2366004611bfc565b6110bc565b6103da6103d5366004611cf0565b6110c2565b6040516101ff91906125b7565b6103fa6103f5366004611bfc565b6110f0565b6040516101ff919061248a565b6102fc61123a565b61021b61041d366004611bfc565b611249565b6102fc611276565b60008060015b90506000868287878760405160200161044d95949392919061234d565b60408051601f198184030181529181528151602092830120600090815260099092529020600201546001600160a01b0316925050505b949350505050565b610493610cf6565b806104ad57503360009081526001602052604090205460ff165b6104d25760405162461bcd60e51b81526004016104c990612537565b60405180910390fd5b6104e0848484846000610574565b50505050565b6005546001600160a01b031681565b6104fd610cf6565b6105195760405162461bcd60e51b81526004016104c990612537565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f906105699083906123a6565b60405180910390a150565b61057c610cf6565b8061059657503360009081526001602052604090205460ff165b6105b25760405162461bcd60e51b81526004016104c990612537565b60006105c386858560015b86611285565b9050856001600160a01b03167fd6fcfd83804f6b6b63260c7b99eb10060bc1319dbc9177fb6defc7bd614017bf828686898760405161060695949392919061243e565b60405180910390a2505050505050565b61061e610cf6565b61063a5760405162461bcd60e51b81526004016104c990612537565b61064381611535565b50565b60016020526000908152604090205460ff1681565b610663610cf6565b61067f5760405162461bcd60e51b81526004016104c990612537565b600054610100900460ff1680610698575060005460ff16155b6106b45760405162461bcd60e51b81526004016104c990612527565b600054610100900460ff161580156106df576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0388166107055760405162461bcd60e51b81526004016104c9906125a7565b6001600160a01b03871661072b5760405162461bcd60e51b81526004016104c990612587565b6001600160a01b0386166107515760405162461bcd60e51b81526004016104c990612567565b6001600160a01b0385166107775760405162461bcd60e51b81526004016104c990612517565b6001600160a01b03841661079d5760405162461bcd60e51b81526004016104c990612577565b6107a689611535565b600580546001600160a01b03199081166001600160a01b038b8116919091179092556006805482168a84161790556007805482168984161790556008805482168884161790556003805490911691861691909117905560005b828110156108ac57600084848381811061081557fe5b905060200201602061082a9190810190611bfc565b6001600160a01b031614156108515760405162461bcd60e51b81526004016104c9906124b7565b600484848381811061085f57fe5b90506020020160206108749190810190611bfc565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b0392909216919091179055016107ff565b5080156108bf576000805461ff00191690555b505050505050505050565b6006546001600160a01b031681565b6007546001600160a01b031681565b6108f0610cf6565b61090c5760405162461bcd60e51b81526004016104c990612537565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339906105699083906123a6565b610969610cf6565b8061098357503360009081526001602052604090205460ff165b61099f5760405162461bcd60e51b81526004016104c990612537565b6001600160a01b0382166109c55760405162461bcd60e51b81526004016104c990612507565b600081116109e55760405162461bcd60e51b81526004016104c9906124f7565b60055460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390610a17908590859060040161241c565b602060405180830381600087803b158015610a3157600080fd5b505af1158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a699190810190611e70565b50604051637547c7a360e01b81526001600160a01b03831690637547c7a390610a969084906004016125b7565b600060405180830381600087803b158015610ab057600080fd5b505af1158015610ac4573d6000803e3d6000fd5b50505050816001600160a01b03167fb539ca1e5c8d398ddf1c41c30166f33404941683be4683319b57669a93dad4ef82604051610b0191906125b7565b60405180910390a25050565b6009602052600090815260409020805460018201546002909201549091906001600160a01b031683565b60048181548110610b4457fe5b6000918252602090912001546001600160a01b0316905081565b610b66610cf6565b80610b8057503360009081526001602052604090205460ff165b610b9c5760405162461bcd60e51b81526004016104c990612537565b6000610baa868585846105bd565b9050856001600160a01b03167f3791c6c90c276d011b4b885c0bfba0554342acf50a539baca1b06f070af25ff4828686898760405161060695949392919061243e565b6000546201000090046001600160a01b031690565b6000806000839050806001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4357600080fd5b505afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c7b9190810190611eac565b816001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cec9190810190611eac565b9250925050915091565b600080546201000090046001600160a01b0316610d1161157d565b6001600160a01b031614905090565b610d28610cf6565b80610d4257503360009081526001602052604090205460ff165b610d5e5760405162461bcd60e51b81526004016104c990612537565b60005b83811015610e29576000858583818110610d7757fe5b9050602002016020610d8c9190810190611bfc565b6001600160a01b03161415610db35760405162461bcd60e51b81526004016104c9906124c7565b6000838383818110610dc157fe5b9050602002013511610de55760405162461bcd60e51b81526004016104c990612547565b610e21858583818110610df457fe5b9050602002016020610e099190810190611bfc565b848484818110610e1557fe5b90506020020135611581565b600101610d61565b5050505050565b6008546001600160a01b031681565b600b6020526000908152604090205460ff1681565b60008080610430565b610e65610cf6565b610e815760405162461bcd60e51b81526004016104c990612537565b6001600160a01b038216610ea75760405162461bcd60e51b81526004016104c990612557565b80610ec45760405162461bcd60e51b81526004016104c9906124f7565b60055460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610ef6908590859060040161241c565b602060405180830381600087803b158015610f1057600080fd5b505af1158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f489190810190611e70565b610f645760405162461bcd60e51b81526004016104c990612597565b816001600160a01b03167fe1b0ada289bf82fb641c8c1e1c78f820fae44e8f845760725cdeb09167a289ad82604051610b0191906125b7565b60006110b682600360009054906101000a90046001600160a01b03166001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110299190810190611eac565b600360009054906101000a90046001600160a01b03166001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561107757600080fd5b505afa15801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110af9190810190611eac565b600061042a565b92915050565b50600190565b600a60205281600052604060002081815481106110db57fe5b90600052602060002001600091509150505481565b606080600a6000846001600160a01b03166001600160a01b0316815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561116257602002820191906000526020600020905b81548152602001906001019080831161114e575b50505050509050600081519050606082516040519080825280602002602001820160405280156111ac57816020015b611199611b52565b8152602001906001900390816111915790505b50905060005b8281101561123157600960008583815181106111ca57fe5b6020908102919091018101518252818101929092526040908101600020815160608101835281548152600182015493810193909352600201546001600160a01b031690820152825183908390811061121e57fe5b60209081029190910101526001016111b2565b50949350505050565b6003546001600160a01b031681565b611251610cf6565b61126d5760405162461bcd60e51b81526004016104c990612537565b61064381611ac3565b6002546001600160a01b031681565b600080600087858888876040516020016112a395949392919061234d565b60408051601f198184030181529181528151602092830120600081815260099093529120600201549091506001600160a01b031661150f57846001141561138757600254600554600654600754604051637d2fbb8f60e11b81526001600160a01b039485169463fa5f771e9461132e9490821693908216928f928f928f9291169084906004016123b4565b602060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113809190810190611c1a565b915061147d565b600260009054906101000a90046001600160a01b03166001600160a01b031663546344f0600560009054906101000a90046001600160a01b0316600660009054906101000a90046001600160a01b03168b8b8b600760009054906101000a90046001600160a01b0316600860009054906101000a90046001600160a01b03166040518863ffffffff1660e01b815260040161142897969594939291906123b4565b602060405180830381600087803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061147a9190810190611c1a565b91505b6040805160608101825286815260208082018781526001600160a01b038681168486018181526000888152600986528781209651875593516001808801919091559051600290960180546001600160a01b03191696841696909617909555908d168252600a835284822080548086018255908352838320018690558152600b90915291909120805460ff191690911790555b6000908152600960205260409020600201546001600160a01b0316979650505050505050565b6001600160a01b03811661155b5760405162461bcd60e51b81526004016104c9906124e7565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6004546001906000908190815b81811015611aba576000600482815481106115a557fe5b60009182526020909120015460405163cc49ede760e01b81526001600160a01b039091169063cc49ede7906115de908b906004016123a6565b60206040518083038186803b1580156115f65760008