Skip to content

Instantly share code, notes, and snippets.

@AugustoL
Created August 19, 2021 22:37
Show Gist options
  • Save AugustoL/06c5c5c45bc884539f1f461ae30d2ad2 to your computer and use it in GitHub Desktop.
Save AugustoL/06c5c5c45bc884539f1f461ae30d2ad2 to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.5.17+commit.d19bba13.js&optimize=true&runs=200&gist=
REMIX EXAMPLE PROJECT
Remix example project is present when Remix loads very first time or there are no files existing in the File Explorer.
It contains 3 directories:
1. 'contracts': Holds three contracts with different complexity level, denoted with number prefix in file name.
2. 'scripts': Holds two scripts to deploy a contract. It is explained below.
3. 'tests': Contains one test file for 'Ballot' contract with unit tests in Solidity.
SCRIPTS
The 'scripts' folder contains example async/await scripts for deploying the 'Storage' contract.
For the deployment of any other contract, 'contractName' and 'constructorArgs' should be updated (along with other code if required).
Scripts have full access to the web3.js and ethers.js libraries.
To run a script, right click on file name in the file explorer and click 'Run'. Remember, Solidity file must already be compiled.
Output from script will appear in remix terminal.
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {}
},
"abi": [
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
}
]
}
{
"compiler": {
"version": "0.5.17+commit.d19bba13"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
}
],
"devdoc": {
"methods": {}
},
"userdoc": {
"methods": {}
}
},
"settings": {
"compilationTarget": {
"contracts/DXReputation.sol": "Context"
},
"evmVersion": "istanbul",
"libraries": {},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
},
"sources": {
"contracts/DXReputation.sol": {
"keccak256": "0x2c12731db2408f28a1b126d82b33014eb2c1c0714a0bb6c3b4050e56acf9f647",
"urls": [
"bzz-raw://90761993ba1bd6e4e36a5acabecc79aa2b1764871235dfc97120fcb806fbb529",
"dweb:/ipfs/QmWVFotBgnBj7fRcqqUoocSK5wfLUcdvLtcU7FzYPGfTpm"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "60806040526000805460ff60a01b1916600960a11b17905534801561002357600080fd5b506100356001600160e01b0361008216565b600080546001600160a01b0319166001600160a01b03928316178082556040519216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3610086565b3390565b610c9f806100956000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063715018a611610071578063715018a6146102aa5780638da5cb5b146102b45780638f32d59b146102d8578063981b24d0146102e05780639dc29fac146102fd578063f2fde38b14610329576100b4565b806307ea5477146100b957806318160ddd146101f4578063313ce5671461020e57806340c10f191461022c5780634ee2cd7e1461025857806370a0823114610284575b600080fd5b6101e0600480360360408110156100cf57600080fd5b8101906020810181356401000000008111156100ea57600080fd5b8201836020820111156100fc57600080fd5b8035906020019184602083028401116401000000008311171561011e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561016e57600080fd5b82018360208201111561018057600080fd5b803590602001918460208302840111640100000000831117156101a257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061034f945050505050565b604080519115158252519081900360200190f35b6101fc610507565b60408051918252519081900360200190f35b610216610518565b6040805160ff9092168252519081900360200190f35b6101e06004803603604081101561024257600080fd5b506001600160a01b038135169060200135610528565b6101fc6004803603604081101561026e57600080fd5b506001600160a01b038135169060200135610623565b6101fc6004803603602081101561029a57600080fd5b50356001600160a01b03166106b3565b6102b26106c7565b005b6102bc610758565b604080516001600160a01b039092168252519081900360200190f35b6101e0610767565b6101fc600480360360208110156102f657600080fd5b503561078b565b6101e06004803603604081101561031357600080fd5b506001600160a01b0381351690602001356107dd565b6102b26004803603602081101561033f57600080fd5b50356001600160a01b03166108c8565b6000610359610767565b610398576040805162461bcd60e51b81526020600482018190526024820152600080516020610c4b833981519152604482015290519081900360640190fd5b60005b83518110156104fb5760006103ae610507565b9050808483815181106103bd57fe5b6020026020010151820110156103d257600080fd5b60006103f08684815181106103e357fe5b60200260200101516106b3565b9050808584815181106103ff57fe5b60200260200101518201101561041457600080fd5b610434600286858151811061042557fe5b6020026020010151840161091b565b61048a6001600088868151811061044757fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002086858151811061047b57fe5b6020026020010151830161091b565b85838151811061049657fe5b60200260200101516001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858685815181106104d457fe5b60200260200101516040518082815260200191505060405180910390a2505060010161039b565b50600190505b92915050565b60006105124361078b565b90505b90565b600054600160a01b900460ff1681565b6000610532610767565b610571576040805162461bcd60e51b81526020600482018190526024820152600080516020610c4b833981519152604482015290519081900360640190fd5b600061057b610507565b905080838201101561058c57600080fd5b6000610597856106b3565b90508084820110156105a857600080fd5b6105b5600285840161091b565b6001600160a01b03851660009081526001602052604090206105d99082860161091b565b6040805185815290516001600160a01b038716917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a2506001949350505050565b6001600160a01b038216600090815260016020526040812054158061067d57506001600160a01b0383166000908152600160205260408120805484929061066657fe5b6000918252602090912001546001600160801b0316115b1561068a57506000610501565b6001600160a01b03831660009081526001602052604090206106ac9083610a09565b9050610501565b60006106bf8243610623565b90505b919050565b6106cf610767565b61070e576040805162461bcd60e51b81526020600482018190526024820152600080516020610c4b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b600080546001600160a01b031661077c610b39565b6001600160a01b031614905090565b60025460009015806107be57508160026000815481106107a757fe5b6000918252602090912001546001600160801b0316115b156107cb575060006106c2565b6107d6600283610a09565b90506106c2565b60006107e7610767565b610826576040805162461bcd60e51b81526020600482018190526024820152600080516020610c4b833981519152604482015290519081900360640190fd5b6000610830610507565b905082600061083e866106b3565b90508181101561084c578091505b610859600283850361091b565b6001600160a01b038616600090815260016020526040902061087d9083830361091b565b6040805183815290516001600160a01b038816917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a250600195945050505050565b6108d0610767565b61090f576040805162461bcd60e51b81526020600482018190526024820152600080516020610c4b833981519152604482015290519081900360640190fd5b61091881610b3d565b50565b80816001600160801b03161461093057600080fd5b815415806109645750815443908390600019810190811061094d57fe5b6000918252602090912001546001600160801b0316105b156109cb578154600090839061097d8260018301610bdd565b8154811061098757fe5b600091825260209091200180546001600160801b03848116600160801b024382166fffffffffffffffffffffffffffffffff19909316929092171617905550610a05565b8154600090839060001981019081106109e057fe5b600091825260209091200180546001600160801b03808516600160801b029116179055505b5050565b8154600090610a1a57506000610501565b825483906000198101908110610a2c57fe5b6000918252602090912001546001600160801b03168210610a7c57825483906000198101908110610a5957fe5b600091825260209091200154600160801b90046001600160801b03169050610501565b82600081548110610a8957fe5b6000918252602090912001546001600160801b0316821015610aad57506000610501565b8254600090600019015b81811115610b08576000600260018385010104905084868281548110610ad957fe5b6000918252602090912001546001600160801b031611610afb57809250610b02565b6001810391505b50610ab7565b848281548110610b1457fe5b600091825260209091200154600160801b90046001600160801b031695945050505050565b3390565b6001600160a01b038116610b825760405162461bcd60e51b8152600401808060200182810382526026815260200180610c256026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b815481835581811115610c0157600083815260209020610c01918101908301610c06565b505050565b61051591905b80821115610c205760008155600101610c0c565b509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a7231582070e907f9366e5a3828731e470a7c758bf974547fea2958c3ddf41d7eb0a1ec8364736f6c63430005110032",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x9 PUSH1 0xA1 SHL OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x35 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x82 AND JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR DUP1 DUP3 SSTORE PUSH1 0x40 MLOAD SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 PUSH2 0x86 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH2 0xC9F DUP1 PUSH2 0x95 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2B4 JUMPI DUP1 PUSH4 0x8F32D59B EQ PUSH2 0x2D8 JUMPI DUP1 PUSH4 0x981B24D0 EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x329 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x7EA5477 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1F4 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x22C JUMPI DUP1 PUSH4 0x4EE2CD7E EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x284 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x11E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x180 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x34F SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1FC PUSH2 0x507 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x216 PUSH2 0x518 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x528 JUMP JUMPDEST PUSH2 0x1FC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x623 JUMP JUMPDEST PUSH2 0x1FC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x6B3 JUMP JUMPDEST PUSH2 0x2B2 PUSH2 0x6C7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2BC PUSH2 0x758 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1E0 PUSH2 0x767 JUMP JUMPDEST PUSH2 0x1FC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x78B JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7DD JUMP JUMPDEST PUSH2 0x2B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8C8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x359 PUSH2 0x767 JUMP JUMPDEST PUSH2 0x398 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC4B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x4FB JUMPI PUSH1 0x0 PUSH2 0x3AE PUSH2 0x507 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3BD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 ADD LT ISZERO PUSH2 0x3D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3F0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3E3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x6B3 JUMP JUMPDEST SWAP1 POP DUP1 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3FF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 ADD LT ISZERO PUSH2 0x414 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x434 PUSH1 0x2 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x425 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 ADD PUSH2 0x91B JUMP JUMPDEST PUSH2 0x48A PUSH1 0x1 PUSH1 0x0 DUP9 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x447 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x47B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 ADD PUSH2 0x91B JUMP JUMPDEST DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x496 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xF6798A560793A54C3BCFE86A93CDE1E73087D944C0EA20544137D4121396885 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4D4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP PUSH1 0x1 ADD PUSH2 0x39B JUMP JUMPDEST POP PUSH1 0x1 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x512 NUMBER PUSH2 0x78B JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x532 PUSH2 0x767 JUMP JUMPDEST PUSH2 0x571 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC4B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x57B PUSH2 0x507 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 ADD LT ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x597 DUP6 PUSH2 0x6B3 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 DUP3 ADD LT ISZERO PUSH2 0x5A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5B5 PUSH1 0x2 DUP6 DUP5 ADD PUSH2 0x91B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x5D9 SWAP1 DUP3 DUP7 ADD PUSH2 0x91B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xF6798A560793A54C3BCFE86A93CDE1E73087D944C0EA20544137D4121396885 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO DUP1 PUSH2 0x67D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x666 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT JUMPDEST ISZERO PUSH2 0x68A JUMPI POP PUSH1 0x0 PUSH2 0x501 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x6AC SWAP1 DUP4 PUSH2 0xA09 JUMP JUMPDEST SWAP1 POP PUSH2 0x501 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6BF DUP3 NUMBER PUSH2 0x623 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x6CF PUSH2 0x767 JUMP JUMPDEST PUSH2 0x70E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC4B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x77C PUSH2 0xB39 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 ISZERO DUP1 PUSH2 0x7BE JUMPI POP DUP2 PUSH1 0x2 PUSH1 0x0 DUP2 SLOAD DUP2 LT PUSH2 0x7A7 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT JUMPDEST ISZERO PUSH2 0x7CB JUMPI POP PUSH1 0x0 PUSH2 0x6C2 JUMP JUMPDEST PUSH2 0x7D6 PUSH1 0x2 DUP4 PUSH2 0xA09 JUMP JUMPDEST SWAP1 POP PUSH2 0x6C2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7E7 PUSH2 0x767 JUMP JUMPDEST PUSH2 0x826 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC4B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x830 PUSH2 0x507 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x0 PUSH2 0x83E DUP7 PUSH2 0x6B3 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT ISZERO PUSH2 0x84C JUMPI DUP1 SWAP2 POP JUMPDEST PUSH2 0x859 PUSH1 0x2 DUP4 DUP6 SUB PUSH2 0x91B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x87D SWAP1 DUP4 DUP4 SUB PUSH2 0x91B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH32 0xCC16F5DBB4873280815C1EE09DBD06736CFFCC184412CF7A71A0FDB75D397CA5 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP PUSH1 0x1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x8D0 PUSH2 0x767 JUMP JUMPDEST PUSH2 0x90F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC4B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x918 DUP2 PUSH2 0xB3D JUMP JUMPDEST POP JUMP JUMPDEST DUP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND EQ PUSH2 0x930 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 SLOAD ISZERO DUP1 PUSH2 0x964 JUMPI POP DUP2 SLOAD NUMBER SWAP1 DUP4 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x94D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND LT JUMPDEST ISZERO PUSH2 0x9CB JUMPI DUP2 SLOAD PUSH1 0x0 SWAP1 DUP4 SWAP1 PUSH2 0x97D DUP3 PUSH1 0x1 DUP4 ADD PUSH2 0xBDD JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x987 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP5 DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL NUMBER DUP3 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR AND OR SWAP1 SSTORE POP PUSH2 0xA05 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP4 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x9E0 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP6 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 AND OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA1A JUMPI POP PUSH1 0x0 PUSH2 0x501 JUMP JUMPDEST DUP3 SLOAD DUP4 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0xA2C JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 LT PUSH2 0xA7C JUMPI DUP3 SLOAD DUP4 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0xA59 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 POP PUSH2 0x501 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 SLOAD DUP2 LT PUSH2 0xA89 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 LT ISZERO PUSH2 0xAAD JUMPI POP PUSH1 0x0 PUSH2 0x501 JUMP JUMPDEST DUP3 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x0 NOT ADD JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xB08 JUMPI PUSH1 0x0 PUSH1 0x2 PUSH1 0x1 DUP4 DUP6 ADD ADD DIV SWAP1 POP DUP5 DUP7 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xAD9 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT PUSH2 0xAFB JUMPI DUP1 SWAP3 POP PUSH2 0xB02 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB SWAP2 POP JUMPDEST POP PUSH2 0xAB7 JUMP JUMPDEST DUP5 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xB14 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xB82 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xC25 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xC01 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xC01 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xC06 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x515 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xC20 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xC0C JUMP JUMPDEST POP SWAP1 JUMP INVALID 0x4F PUSH24 0x6E61626C653A206E6577206F776E65722069732074686520 PUSH27 0x65726F20616464726573734F776E61626C653A2063616C6C657220 PUSH10 0x73206E6F742074686520 PUSH16 0x776E6572A265627A7A7231582070E907 0xF9 CALLDATASIZE PUSH15 0x5A3828731E470A7C758BF974547FEA 0x29 PC 0xC3 0xDD DELEGATECALL SAR PUSH31 0xB0A1EC8364736F6C6343000511003200000000000000000000000000000000 ",
"sourceMap": "12002:67:0:-;;;4210:26;;;-1:-1:-1;;;;4210:26:0;-1:-1:-1;;;4210:26:0;;;12044:23;5:2:-1;;;;30:1;27;20:12;5:2;-1:-1;1858:12:0;-1:-1:-1;;;;;1858:10:0;:12;:::i;:::-;1849:6;:21;;-1:-1:-1;;;;;;1849:21:0;-1:-1:-1;;;;;1849:21:0;;;;;;;1885:40;;1918:6;;;1885:40;;1849:6;;1885:40;12002:67;;788:96;867:10;788:96;:::o;12002:67::-;;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
"object": "608060405234801561001057600080fd5b50600436106100b45760003560e01c8063715018a611610071578063715018a6146102aa5780638da5cb5b146102b45780638f32d59b146102d8578063981b24d0146102e05780639dc29fac146102fd578063f2fde38b14610329576100b4565b806307ea5477146100b957806318160ddd146101f4578063313ce5671461020e57806340c10f191461022c5780634ee2cd7e1461025857806370a0823114610284575b600080fd5b6101e0600480360360408110156100cf57600080fd5b8101906020810181356401000000008111156100ea57600080fd5b8201836020820111156100fc57600080fd5b8035906020019184602083028401116401000000008311171561011e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561016e57600080fd5b82018360208201111561018057600080fd5b803590602001918460208302840111640100000000831117156101a257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061034f945050505050565b604080519115158252519081900360200190f35b6101fc610507565b60408051918252519081900360200190f35b610216610518565b6040805160ff9092168252519081900360200190f35b6101e06004803603604081101561024257600080fd5b506001600160a01b038135169060200135610528565b6101fc6004803603604081101561026e57600080fd5b506001600160a01b038135169060200135610623565b6101fc6004803603602081101561029a57600080fd5b50356001600160a01b03166106b3565b6102b26106c7565b005b6102bc610758565b604080516001600160a01b039092168252519081900360200190f35b6101e0610767565b6101fc600480360360208110156102f657600080fd5b503561078b565b6101e06004803603604081101561031357600080fd5b506001600160a01b0381351690602001356107dd565b6102b26004803603602081101561033f57600080fd5b50356001600160a01b03166108c8565b6000610359610767565b610398576040805162461bcd60e51b81526020600482018190526024820152600080516020610c4b833981519152604482015290519081900360640190fd5b60005b83518110156104fb5760006103ae610507565b9050808483815181106103bd57fe5b6020026020010151820110156103d257600080fd5b60006103f08684815181106103e357fe5b60200260200101516106b3565b9050808584815181106103ff57fe5b60200260200101518201101561041457600080fd5b610434600286858151811061042557fe5b6020026020010151840161091b565b61048a6001600088868151811061044757fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002086858151811061047b57fe5b6020026020010151830161091b565b85838151811061049657fe5b60200260200101516001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858685815181106104d457fe5b60200260200101516040518082815260200191505060405180910390a2505060010161039b565b50600190505b92915050565b60006105124361078b565b90505b90565b600054600160a01b900460ff1681565b6000610532610767565b610571576040805162461bcd60e51b81526020600482018190526024820152600080516020610c4b833981519152604482015290519081900360640190fd5b600061057b610507565b905080838201101561058c57600080fd5b6000610597856106b3565b90508084820110156105a857600080fd5b6105b5600285840161091b565b6001600160a01b03851660009081526001602052604090206105d99082860161091b565b6040805185815290516001600160a01b038716917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a2506001949350505050565b6001600160a01b038216600090815260016020526040812054158061067d57506001600160a01b0383166000908152600160205260408120805484929061066657fe5b6000918252602090912001546001600160801b0316115b1561068a57506000610501565b6001600160a01b03831660009081526001602052604090206106ac9083610a09565b9050610501565b60006106bf8243610623565b90505b919050565b6106cf610767565b61070e576040805162461bcd60e51b81526020600482018190526024820152600080516020610c4b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b600080546001600160a01b031661077c610b39565b6001600160a01b031614905090565b60025460009015806107be57508160026000815481106107a757fe5b6000918252602090912001546001600160801b0316115b156107cb575060006106c2565b6107d6600283610a09565b90506106c2565b60006107e7610767565b610826576040805162461bcd60e51b81526020600482018190526024820152600080516020610c4b833981519152604482015290519081900360640190fd5b6000610830610507565b905082600061083e866106b3565b90508181101561084c578091505b610859600283850361091b565b6001600160a01b038616600090815260016020526040902061087d9083830361091b565b6040805183815290516001600160a01b038816917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a250600195945050505050565b6108d0610767565b61090f576040805162461bcd60e51b81526020600482018190526024820152600080516020610c4b833981519152604482015290519081900360640190fd5b61091881610b3d565b50565b80816001600160801b03161461093057600080fd5b815415806109645750815443908390600019810190811061094d57fe5b6000918252602090912001546001600160801b0316105b156109cb578154600090839061097d8260018301610bdd565b8154811061098757fe5b600091825260209091200180546001600160801b03848116600160801b024382166fffffffffffffffffffffffffffffffff19909316929092171617905550610a05565b8154600090839060001981019081106109e057fe5b600091825260209091200180546001600160801b03808516600160801b029116179055505b5050565b8154600090610a1a57506000610501565b825483906000198101908110610a2c57fe5b6000918252602090912001546001600160801b03168210610a7c57825483906000198101908110610a5957fe5b600091825260209091200154600160801b90046001600160801b03169050610501565b82600081548110610a8957fe5b6000918252602090912001546001600160801b0316821015610aad57506000610501565b8254600090600019015b81811115610b08576000600260018385010104905084868281548110610ad957fe5b6000918252602090912001546001600160801b031611610afb57809250610b02565b6001810391505b50610ab7565b848281548110610b1457fe5b600091825260209091200154600160801b90046001600160801b031695945050505050565b3390565b6001600160a01b038116610b825760405162461bcd60e51b8152600401808060200182810382526026815260200180610c256026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b815481835581811115610c0157600083815260209020610c01918101908301610c06565b505050565b61051591905b80821115610c205760008155600101610c0c565b509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a7231582070e907f9366e5a3828731e470a7c758bf974547fea2958c3ddf41d7eb0a1ec8364736f6c63430005110032",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2B4 JUMPI DUP1 PUSH4 0x8F32D59B EQ PUSH2 0x2D8 JUMPI DUP1 PUSH4 0x981B24D0 EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x329 JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x7EA5477 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1F4 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x22C JUMPI DUP1 PUSH4 0x4EE2CD7E EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x284 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x11E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x180 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x34F SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1FC PUSH2 0x507 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x216 PUSH2 0x518 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x528 JUMP JUMPDEST PUSH2 0x1FC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x623 JUMP JUMPDEST PUSH2 0x1FC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x6B3 JUMP JUMPDEST PUSH2 0x2B2 PUSH2 0x6C7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2BC PUSH2 0x758 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1E0 PUSH2 0x767 JUMP JUMPDEST PUSH2 0x1FC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x78B JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7DD JUMP JUMPDEST PUSH2 0x2B2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8C8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x359 PUSH2 0x767 JUMP JUMPDEST PUSH2 0x398 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC4B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x4FB JUMPI PUSH1 0x0 PUSH2 0x3AE PUSH2 0x507 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3BD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 ADD LT ISZERO PUSH2 0x3D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3F0 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3E3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x6B3 JUMP JUMPDEST SWAP1 POP DUP1 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3FF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 ADD LT ISZERO PUSH2 0x414 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x434 PUSH1 0x2 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x425 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 ADD PUSH2 0x91B JUMP JUMPDEST PUSH2 0x48A PUSH1 0x1 PUSH1 0x0 DUP9 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x447 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x47B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 ADD PUSH2 0x91B JUMP JUMPDEST DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x496 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xF6798A560793A54C3BCFE86A93CDE1E73087D944C0EA20544137D4121396885 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4D4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP PUSH1 0x1 ADD PUSH2 0x39B JUMP JUMPDEST POP PUSH1 0x1 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x512 NUMBER PUSH2 0x78B JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x532 PUSH2 0x767 JUMP JUMPDEST PUSH2 0x571 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC4B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x57B PUSH2 0x507 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 ADD LT ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x597 DUP6 PUSH2 0x6B3 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 DUP3 ADD LT ISZERO PUSH2 0x5A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5B5 PUSH1 0x2 DUP6 DUP5 ADD PUSH2 0x91B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x5D9 SWAP1 DUP3 DUP7 ADD PUSH2 0x91B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xF6798A560793A54C3BCFE86A93CDE1E73087D944C0EA20544137D4121396885 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO DUP1 PUSH2 0x67D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x666 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT JUMPDEST ISZERO PUSH2 0x68A JUMPI POP PUSH1 0x0 PUSH2 0x501 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x6AC SWAP1 DUP4 PUSH2 0xA09 JUMP JUMPDEST SWAP1 POP PUSH2 0x501 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6BF DUP3 NUMBER PUSH2 0x623 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x6CF PUSH2 0x767 JUMP JUMPDEST PUSH2 0x70E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC4B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x77C PUSH2 0xB39 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 ISZERO DUP1 PUSH2 0x7BE JUMPI POP DUP2 PUSH1 0x2 PUSH1 0x0 DUP2 SLOAD DUP2 LT PUSH2 0x7A7 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT JUMPDEST ISZERO PUSH2 0x7CB JUMPI POP PUSH1 0x0 PUSH2 0x6C2 JUMP JUMPDEST PUSH2 0x7D6 PUSH1 0x2 DUP4 PUSH2 0xA09 JUMP JUMPDEST SWAP1 POP PUSH2 0x6C2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7E7 PUSH2 0x767 JUMP JUMPDEST PUSH2 0x826 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC4B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x830 PUSH2 0x507 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x0 PUSH2 0x83E DUP7 PUSH2 0x6B3 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT ISZERO PUSH2 0x84C JUMPI DUP1 SWAP2 POP JUMPDEST PUSH2 0x859 PUSH1 0x2 DUP4 DUP6 SUB PUSH2 0x91B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x87D SWAP1 DUP4 DUP4 SUB PUSH2 0x91B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH32 0xCC16F5DBB4873280815C1EE09DBD06736CFFCC184412CF7A71A0FDB75D397CA5 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP PUSH1 0x1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x8D0 PUSH2 0x767 JUMP JUMPDEST PUSH2 0x90F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC4B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x918 DUP2 PUSH2 0xB3D JUMP JUMPDEST POP JUMP JUMPDEST DUP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND EQ PUSH2 0x930 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 SLOAD ISZERO DUP1 PUSH2 0x964 JUMPI POP DUP2 SLOAD NUMBER SWAP1 DUP4 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x94D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND LT JUMPDEST ISZERO PUSH2 0x9CB JUMPI DUP2 SLOAD PUSH1 0x0 SWAP1 DUP4 SWAP1 PUSH2 0x97D DUP3 PUSH1 0x1 DUP4 ADD PUSH2 0xBDD JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0x987 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP5 DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL NUMBER DUP3 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR AND OR SWAP1 SSTORE POP PUSH2 0xA05 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP4 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x9E0 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP6 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 AND OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xA1A JUMPI POP PUSH1 0x0 PUSH2 0x501 JUMP JUMPDEST DUP3 SLOAD DUP4 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0xA2C JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 LT PUSH2 0xA7C JUMPI DUP3 SLOAD DUP4 SWAP1 PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0xA59 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 POP PUSH2 0x501 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 SLOAD DUP2 LT PUSH2 0xA89 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 LT ISZERO PUSH2 0xAAD JUMPI POP PUSH1 0x0 PUSH2 0x501 JUMP JUMPDEST DUP3 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x0 NOT ADD JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xB08 JUMPI PUSH1 0x0 PUSH1 0x2 PUSH1 0x1 DUP4 DUP6 ADD ADD DIV SWAP1 POP DUP5 DUP7 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xAD9 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT PUSH2 0xAFB JUMPI DUP1 SWAP3 POP PUSH2 0xB02 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB SWAP2 POP JUMPDEST POP PUSH2 0xAB7 JUMP JUMPDEST DUP5 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xB14 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xB82 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xC25 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xC01 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xC01 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xC06 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x515 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xC20 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xC0C JUMP JUMPDEST POP SWAP1 JUMP INVALID 0x4F PUSH24 0x6E61626C653A206E6577206F776E65722069732074686520 PUSH27 0x65726F20616464726573734F776E61626C653A2063616C6C657220 PUSH10 0x73206E6F742074686520 PUSH16 0x776E6572A265627A7A7231582070E907 0xF9 CALLDATASIZE PUSH15 0x5A3828731E470A7C758BF974547FEA 0x29 PC 0xC3 0xDD DELEGATECALL SAR PUSH31 0xB0A1EC8364736F6C6343000511003200000000000000000000000000000000 ",
"sourceMap": "12002:67:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12002:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6444:696;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6444:696:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;6444:696:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6444:696:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;6444:696:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;6444:696:0;;;;;;;;-1:-1:-1;6444:696:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;6444:696:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6444:696:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;6444:696:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;6444:696:0;;-1:-1:-1;6444:696:0;;-1:-1:-1;;;;;6444:696:0:i;:::-;;;;;;;;;;;;;;;;;;8078:104;;;:::i;:::-;;;;;;;;;;;;;;;;4210:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5597:559;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5597:559:0;;;;;;;;:::i;9422:386::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9422:386:0;;;;;;;;:::i;8430:130::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8430:130:0;-1:-1:-1;;;;;8430:130:0;;:::i;2793:137::-;;;:::i;:::-;;2008:77;;;:::i;:::-;;;;-1:-1:-1;;;;;2008:77:0;;;;;;;;;;;;;;2359:92;;;:::i;8781:375::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8781:375:0;;:::i;7392:554::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7392:554:0;;;;;;;;:::i;3079:107::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3079:107:0;-1:-1:-1;;;;;3079:107:0;;:::i;6444:696::-;6542:4;2212:9;:7;:9::i;:::-;2204:54;;;;;-1:-1:-1;;;2204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2204:54:0;;;;;;;;;;;;;;;6564:9;6559:552;6582:5;:12;6578:1;:16;6559:552;;;6614:22;6639:13;:11;:13::i;:::-;6614:38;;6704:14;6690:7;6698:1;6690:10;;;;;;;;;;;;;;6673:14;:27;:45;;6665:54;;;;;;6754:25;6782:19;6792:5;6798:1;6792:8;;;;;;;;;;;;;;6782:9;:19::i;:::-;6754:47;;6856:17;6842:7;6850:1;6842:10;;;;;;;;;;;;;;6822:17;:30;:51;;6814:60;;;;;;6909:65;6926:18;6963:7;6971:1;6963:10;;;;;;;;;;;;;;6946:14;:27;6909:16;:65::i;:::-;6987:68;7004:8;:18;7013:5;7019:1;7013:8;;;;;;;;;;;;;;-1:-1:-1;;;;;7004:18:0;-1:-1:-1;;;;;7004:18:0;;;;;;;;;;;;7044:7;7052:1;7044:10;;;;;;;;;;;;;;7024:17;:30;6987:16;:68::i;:::-;7078:5;7084:1;7078:8;;;;;;;;;;;;;;-1:-1:-1;;;;;7073:26:0;;7088:7;7096:1;7088:10;;;;;;;;;;;;;;7073:26;;;;;;;;;;;;;;;;;;-1:-1:-1;;6596:4:0;;6559:552;;;;7128:4;7121:11;;2268:1;6444:696;;;;:::o;8078:104::-;8122:7;8148:27;8162:12;8148:13;:27::i;:::-;8141:34;;8078:104;;:::o;4210:26::-;;;-1:-1:-1;;;4210:26:0;;;;;:::o;5597:559::-;5669:4;2212:9;:7;:9::i;:::-;2204:54;;;;;-1:-1:-1;;;2204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2204:54:0;;;;;;;;;;;;;;;5685:22;5710:13;:11;:13::i;:::-;5685:38;;5769:14;5758:7;5741:14;:24;:42;;5733:51;;;;;;5816:25;5844:16;5854:5;5844:9;:16::i;:::-;5816:44;;5909:17;5898:7;5878:17;:27;:48;;5870:57;;;;;;5959:62;5976:18;6013:7;5996:14;:24;5959:16;:62::i;:::-;-1:-1:-1;;;;;6048:15:0;;;;;;:8;:15;;;;;6031:62;;6065:27;;;6031:16;:62::i;:::-;6108:20;;;;;;;;-1:-1:-1;;;;;6108:20:0;;;;;;;;;;;;;-1:-1:-1;6145:4:0;;5597:559;-1:-1:-1;;;;5597:559:0:o;9422:386::-;-1:-1:-1;;;;;9534:16:0;;9506:7;9534:16;;;:8;:16;;;;;:23;:28;;9533:80;;-1:-1:-1;;;;;;9568:16:0;;;;;;:8;:16;;;;;:19;;9600:12;;9568:16;:19;;;;;;;;;;;;;:29;-1:-1:-1;;;;;9568:29:0;:44;9533:80;9529:273;;;-1:-1:-1;9636:1:0;9629:8;;9529:273;-1:-1:-1;;;;;9760:16:0;;;;;;:8;:16;;;;;9749:42;;9778:12;9749:10;:42::i;:::-;9742:49;;;;8430:130;8486:15;8520:33;8532:6;8540:12;8520:11;:33::i;:::-;8513:40;;8430:130;;;;:::o;2793:137::-;2212:9;:7;:9::i;:::-;2204:54;;;;;-1:-1:-1;;;2204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2204:54:0;;;;;;;;;;;;;;;2891:1;2875:6;;2854:40;;-1:-1:-1;;;;;2875:6:0;;;;2854:40;;2891:1;;2854:40;2921:1;2904:19;;-1:-1:-1;;;;;;2904:19:0;;;2793:137::o;2008:77::-;2046:7;2072:6;-1:-1:-1;;;;;2072:6:0;2008:77;:::o;2359:92::-;2399:4;2438:6;;-1:-1:-1;;;;;2438:6:0;2422:12;:10;:12::i;:::-;-1:-1:-1;;;;;2422:22:0;;2415:29;;2359:92;:::o;8781:375::-;8870:18;:25;8846:7;;8870:30;;8869:84;;;8940:12;8906:18;8925:1;8906:21;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;;;8906:31:0;:46;8869:84;8865:285;;;-1:-1:-1;8976:1:0;8969:8;;8865:285;9095:44;9106:18;9126:12;9095:10;:44::i;:::-;9088:51;;;;7392:554;7464:4;2212:9;:7;:9::i;:::-;2204:54;;;;;-1:-1:-1;;;2204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2204:54:0;;;;;;;;;;;;;;;7480:22;7505:13;:11;:13::i;:::-;7480:38;-1:-1:-1;7551:7:0;7528:20;7598:16;7608:5;7598:9;:16::i;:::-;7568:46;;7650:12;7628:19;:34;7624:99;;;7693:19;7678:34;;7624:99;7732:67;7749:18;7786:12;7769:14;:29;7732:16;:67::i;:::-;-1:-1:-1;;;;;7826:15:0;;;;;;:8;:15;;;;;7809:69;;7843:34;;;7809:16;:69::i;:::-;7893:25;;;;;;;;-1:-1:-1;;;;;7893:25:0;;;;;;;;;;;;;-1:-1:-1;7935:4:0;;7392:554;-1:-1:-1;;;;;7392:554:0:o;3079:107::-;2212:9;:7;:9::i;:::-;2204:54;;;;;-1:-1:-1;;;2204:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2204:54:0;;;;;;;;;;;;;;;3151:28;3170:8;3151:18;:28::i;:::-;3079:107;:::o;11271:641::-;11393:6;11382;-1:-1:-1;;;;;11374:25:0;;11366:34;;;;;;11459:18;;:23;;11458:91;;-1:-1:-1;11500:18:0;;11536:12;;11488:11;;-1:-1:-1;;11500:22:0;;;11488:35;;;;;;;;;;;;;;;:45;-1:-1:-1;;;;;11488:45:0;:60;11458:91;11454:452;;;11612:20;;11565:32;;11600:11;;11612:20;11600:11;11612:20;;;;:::i;:::-;11600:33;;;;;;;;;;;;;;;;;11647:47;;-1:-1:-1;;;;;11708:37:0;;;-1:-1:-1;;;11708:37:0;11681:12;11647:47;;-1:-1:-1;;11647:47:0;;;;;;;11708:37;;;;-1:-1:-1;11454:452:0;;;11823:18;;11776:32;;11811:11;;-1:-1:-1;;11823:20:0;;;11811:33;;;;;;;;;;;;;;;11858:37;;-1:-1:-1;;;;;11858:37:0;;;-1:-1:-1;;;11858:37:0;;;;;;-1:-1:-1;11454:452:0;11271:641;;:::o;10203:838::-;10319:18;;10296:7;;10315:62;;-1:-1:-1;10365:1:0;10358:8;;10315:62;10456:18;;10444:11;;-1:-1:-1;;10456:20:0;;;10444:33;;;;;;;;;;;;;;;:43;-1:-1:-1;;;;;10444:43:0;10434:53;;10430:130;;10522:18;;10510:11;;-1:-1:-1;;10522:20:0;;;10510:33;;;;;;;;;;;;;;;:39;-1:-1:-1;;;10510:39:0;;-1:-1:-1;;;;;10510:39:0;;-1:-1:-1;10503:46:0;;10430:130;10582:11;10594:1;10582:14;;;;;;;;;;;;;;;;;:24;-1:-1:-1;;;;;10582:24:0;10573:33;;10569:72;;;-1:-1:-1;10629:1:0;10622:8;;10569:72;10743:18;;10704:11;;-1:-1:-1;;10743:20:0;10773:223;10786:3;10780;:9;10773:223;;;10805:11;10837:1;10832;10820:9;;;:13;10819:19;10805:33;;10886:6;10856:11;10868:3;10856:16;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;10856:26:0;:36;10852:134;;10918:3;10912:9;;10852:134;;;10970:1;10966:3;:5;10960:11;;10852:134;10773:223;;;;11012:11;11024:3;11012:16;;;;;;;;;;;;;;;;;:22;-1:-1:-1;;;11012:22:0;;-1:-1:-1;;;;;11012:22:0;;10203:838;-1:-1:-1;;;;;10203:838:0:o;788:96::-;867:10;788:96;:::o;3287:225::-;-1:-1:-1;;;;;3360:22:0;;3352:73;;;;-1:-1:-1;;;3352:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3461:6;;;3440:38;;-1:-1:-1;;;;;3440:38:0;;;;3461:6;;;3440:38;;;3488:6;:17;;-1:-1:-1;;;;;;3488:17:0;-1:-1:-1;;;;;3488:17:0;;;;;;;;;;3287:225::o;12002:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "646200",
"executionCost": "infinite",
"totalCost": "infinite"
},
"external": {
"balanceOf(address)": "infinite",
"balanceOfAt(address,uint256)": "infinite",
"burn(address,uint256)": "infinite",
"decimals()": "1075",
"isOwner()": "1124",
"mint(address,uint256)": "infinite",
"mintMultiple(address[],uint256[])": "infinite",
"owner()": "1059",
"renounceOwnership()": "infinite",
"totalSupply()": "infinite",
"totalSupplyAt(uint256)": "infinite",
"transferOwnership(address)": "infinite"
}
},
"methodIdentifiers": {
"balanceOf(address)": "70a08231",
"balanceOfAt(address,uint256)": "4ee2cd7e",
"burn(address,uint256)": "9dc29fac",
"decimals()": "313ce567",
"isOwner()": "8f32d59b",
"mint(address,uint256)": "40c10f19",
"mintMultiple(address[],uint256[])": "07ea5477",
"owner()": "8da5cb5b",
"renounceOwnership()": "715018a6",
"totalSupply()": "18160ddd",
"totalSupplyAt(uint256)": "981b24d0",
"transferOwnership(address)": "f2fde38b"
}
},
"abi": [
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "Burn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "Mint",
"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"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "_blockNumber",
"type": "uint256"
}
],
"name": "balanceOfAt",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_user",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "burn",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isOwner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_user",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "mint",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address[]",
"name": "_user",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_amount",
"type": "uint256[]"
}
],
"name": "mintMultiple",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "_blockNumber",
"type": "uint256"
}
],
"name": "totalSupplyAt",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.5.17+commit.d19bba13"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "Burn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "Mint",
"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"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "_blockNumber",
"type": "uint256"
}
],
"name": "balanceOfAt",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_user",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "burn",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isOwner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_user",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "mint",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address[]",
"name": "_user",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_amount",
"type": "uint256[]"
}
],
"name": "mintMultiple",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "_blockNumber",
"type": "uint256"
}
],
"name": "totalSupplyAt",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"methods": {
"balanceOf(address)": {
"details": "return the reputation amount of a given owner",
"params": {
"_owner": "an address of the owner which we want to get his reputation"
}
},
"balanceOfAt(address,uint256)": {
"details": "Queries the balance of `_owner` at a specific `_blockNumber`",
"params": {
"_blockNumber": "The block number when the balance is queried",
"_owner": "The address from which the balance will be retrieved"
},
"return": "The balance at `_blockNumber`"
},
"burn(address,uint256)": {
"params": {
"_amount": "The quantity of reputation to burn",
"_user": "The address that will lose the reputation"
},
"return": "True if the reputation are burned correctly"
},
"isOwner()": {
"details": "Returns true if the caller is the current owner."
},
"mint(address,uint256)": {
"params": {
"_amount": "The quantity of reputation generated",
"_user": "The address that will be assigned the new reputation"
},
"return": "True if the reputation are generated correctly"
},
"mintMultiple(address[],uint256[])": {
"params": {
"_amount": "The quantity of reputation generated\t",
"_user": "The address that will be assigned the new reputation\t"
},
"return": "True if the reputation are generated correctly\t"
},
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
},
"totalSupply()": {
"details": "This function makes it easy to get the total number of reputation",
"return": "The total number of reputation"
},
"totalSupplyAt(uint256)": {
"params": {
"_blockNumber": "The block number when the totalSupply is queried"
},
"return": "The total amount of reputation at `_blockNumber`"
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
}
},
"userdoc": {
"methods": {
"burn(address,uint256)": {
"notice": "Burns `_amount` reputation from `_owner`"
},
"mint(address,uint256)": {
"notice": "Generates `_amount` reputation that are assigned to `_owner`"
},
"mintMultiple(address[],uint256[])": {
"notice": "Generates `_amount` reputation that are assigned to `_owner`\t"
},
"totalSupplyAt(uint256)": {
"notice": "Total amount of reputation at a specific `_blockNumber`."
}
}
}
},
"settings": {
"compilationTarget": {
"contracts/DXReputation.sol": "DxReputation"
},
"evmVersion": "istanbul",
"libraries": {},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
},
"sources": {
"contracts/DXReputation.sol": {
"keccak256": "0x2c12731db2408f28a1b126d82b33014eb2c1c0714a0bb6c3b4050e56acf9f647",
"urls": [
"bzz-raw://90761993ba1bd6e4e36a5acabecc79aa2b1764871235dfc97120fcb806fbb529",
"dweb:/ipfs/QmWVFotBgnBj7fRcqqUoocSK5wfLUcdvLtcU7FzYPGfTpm"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {
"isOwner()": "8f32d59b",
"owner()": "8da5cb5b",
"renounceOwnership()": "715018a6",
"transferOwnership(address)": "f2fde38b"
}
},
"abi": [
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"constant": true,
"inputs": [],
"name": "isOwner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"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": [],
"name": "renounceOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.5.17+commit.d19bba13"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"constant": true,
"inputs": [],
"name": "isOwner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"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": [],
"name": "renounceOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. * This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.",
"methods": {
"constructor": {
"details": "Initializes the contract setting the deployer as the initial owner."
},
"isOwner()": {
"details": "Returns true if the caller is the current owner."
},
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
}
},
"userdoc": {
"methods": {}
}
},
"settings": {
"compilationTarget": {
"contracts/DXReputation.sol": "Ownable"
},
"evmVersion": "istanbul",
"libraries": {},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
},
"sources": {
"contracts/DXReputation.sol": {
"keccak256": "0x2c12731db2408f28a1b126d82b33014eb2c1c0714a0bb6c3b4050e56acf9f647",
"urls": [
"bzz-raw://90761993ba1bd6e4e36a5acabecc79aa2b1764871235dfc97120fcb806fbb529",
"dweb:/ipfs/QmWVFotBgnBj7fRcqqUoocSK5wfLUcdvLtcU7FzYPGfTpm"
]
}
},
"version": 1
}
// this line is added to create a gist. Empty file is not allowed.
{
"compiler": {
"version": "0.5.17+commit.d19bba13"
},
"language": "Solidity",
"output": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "Burn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "Mint",
"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"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "_blockNumber",
"type": "uint256"
}
],
"name": "balanceOfAt",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_user",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "burn",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isOwner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_user",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "mint",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address[]",
"name": "_user",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_amount",
"type": "uint256[]"
}
],
"name": "mintMultiple",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "_blockNumber",
"type": "uint256"
}
],
"name": "totalSupplyAt",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "A DAO has Reputation System which allows peers to rate other peers in order to build trust . A reputation is use to assign influence measure to a DAO'S peers. Reputation is similar to regular tokens but with one crucial difference: It is non-transferable. The Reputation contract maintain a map of address to reputation value. It provides an onlyOwner functions to mint and burn reputation _to (or _from) a specific address.",
"methods": {
"balanceOf(address)": {
"details": "return the reputation amount of a given owner",
"params": {
"_owner": "an address of the owner which we want to get his reputation"
}
},
"balanceOfAt(address,uint256)": {
"details": "Queries the balance of `_owner` at a specific `_blockNumber`",
"params": {
"_blockNumber": "The block number when the balance is queried",
"_owner": "The address from which the balance will be retrieved"
},
"return": "The balance at `_blockNumber`"
},
"burn(address,uint256)": {
"params": {
"_amount": "The quantity of reputation to burn",
"_user": "The address that will lose the reputation"
},
"return": "True if the reputation are burned correctly"
},
"isOwner()": {
"details": "Returns true if the caller is the current owner."
},
"mint(address,uint256)": {
"params": {
"_amount": "The quantity of reputation generated",
"_user": "The address that will be assigned the new reputation"
},
"return": "True if the reputation are generated correctly"
},
"mintMultiple(address[],uint256[])": {
"params": {
"_amount": "The quantity of reputation generated\t",
"_user": "The address that will be assigned the new reputation\t"
},
"return": "True if the reputation are generated correctly\t"
},
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
},
"totalSupply()": {
"details": "This function makes it easy to get the total number of reputation",
"return": "The total number of reputation"
},
"totalSupplyAt(uint256)": {
"params": {
"_blockNumber": "The block number when the totalSupply is queried"
},
"return": "The total amount of reputation at `_blockNumber`"
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
},
"title": "Reputation system"
},
"userdoc": {
"methods": {
"burn(address,uint256)": {
"notice": "Burns `_amount` reputation from `_owner`"
},
"mint(address,uint256)": {
"notice": "Generates `_amount` reputation that are assigned to `_owner`"
},
"mintMultiple(address[],uint256[])": {
"notice": "Generates `_amount` reputation that are assigned to `_owner`\t"
},
"totalSupplyAt(uint256)": {
"notice": "Total amount of reputation at a specific `_blockNumber`."
}
}
}
},
"settings": {
"compilationTarget": {
"contracts/DXReputation.sol": "Reputation"
},
"evmVersion": "istanbul",
"libraries": {},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
},
"sources": {
"contracts/DXReputation.sol": {
"keccak256": "0x2c12731db2408f28a1b126d82b33014eb2c1c0714a0bb6c3b4050e56acf9f647",
"urls": [
"bzz-raw://90761993ba1bd6e4e36a5acabecc79aa2b1764871235dfc97120fcb806fbb529",
"dweb:/ipfs/QmWVFotBgnBj7fRcqqUoocSK5wfLUcdvLtcU7FzYPGfTpm"
]
}
},
"version": 1
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"görli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "6080604052348015600f57600080fd5b5060ac8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80632e64cec11460375780636057361d14604c575b600080fd5b60005460405190815260200160405180910390f35b605c6057366004605e565b600055565b005b600060208284031215606f57600080fd5b503591905056fea264697066735822122088b69ecd8d6e9a5e67034b7732d78e081ce4a8dfe2e6d9695578779cf618fbe564736f6c63430008070033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xAC DUP1 PUSH2 0x1E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x32 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2E64CEC1 EQ PUSH1 0x37 JUMPI DUP1 PUSH4 0x6057361D EQ PUSH1 0x4C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x5C PUSH1 0x57 CALLDATASIZE PUSH1 0x4 PUSH1 0x5E JUMP JUMPDEST PUSH1 0x0 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0x6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 0xB6 SWAP15 0xCD DUP14 PUSH15 0x9A5E67034B7732D78E081CE4A8DFE2 0xE6 0xD9 PUSH10 0x5578779CF618FBE56473 PUSH16 0x6C634300080700330000000000000000 ",
"sourceMap": "141:356:0:-:0;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {
"@retrieve_24": {
"entryPoint": null,
"id": 24,
"parameterSlots": 0,
"returnSlots": 1
},
"@store_15": {
"entryPoint": null,
"id": 15,
"parameterSlots": 1,
"returnSlots": 0
},
"abi_decode_tuple_t_uint256": {
"entryPoint": 94,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
"entryPoint": null,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
}
},
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:378:1",
"statements": [
{
"nodeType": "YulBlock",
"src": "6:3:1",
"statements": []
},
{
"body": {
"nodeType": "YulBlock",
"src": "84:110:1",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "130:16:1",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "139:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "142:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "132:6:1"
},
"nodeType": "YulFunctionCall",
"src": "132:12:1"
},
"nodeType": "YulExpressionStatement",
"src": "132:12:1"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "105:7:1"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "114:9:1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "101:3:1"
},
"nodeType": "YulFunctionCall",
"src": "101:23:1"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "126:2:1",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "97:3:1"
},
"nodeType": "YulFunctionCall",
"src": "97:32:1"
},
"nodeType": "YulIf",
"src": "94:52:1"
},
{
"nodeType": "YulAssignment",
"src": "155:33:1",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "178:9:1"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "165:12:1"
},
"nodeType": "YulFunctionCall",
"src": "165:23:1"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "155:6:1"
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "50:9:1",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "61:7:1",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "73:6:1",
"type": ""
}
],
"src": "14:180:1"
},
{
"body": {
"nodeType": "YulBlock",
"src": "300:76:1",
"statements": [
{
"nodeType": "YulAssignment",
"src": "310:26:1",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "322:9:1"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "333:2:1",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "318:3:1"
},
"nodeType": "YulFunctionCall",
"src": "318:18:1"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "310:4:1"
}
]
},
{
"expression": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "352:9:1"
},
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "363:6:1"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "345:6:1"
},
"nodeType": "YulFunctionCall",
"src": "345:25:1"
},
"nodeType": "YulExpressionStatement",
"src": "345:25:1"
}
]
},
"name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "269:9:1",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "280:6:1",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "291:4:1",
"type": ""
}
],
"src": "199:177:1"
}
]
},
"contents": "{\n { }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n}",
"id": 1,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {},
"object": "6080604052348015600f57600080fd5b506004361060325760003560e01c80632e64cec11460375780636057361d14604c575b600080fd5b60005460405190815260200160405180910390f35b605c6057366004605e565b600055565b005b600060208284031215606f57600080fd5b503591905056fea264697066735822122088b69ecd8d6e9a5e67034b7732d78e081ce4a8dfe2e6d9695578779cf618fbe564736f6c63430008070033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x32 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2E64CEC1 EQ PUSH1 0x37 JUMPI DUP1 PUSH4 0x6057361D EQ PUSH1 0x4C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x5C PUSH1 0x57 CALLDATASIZE PUSH1 0x4 PUSH1 0x5E JUMP JUMPDEST PUSH1 0x0 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0x6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 0xB6 SWAP15 0xCD DUP14 PUSH15 0x9A5E67034B7732D78E081CE4A8DFE2 0xE6 0xD9 PUSH10 0x5578779CF618FBE56473 PUSH16 0x6C634300080700330000000000000000 ",
"sourceMap": "141:356:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;416:79;457:7;482:6;416:79;;345:25:1;;;333:2;318:18;416:79:0;;;;;;;271:64;;;;;;:::i;:::-;316:6;:12;271:64;;;14:180:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "34400",
"executionCost": "87",
"totalCost": "34487"
},
"external": {
"retrieve()": "2246",
"store(uint256)": "22312"
}
},
"methodIdentifiers": {
"retrieve()": "2e64cec1",
"store(uint256)": "6057361d"
}
},
"abi": [
{
"inputs": [],
"name": "retrieve",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "num",
"type": "uint256"
}
],
"name": "store",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.8.7+commit.e28d00a7"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [],
"name": "retrieve",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "num",
"type": "uint256"
}
],
"name": "store",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Store & retrieve value in a variable",
"kind": "dev",
"methods": {
"retrieve()": {
"details": "Return value ",
"returns": {
"_0": "value of 'number'"
}
},
"store(uint256)": {
"details": "Store value in variable",
"params": {
"num": "value to store"
}
}
},
"title": "Storage",
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"contracts/1_Storage.sol": "Storage"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
},
"sources": {
"contracts/1_Storage.sol": {
"keccak256": "0xb6ee9d528b336942dd70d3b41e2811be10a473776352009fd73f85604f5ed206",
"license": "GPL-3.0",
"urls": [
"bzz-raw://fe52c6e3c04ba5d83ede6cc1a43c45fa43caa435b207f64707afb17d3af1bcf1",
"dweb:/ipfs/QmawU3NM1WNWkBauRudYCiFvuFE1tTLHB98akyBvb9UWwA"
]
}
},
"version": 1
}
pragma solidity ^0.5.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: openzeppelin-solidity/contracts/ownership/Ownable.sol
pragma solidity ^0.5.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
_owner = _msgSender();
emit OwnershipTransferred(address(0), _owner);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return _msgSender() == _owner;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// File: contracts/daostack/controller/Reputation.sol
pragma solidity 0.5.17;
// Copied from @daostack/infra/contracts/Reputation.sol and added the MintMultiple function
/**
* @title Reputation system
* @dev A DAO has Reputation System which allows peers to rate other peers in order to build trust .
* A reputation is use to assign influence measure to a DAO'S peers.
* Reputation is similar to regular tokens but with one crucial difference: It is non-transferable.
* The Reputation contract maintain a map of address to reputation value.
* It provides an onlyOwner functions to mint and burn reputation _to (or _from) a specific address.
*/
contract Reputation is Ownable {
uint8 public decimals = 18; //Number of decimals of the smallest unit
// Event indicating minting of reputation to an address.
event Mint(address indexed _to, uint256 _amount);
// Event indicating burning of reputation for an address.
event Burn(address indexed _from, uint256 _amount);
/// @dev `Checkpoint` is the structure that attaches a block number to a
/// given value, the block number attached is the one that last changed the
/// value
struct Checkpoint {
// `fromBlock` is the block number that the value was generated from
uint128 fromBlock;
// `value` is the amount of reputation at a specific block number
uint128 value;
}
// `balances` is the map that tracks the balance of each address, in this
// contract when the balance changes the block number that the change
// occurred is also included in the map
mapping (address => Checkpoint[]) private balances;
// Tracks the history of the `totalSupply` of the reputation
Checkpoint[] private totalSupplyHistory;
/// @notice Generates `_amount` reputation that are assigned to `_owner`
/// @param _user The address that will be assigned the new reputation
/// @param _amount The quantity of reputation generated
/// @return True if the reputation are generated correctly
function mint(address _user, uint256 _amount) public onlyOwner returns (bool) {
uint256 curTotalSupply = totalSupply();
require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow
uint256 previousBalanceTo = balanceOf(_user);
require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);
updateValueAtNow(balances[_user], previousBalanceTo + _amount);
emit Mint(_user, _amount);
return true;
}
/// @notice Generates `_amount` reputation that are assigned to `_owner`
/// @param _user The address that will be assigned the new reputation
/// @param _amount The quantity of reputation generated
/// @return True if the reputation are generated correctly
function mintMultiple(address[] memory _user, uint256[] memory _amount) public onlyOwner returns (bool) {
for (uint256 i = 0;i < _user.length; i ++){
uint256 curTotalSupply = totalSupply();
require(curTotalSupply + _amount[i] >= curTotalSupply); // Check for overflow
uint256 previousBalanceTo = balanceOf(_user[i]);
require(previousBalanceTo + _amount[i] >= previousBalanceTo); // Check for overflow
updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount[i]);
updateValueAtNow(balances[_user[i]], previousBalanceTo + _amount[i]);
emit Mint(_user[i], _amount[i]);
}
return true;
}
/// @notice Burns `_amount` reputation from `_owner`
/// @param _user The address that will lose the reputation
/// @param _amount The quantity of reputation to burn
/// @return True if the reputation are burned correctly
function burn(address _user, uint256 _amount) public onlyOwner returns (bool) {
uint256 curTotalSupply = totalSupply();
uint256 amountBurned = _amount;
uint256 previousBalanceFrom = balanceOf(_user);
if (previousBalanceFrom < amountBurned) {
amountBurned = previousBalanceFrom;
}
updateValueAtNow(totalSupplyHistory, curTotalSupply - amountBurned);
updateValueAtNow(balances[_user], previousBalanceFrom - amountBurned);
emit Burn(_user, amountBurned);
return true;
}
/// @dev This function makes it easy to get the total number of reputation
/// @return The total number of reputation
function totalSupply() public view returns (uint256) {
return totalSupplyAt(block.number);
}
////////////////
// Query balance and totalSupply in History
////////////////
/**
* @dev return the reputation amount of a given owner
* @param _owner an address of the owner which we want to get his reputation
*/
function balanceOf(address _owner) public view returns (uint256 balance) {
return balanceOfAt(_owner, block.number);
}
/// @notice Total amount of reputation at a specific `_blockNumber`.
/// @param _blockNumber The block number when the totalSupply is queried
/// @return The total amount of reputation at `_blockNumber`
function totalSupplyAt(uint256 _blockNumber) public view returns(uint256) {
if ((totalSupplyHistory.length == 0) || (totalSupplyHistory[0].fromBlock > _blockNumber)) {
return 0;
// This will return the expected totalSupply during normal situations
} else {
return getValueAt(totalSupplyHistory, _blockNumber);
}
}
/// @dev Queries the balance of `_owner` at a specific `_blockNumber`
/// @param _owner The address from which the balance will be retrieved
/// @param _blockNumber The block number when the balance is queried
/// @return The balance at `_blockNumber`
function balanceOfAt(address _owner, uint256 _blockNumber)
public view returns (uint256)
{
if ((balances[_owner].length == 0) || (balances[_owner][0].fromBlock > _blockNumber)) {
return 0;
// This will return the expected balance during normal situations
} else {
return getValueAt(balances[_owner], _blockNumber);
}
}
////////////////
// Internal helper functions to query and set a value in a snapshot array
////////////////
/// @dev `getValueAt` retrieves the number of reputation at a given block number
/// @param checkpoints The history of values being queried
/// @param _block The block number to retrieve the value at
/// @return The number of reputation being queried
function getValueAt(Checkpoint[] storage checkpoints, uint256 _block) internal view returns (uint256) {
if (checkpoints.length == 0) {
return 0;
}
// Shortcut for the actual value
if (_block >= checkpoints[checkpoints.length-1].fromBlock) {
return checkpoints[checkpoints.length-1].value;
}
if (_block < checkpoints[0].fromBlock) {
return 0;
}
// Binary search of the value in the array
uint256 min = 0;
uint256 max = checkpoints.length-1;
while (max > min) {
uint256 mid = (max + min + 1) / 2;
if (checkpoints[mid].fromBlock <= _block) {
min = mid;
} else {
max = mid-1;
}
}
return checkpoints[min].value;
}
/// @dev `updateValueAtNow` used to update the `balances` map and the
/// `totalSupplyHistory`
/// @param checkpoints The history of data being updated
/// @param _value The new number of reputation
function updateValueAtNow(Checkpoint[] storage checkpoints, uint256 _value) internal {
require(uint128(_value) == _value); //check value is in the 128 bits bounderies
if ((checkpoints.length == 0) || (checkpoints[checkpoints.length - 1].fromBlock < block.number)) {
Checkpoint storage newCheckPoint = checkpoints[checkpoints.length++];
newCheckPoint.fromBlock = uint128(block.number);
newCheckPoint.value = uint128(_value);
} else {
Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1];
oldCheckPoint.value = uint128(_value);
}
}
}
// File: contracts/dxdao/DxReputation.sol
pragma solidity ^0.5.4;
// is Reputation
contract DxReputation is Reputation {
constructor() public {}
}
// Right click on the script name and hit "Run" to execute
(async () => {
try {
console.log('Running deployWithEthers script...')
const contractName = 'Storage' // Change this for other contract
const constructorArgs = [] // Put constructor args (if any) here for your contract
// Note that the script needs the ABI which is generated from the compilation artifact.
// Make sure contract is compiled and artifacts are generated
const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path
const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath))
// 'web3Provider' is a remix global variable object
const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner()
let factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer);
let contract = await factory.deploy(...constructorArgs);
console.log('Contract Address: ', contract.address);
// The contract is NOT deployed yet; we must wait until it is mined
await contract.deployed()
console.log('Deployment successful.')
} catch (e) {
console.log(e.message)
}
})()
// Right click on the script name and hit "Run" to execute
(async () => {
try {
console.log('Running deployWithWeb3 script...')
const contractName = 'Storage' // Change this for other contract
const constructorArgs = [] // Put constructor args (if any) here for your contract
// Note that the script needs the ABI which is generated from the compilation artifact.
// Make sure contract is compiled and artifacts are generated
const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path
const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath))
const accounts = await web3.eth.getAccounts()
let contract = new web3.eth.Contract(metadata.abi)
contract = contract.deploy({
data: metadata.data.bytecode.object,
arguments: constructorArgs
})
const newContractInstance = await contract.send({
from: accounts[0],
gas: 1500000,
gasPrice: '30000000000'
})
console.log('Contract deployed at address: ', newContractInstance.options.address)
} catch (e) {
console.log(e.message)
}
})()
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
import "remix_tests.sol"; // this import is automatically injected by Remix.
import "../contracts/3_Ballot.sol";
contract BallotTest {
bytes32[] proposalNames;
Ballot ballotToTest;
function beforeAll () public {
proposalNames.push(bytes32("candidate1"));
ballotToTest = new Ballot(proposalNames);
}
function checkWinningProposal () public {
ballotToTest.vote(0);
Assert.equal(ballotToTest.winningProposal(), uint(0), "proposal at index 0 should be the winning proposal");
Assert.equal(ballotToTest.winnerName(), bytes32("candidate1"), "candidate1 should be the winner name");
}
function checkWinninProposalWithReturnValue () public view returns (bool) {
return ballotToTest.winningProposal() == 0;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment