Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Multichain Info
No addresses found
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
- | 14931469 | 1022 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
SwapsPair
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: BCOM pragma solidity =0.8.14; import "./IERC20.sol"; import "./ISwapsFactory.sol"; import "./ISwapsCallee.sol"; import "./SwapsERC20.sol"; contract SwapsPair is SwapsERC20 { uint224 constant Q112 = 2 ** 112; uint112 constant UINT112_MAX = type(uint112).max; uint256 public constant MINIMUM_LIQUIDITY = 10 ** 3; bytes4 private constant SELECTOR = bytes4( keccak256(bytes('transfer(address,uint256)')) ); address public factory; address public token0; address public token1; uint112 private reserve0; uint112 private reserve1; uint32 private blockTimestampLast; uint256 public price0CumulativeLast; uint256 public price1CumulativeLast; uint256 public kLast; uint256 private unlocked; modifier lock() { require( unlocked == 1, "SwapsPair: LOCKED" ); unlocked = 0; _; unlocked = 1; } event Mint( address indexed sender, uint256 amount0, uint256 amount1 ); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync( uint112 reserve0, uint112 reserve1 ); function initialize( address _token0, address _token1 ) external { require( factory == ZERO_ADDRESS, "SwapsPair: ALREADY_INITIALIZED" ); token0 = _token0; token1 = _token1; factory = msg.sender; unlocked = 1; } function getReserves() public view returns ( uint112, uint112, uint32 ) { return ( reserve0, reserve1, blockTimestampLast ); } function _update( uint256 _balance0, uint256 _balance1, uint112 _reserve0, uint112 _reserve1 ) private { require( _balance0 <= UINT112_MAX && _balance1 <= UINT112_MAX, "SwapsPair: OVERFLOW" ); uint32 blockTimestamp = uint32(block.timestamp % 2 ** 32); unchecked { uint32 timeElapsed = blockTimestamp - blockTimestampLast; if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) { price0CumulativeLast += uint256(uqdiv(encode(_reserve1), _reserve0)) * timeElapsed; price1CumulativeLast += uint256(uqdiv(encode(_reserve0), _reserve1)) * timeElapsed; } } reserve0 = uint112(_balance0); reserve1 = uint112(_balance1); blockTimestampLast = blockTimestamp; emit Sync( reserve0, reserve1 ); } function _mintFee( uint112 _reserve0, uint112 _reserve1, uint256 _kLast ) private { if (_kLast == 0) return; uint256 rootK = sqrt(uint256(_reserve0) * _reserve1); uint256 rootKLast = sqrt(_kLast); if (rootK > rootKLast) { uint256 liquidity = totalSupply * (rootK - rootKLast) / (rootK * 5 + rootKLast); if (liquidity == 0) return; _mint( ISwapsFactory(factory).feeTo(), liquidity ); } } function mint( address _to ) external lock returns (uint256 liquidity) { ( uint112 _reserve0, uint112 _reserve1, ) = getReserves(); uint256 balance0 = IERC20(token0).balanceOf(address(this)); uint256 balance1 = IERC20(token1).balanceOf(address(this)); uint256 amount0 = balance0 - _reserve0; uint256 amount1 = balance1 - _reserve1; _mintFee( _reserve0, _reserve1, kLast ); uint256 _totalSupply = totalSupply; if (_totalSupply == 0) { liquidity = sqrt( amount0 * amount1 ) - MINIMUM_LIQUIDITY; _mint( ZERO_ADDRESS, MINIMUM_LIQUIDITY ); } else { liquidity = min( amount0 * _totalSupply / _reserve0, amount1 * _totalSupply / _reserve1 ); } require( liquidity > 0, "INSUFFICIENT_LIQUIDITY_MINTED" ); _mint( _to, liquidity ); _update( balance0, balance1, _reserve0, _reserve1 ); kLast = uint256(reserve0) * reserve1; emit Mint( msg.sender, amount0, amount1 ); } function burn( address _to ) external lock returns ( uint256 amount0, uint256 amount1 ) { ( uint112 _reserve0, uint112 _reserve1, ) = getReserves(); address _token0 = token0; address _token1 = token1; uint256 balance0 = IERC20(_token0).balanceOf(address(this)); uint256 balance1 = IERC20(_token1).balanceOf(address(this)); uint256 liquidity = balanceOf[address(this)]; _mintFee( _reserve0, _reserve1, kLast ); uint256 _totalSupply = totalSupply; amount0 = liquidity * balance0 / _totalSupply; amount1 = liquidity * balance1 / _totalSupply; require( amount0 > 0 && amount1 > 0, "INSUFFICIENT_LIQUIDITY_BURNED" ); _burn( address(this), liquidity ); _safeTransfer( _token0, _to, amount0 ); _safeTransfer( _token1, _to, amount1 ); balance0 = IERC20(_token0).balanceOf(address(this)); balance1 = IERC20(_token1).balanceOf(address(this)); _update( balance0, balance1, _reserve0, _reserve1 ); kLast = uint256(reserve0) * reserve1; emit Burn( msg.sender, amount0, amount1, _to ); } function swap( uint256 _amount0Out, uint256 _amount1Out, address _to, bytes calldata _data ) external lock { require( _amount0Out > 0 || _amount1Out > 0, "INSUFFICIENT_OUTPUT_AMOUNT" ); ( uint112 _reserve0, uint112 _reserve1, ) = getReserves(); require( _amount0Out < _reserve0 && _amount1Out < _reserve1, "INSUFFICIENT_LIQUIDITY" ); uint256 balance0; uint256 balance1; { address _token0 = token0; address _token1 = token1; if (_amount0Out > 0) _safeTransfer(_token0, _to, _amount0Out); if (_amount1Out > 0) _safeTransfer(_token1, _to, _amount1Out); if (_data.length > 0) ISwapsCallee(_to).swapsCall( msg.sender, _amount0Out, _amount1Out, _data ); balance0 = IERC20(_token0).balanceOf(address(this)); balance1 = IERC20(_token1).balanceOf(address(this)); } uint256 _amount0In = balance0 > _reserve0 - _amount0Out ? balance0 - (_reserve0 - _amount0Out) : 0; uint256 _amount1In = balance1 > _reserve1 - _amount1Out ? balance1 - (_reserve1 - _amount1Out) : 0; require( _amount0In > 0 || _amount1In > 0, "INSUFFICIENT_INPUT_AMOUNT" ); { uint256 balance0Adjusted = balance0 * 1000 - (_amount0In * 3); uint256 balance1Adjusted = balance1 * 1000 - (_amount1In * 3); require( balance0Adjusted * balance1Adjusted >= uint256(_reserve0) * _reserve1 * (1000 ** 2) ); } _update( balance0, balance1, _reserve0, _reserve1 ); emit Swap( msg.sender, _amount0In, _amount1In, _amount0Out, _amount1Out, _to ); } function skim() external lock { address _token0 = token0; address _token1 = token1; address _feesTo = ISwapsFactory(factory).feeTo(); _safeTransfer( _token0, _feesTo, IERC20(_token0).balanceOf(address(this)) - reserve0 ); _safeTransfer( _token1, _feesTo, IERC20(_token1).balanceOf(address(this)) - reserve1 ); } function sync() external lock { _update( IERC20(token0).balanceOf(address(this)), IERC20(token1).balanceOf(address(this)), reserve0, reserve1 ); } function encode( uint112 _y ) pure internal returns (uint224 z) { unchecked { z = uint224(_y) * Q112; } } function uqdiv( uint224 _x, uint112 _y ) pure internal returns (uint224 z) { unchecked { z = _x / uint224(_y); } } function min( uint256 _x, uint256 _y ) internal pure returns (uint256 z) { z = _x < _y ? _x : _y; } function sqrt( uint256 _y ) internal pure returns (uint256 z) { unchecked { if (_y > 3) { z = _y; uint256 x = _y / 2 + 1; while (x < z) { z = x; x = (_y / x + x) / 2; } } else if (_y != 0) { z = 1; } } } function _safeTransfer( address _token, address _to, uint256 _value ) internal { (bool success, bytes memory data) = _token.call( abi.encodeWithSelector( SELECTOR, _to, _value ) ); require( success && ( data.length == 0 || abi.decode( data, (bool) ) ), "SwapsPair: TRANSFER_FAILED" ); } }
// SPDX-License-Identifier: BCOM pragma solidity =0.8.14; interface IERC20 { function balanceOf( address _owner ) external view returns (uint256); }
// SPDX-License-Identifier: BCOM pragma solidity =0.8.14; interface ISwapsCallee { function swapsCall( address _sender, uint256 _amount0, uint256 _amount1, bytes calldata _data ) external; }
// SPDX-License-Identifier: BCOM pragma solidity =0.8.14; interface ISwapsFactory { function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address _tokenA, address _tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address _tokenA, address _tokenB ) external returns (address pair); function setFeeTo( address ) external; function setFeeToSetter( address ) external; function cloneTarget() external view returns (address target); }
// SPDX-License-Identifier: BCOM pragma solidity =0.8.14; contract SwapsERC20 { string public constant name = "Verse Exchange"; string public constant symbol = "VERSE-X"; uint8 public constant decimals = 18; address constant ZERO_ADDRESS = address(0); uint256 constant UINT256_MAX = type(uint256).max; uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; mapping(address => uint256) public nonces; bytes32 public immutable DOMAIN_SEPARATOR; bytes32 public constant PERMIT_TYPEHASH = keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ); event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer( address indexed from, address indexed to, uint256 value ); constructor() { DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256(bytes("1")), block.chainid, address(this) ) ); } function _mint( address _to, uint256 _value ) internal { totalSupply = totalSupply + _value; unchecked { balanceOf[_to] = balanceOf[_to] + _value; } emit Transfer( ZERO_ADDRESS, _to, _value ); } function _burn( address _from, uint256 _value ) internal { unchecked { totalSupply = totalSupply - _value; } balanceOf[_from] = balanceOf[_from] - _value; emit Transfer( _from, ZERO_ADDRESS, _value ); } function _approve( address _owner, address _spender, uint256 _value ) private { allowance[_owner][_spender] = _value; emit Approval( _owner, _spender, _value ); } function _transfer( address _from, address _to, uint256 _value ) private { balanceOf[_from] = balanceOf[_from] - _value; unchecked { balanceOf[_to] = balanceOf[_to] + _value; } emit Transfer( _from, _to, _value ); } function approve( address _spender, uint256 _value ) external returns (bool) { _approve( msg.sender, _spender, _value ); return true; } function transfer( address _to, uint256 _value ) external returns (bool) { _transfer( msg.sender, _to, _value ); return true; } function transferFrom( address _from, address _to, uint256 _value ) external returns (bool) { if (allowance[_from][msg.sender] != UINT256_MAX) { allowance[_from][msg.sender] -= _value; } _transfer( _from, _to, _value ); return true; } function permit( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external { require( _deadline >= block.timestamp, "SwapsERC20: PERMIT_CALL_EXPIRED" ); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR, keccak256( abi.encode( PERMIT_TYPEHASH, _owner, _spender, _value, nonces[_owner]++, _deadline ) ) ) ); if (uint256(_s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { revert("SwapsERC20: INVALID_SIGNATURE"); } address recoveredAddress = ecrecover( digest, _v, _r, _s ); require( recoveredAddress != ZERO_ADDRESS && recoveredAddress == _owner, "SwapsERC20: INVALID_SIGNATURE" ); _approve( _owner, _spender, _value ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"","type":"uint112"},{"internalType":"uint112","name":"","type":"uint112"},{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount0Out","type":"uint256"},{"internalType":"uint256","name":"_amount1Out","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b50604080518082018252600e81526d56657273652045786368616e676560901b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527fc6926ed1b0a879d88ae4187353d34c82f40d3ba19480d56694599160dde5bbd6918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f19818403018152919052805160209091012060805260805161203661010e60003960008181610300015261122401526120366000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80635a3d5493116100f9578063a9059cbb11610097578063d21220a711610071578063d21220a714610420578063d505accf14610433578063dd62ed3e14610446578063fff6cae91461047157600080fd5b8063a9059cbb146103f1578063ba9a7a5614610404578063c45a01551461040d57600080fd5b80637464fc3d116100d35780637464fc3d1461037a5780637ecebe001461038357806389afcb44146103a357806395d89b41146103cb57600080fd5b80635a3d54931461033e5780636a6278421461034757806370a082311461035a57600080fd5b80631dd19cb411610166578063313ce56711610140578063313ce567146102e15780633644e515146102fb578063485cc955146103225780635909c0d51461033557600080fd5b80631dd19cb41461029f57806323b872dd146102a757806330adf81f146102ba57600080fd5b8063022c0d9f146101ae57806306fdde03146101c35780630902f1ac14610206578063095ea7b31461023a5780630dfe16811461025d57806318160ddd14610288575b600080fd5b6101c16101bc366004611c27565b610479565b005b6101f06040518060400160405280600e81526020016d56657273652045786368616e676560901b81525081565b6040516101fd9190611ced565b60405180910390f35b61020e6108cc565b604080516001600160701b03948516815293909216602084015263ffffffff16908201526060016101fd565b61024d610248366004611d20565b6108f6565b60405190151581526020016101fd565b600554610270906001600160a01b031681565b6040516001600160a01b0390911681526020016101fd565b61029160005481565b6040519081526020016101fd565b6101c161090c565b61024d6102b5366004611d4c565b610a91565b6102917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102e9601281565b60405160ff90911681526020016101fd565b6102917f000000000000000000000000000000000000000000000000000000000000000081565b6101c1610330366004611d8d565b610b0b565b61029160085481565b61029160095481565b610291610355366004611dc6565b610ba7565b610291610368366004611dc6565b60016020526000908152604090205481565b610291600a5481565b610291610391366004611dc6565b60036020526000908152604090205481565b6103b66103b1366004611dc6565b610e5b565b604080519283526020830191909152016101fd565b6101f0604051806040016040528060078152602001660ac8aa4a68a5ab60cb1b81525081565b61024d6103ff366004611d20565b6111ab565b6102916103e881565b600454610270906001600160a01b031681565b600654610270906001600160a01b031681565b6101c1610441366004611de3565b6111b8565b610291610454366004611d8d565b600260209081526000928352604080842090915290825290205481565b6101c1611466565b600b546001146104a45760405162461bcd60e51b815260040161049b90611e5a565b60405180910390fd5b6000600b55841515806104b75750600084115b6105035760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015260640161049b565b60008061050e6108cc565b5091509150816001600160701b0316871080156105335750806001600160701b031686105b6105785760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015260640161049b565b60055460065460009182916001600160a01b0391821691168a156105a1576105a1828a8d61158a565b89156105b2576105b2818a8c61158a565b861561061f576040516384645f7960e01b81526001600160a01b038a16906384645f79906105ec9033908f908f908e908e90600401611e85565b600060405180830381600087803b15801561060657600080fd5b505af115801561061a573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106879190611ed1565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a0823190602401602060405180830381865afa1580156106ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f29190611ed1565b92505050600089856001600160701b031661070d9190611f00565b831161071a576000610737565b61072d8a6001600160701b038716611f00565b6107379084611f00565b9050600061074e8a6001600160701b038716611f00565b831161075b576000610778565b61076e8a6001600160701b038716611f00565b6107789084611f00565b905060008211806107895750600081115b6107d55760405162461bcd60e51b815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015260640161049b565b60006107e2836003611f17565b6107ee866103e8611f17565b6107f89190611f00565b90506000610807836003611f17565b610813866103e8611f17565b61081d9190611f00565b90506108356001600160701b03808916908a16611f17565b61084290620f4240611f17565b61084c8284611f17565b101561085757600080fd5b5050610865848488886116d5565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600b55505050505050505050565b6007546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610903338484611896565b50600192915050565b600b5460011461092e5760405162461bcd60e51b815260040161049b90611e5a565b6000600b8190556005546006546004805460408051622fcfcb60e31b815290516001600160a01b0395861696948616959092169263017e7e589282820192602092908290030181865afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190611f36565b6007546040516370a0823160e01b8152306004820152919250610a3f91859184916001600160701b03909116906001600160a01b038416906370a08231906024015b602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a309190611ed1565b610a3a9190611f00565b61158a565b6007546040516370a0823160e01b8152306004820152610a879184918491600160701b90046001600160701b0316906001600160a01b038416906370a08231906024016109ef565b50506001600b5550565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610af6576001600160a01b038416600090815260026020908152604080832033845290915281208054849290610af0908490611f00565b90915550505b610b018484846118f8565b5060019392505050565b6004546001600160a01b031615610b645760405162461bcd60e51b815260206004820152601e60248201527f5377617073506169723a20414c52454144595f494e495449414c495a45440000604482015260640161049b565b600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169181169190911790915560048054909116331790556001600b55565b6000600b54600114610bcb5760405162461bcd60e51b815260040161049b90611e5a565b6000600b81905580610bdb6108cc565b506005546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c519190611ed1565b6006546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc39190611ed1565b90506000610cda6001600160701b03861684611f00565b90506000610cf16001600160701b03861684611f00565b9050610d008686600a5461197b565b6000805490819003610d3f576103e8610d21610d1c8486611f17565b611a8d565b610d2b9190611f00565b9750610d3a60006103e8611aeb565b610d86565b610d836001600160701b038816610d568386611f17565b610d609190611f69565b6001600160701b038816610d748486611f17565b610d7e9190611f69565b611b54565b97505b60008811610dd65760405162461bcd60e51b815260206004820152601d60248201527f494e53554646494349454e545f4c49515549444954595f4d494e544544000000604482015260640161049b565b610de08989611aeb565b610dec858589896116d5565b600754610e0b906001600160701b03600160701b820481169116611f17565b600a55604080518481526020810184905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600b55509395945050505050565b600080600b54600114610e805760405162461bcd60e51b815260040161049b90611e5a565b6000600b81905580610e906108cc565b506005546006546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a0823190602401602060405180830381865afa158015610eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0e9190611ed1565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7c9190611ed1565b30600090815260016020526040902054600a5491925090610fa0908890889061197b565b60005480610fae8584611f17565b610fb89190611f69565b995080610fc58484611f17565b610fcf9190611f69565b985060008a118015610fe15750600089115b61102d5760405162461bcd60e51b815260206004820152601d60248201527f494e53554646494349454e545f4c49515549444954595f4255524e4544000000604482015260640161049b565b6110373083611b6c565b611042868c8c61158a565b61104d858c8b61158a565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190611ed1565b6040516370a0823160e01b81523060048201529094506001600160a01b038616906370a0823190602401602060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111209190611ed1565b925061112e84848a8a6116d5565b60075461114d906001600160701b03600160701b820481169116611f17565b600a55604080518b8152602081018b90526001600160a01b038d169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a350505050505050506001600b81905550915091565b60006109033384846118f8565b428410156112085760405162461bcd60e51b815260206004820152601f60248201527f537761707345524332303a205045524d49545f43414c4c5f4558504952454400604482015260640161049b565b6001600160a01b038716600090815260036020526040812080547f0000000000000000000000000000000000000000000000000000000000000000917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b918761127683611f7d565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016112ef92919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561137a5760405162461bcd60e51b815260206004820152601d60248201527f537761707345524332303a20494e56414c49445f5349474e4154555245000000604482015260640161049b565b6040805160008082526020820180845284905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa1580156113ce573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114045750886001600160a01b0316816001600160a01b0316145b6114505760405162461bcd60e51b815260206004820152601d60248201527f537761707345524332303a20494e56414c49445f5349474e4154555245000000604482015260640161049b565b61145b898989611896565b505050505050505050565b600b546001146114885760405162461bcd60e51b815260040161049b90611e5a565b6000600b556005546040516370a0823160e01b8152306004820152611583916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb9190611ed1565b6006546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190611ed1565b6007546001600160701b0380821691600160701b9004166116d5565b6001600b55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b179052915160009283928716916116169190611f96565b6000604051808303816000865af19150503d8060008114611653576040519150601f19603f3d011682016040523d82523d6000602084013e611658565b606091505b50915091508180156116825750805115806116825750808060200190518101906116829190611fb2565b6116ce5760405162461bcd60e51b815260206004820152601a60248201527f5377617073506169723a205452414e534645525f4641494c4544000000000000604482015260640161049b565b5050505050565b6001600160701b0384118015906116f357506001600160701b038311155b6117355760405162461bcd60e51b81526020600482015260136024820152725377617073506169723a204f564552464c4f5760681b604482015260640161049b565b600061174664010000000042611fd4565b60075490915063ffffffff600160e01b909104811682039081161580159061177657506001600160701b03841615155b801561178a57506001600160701b03831615155b156117fe5763ffffffff81166117af600160701b6001600160701b0386160286611be4565b600880546001600160e01b03929092169290920201905563ffffffff81166117e6600160701b6001600160701b0387160285611be4565b600980546001600160e01b0392909216929092020190555b506007805463ffffffff8316600160e01b026001600160e01b036001600160701b03888116600160701b9081026001600160e01b03199095168b83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a15050505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831660009081526001602052604090205461191c908290611f00565b6001600160a01b0384811660008181526001602090815260408083209590955592861680825290849020805486019055925184815290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016118eb565b8060000361198857505050565b60006119a3610d1c6001600160701b03808616908716611f17565b905060006119b083611a8d565b9050808211156116ce576000816119c8846005611f17565b6119d29190611fe8565b6119dc8385611f00565b6000546119e99190611f17565b6119f39190611f69565b905080600003611a0557505050505050565b611a85600460009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7f9190611f36565b82611aeb565b505050505050565b60006003821115611adc575080600160028204015b81811015611ad657809150600281828581611abf57611abf611f53565b040181611ace57611ace611f53565b049050611aa2565b50919050565b8115611ae6575060015b919050565b80600054611af99190611fe8565b60009081556001600160a01b038316808252600160209081526040808420805486019055518481529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000818310611b635781611b65565b825b9392505050565b6000805482900381556001600160a01b038316815260016020526040902054611b96908290611f00565b6001600160a01b0383166000818152600160205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b489085815260200190565b60006001600160701b0382166001600160e01b03841681611c0757611c07611f53565b049392505050565b6001600160a01b0381168114611c2457600080fd5b50565b600080600080600060808688031215611c3f57600080fd5b85359450602086013593506040860135611c5881611c0f565b9250606086013567ffffffffffffffff80821115611c7557600080fd5b818801915088601f830112611c8957600080fd5b813581811115611c9857600080fd5b896020828501011115611caa57600080fd5b9699959850939650602001949392505050565b60005b83811015611cd8578181015183820152602001611cc0565b83811115611ce7576000848401525b50505050565b6020815260008251806020840152611d0c816040850160208701611cbd565b601f01601f19169190910160400192915050565b60008060408385031215611d3357600080fd5b8235611d3e81611c0f565b946020939093013593505050565b600080600060608486031215611d6157600080fd5b8335611d6c81611c0f565b92506020840135611d7c81611c0f565b929592945050506040919091013590565b60008060408385031215611da057600080fd5b8235611dab81611c0f565b91506020830135611dbb81611c0f565b809150509250929050565b600060208284031215611dd857600080fd5b8135611b6581611c0f565b600080600080600080600060e0888a031215611dfe57600080fd5b8735611e0981611c0f565b96506020880135611e1981611c0f565b95506040880135945060608801359350608088013560ff81168114611e3d57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60208082526011908201527014ddd85c1cd4185a5c8e881313d0d2d151607a1b604082015260600190565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b600060208284031215611ee357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611f1257611f12611eea565b500390565b6000816000190483118215151615611f3157611f31611eea565b500290565b600060208284031215611f4857600080fd5b8151611b6581611c0f565b634e487b7160e01b600052601260045260246000fd5b600082611f7857611f78611f53565b500490565b600060018201611f8f57611f8f611eea565b5060010190565b60008251611fa8818460208701611cbd565b9190910192915050565b600060208284031215611fc457600080fd5b81518015158114611b6557600080fd5b600082611fe357611fe3611f53565b500690565b60008219821115611ffb57611ffb611eea565b50019056fea2646970667358221220fa081df5e17b676f55079757c12e1bfb8cfff147f8ec82075a71c156c872c32864736f6c634300080e0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80635a3d5493116100f9578063a9059cbb11610097578063d21220a711610071578063d21220a714610420578063d505accf14610433578063dd62ed3e14610446578063fff6cae91461047157600080fd5b8063a9059cbb146103f1578063ba9a7a5614610404578063c45a01551461040d57600080fd5b80637464fc3d116100d35780637464fc3d1461037a5780637ecebe001461038357806389afcb44146103a357806395d89b41146103cb57600080fd5b80635a3d54931461033e5780636a6278421461034757806370a082311461035a57600080fd5b80631dd19cb411610166578063313ce56711610140578063313ce567146102e15780633644e515146102fb578063485cc955146103225780635909c0d51461033557600080fd5b80631dd19cb41461029f57806323b872dd146102a757806330adf81f146102ba57600080fd5b8063022c0d9f146101ae57806306fdde03146101c35780630902f1ac14610206578063095ea7b31461023a5780630dfe16811461025d57806318160ddd14610288575b600080fd5b6101c16101bc366004611c27565b610479565b005b6101f06040518060400160405280600e81526020016d56657273652045786368616e676560901b81525081565b6040516101fd9190611ced565b60405180910390f35b61020e6108cc565b604080516001600160701b03948516815293909216602084015263ffffffff16908201526060016101fd565b61024d610248366004611d20565b6108f6565b60405190151581526020016101fd565b600554610270906001600160a01b031681565b6040516001600160a01b0390911681526020016101fd565b61029160005481565b6040519081526020016101fd565b6101c161090c565b61024d6102b5366004611d4c565b610a91565b6102917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102e9601281565b60405160ff90911681526020016101fd565b6102917f8d38bff3de880885f7638027341cf8dbbdbf33f05204f0f79849a330f262a9e081565b6101c1610330366004611d8d565b610b0b565b61029160085481565b61029160095481565b610291610355366004611dc6565b610ba7565b610291610368366004611dc6565b60016020526000908152604090205481565b610291600a5481565b610291610391366004611dc6565b60036020526000908152604090205481565b6103b66103b1366004611dc6565b610e5b565b604080519283526020830191909152016101fd565b6101f0604051806040016040528060078152602001660ac8aa4a68a5ab60cb1b81525081565b61024d6103ff366004611d20565b6111ab565b6102916103e881565b600454610270906001600160a01b031681565b600654610270906001600160a01b031681565b6101c1610441366004611de3565b6111b8565b610291610454366004611d8d565b600260209081526000928352604080842090915290825290205481565b6101c1611466565b600b546001146104a45760405162461bcd60e51b815260040161049b90611e5a565b60405180910390fd5b6000600b55841515806104b75750600084115b6105035760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015260640161049b565b60008061050e6108cc565b5091509150816001600160701b0316871080156105335750806001600160701b031686105b6105785760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015260640161049b565b60055460065460009182916001600160a01b0391821691168a156105a1576105a1828a8d61158a565b89156105b2576105b2818a8c61158a565b861561061f576040516384645f7960e01b81526001600160a01b038a16906384645f79906105ec9033908f908f908e908e90600401611e85565b600060405180830381600087803b15801561060657600080fd5b505af115801561061a573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106879190611ed1565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a0823190602401602060405180830381865afa1580156106ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f29190611ed1565b92505050600089856001600160701b031661070d9190611f00565b831161071a576000610737565b61072d8a6001600160701b038716611f00565b6107379084611f00565b9050600061074e8a6001600160701b038716611f00565b831161075b576000610778565b61076e8a6001600160701b038716611f00565b6107789084611f00565b905060008211806107895750600081115b6107d55760405162461bcd60e51b815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015260640161049b565b60006107e2836003611f17565b6107ee866103e8611f17565b6107f89190611f00565b90506000610807836003611f17565b610813866103e8611f17565b61081d9190611f00565b90506108356001600160701b03808916908a16611f17565b61084290620f4240611f17565b61084c8284611f17565b101561085757600080fd5b5050610865848488886116d5565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600b55505050505050505050565b6007546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610903338484611896565b50600192915050565b600b5460011461092e5760405162461bcd60e51b815260040161049b90611e5a565b6000600b8190556005546006546004805460408051622fcfcb60e31b815290516001600160a01b0395861696948616959092169263017e7e589282820192602092908290030181865afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190611f36565b6007546040516370a0823160e01b8152306004820152919250610a3f91859184916001600160701b03909116906001600160a01b038416906370a08231906024015b602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a309190611ed1565b610a3a9190611f00565b61158a565b6007546040516370a0823160e01b8152306004820152610a879184918491600160701b90046001600160701b0316906001600160a01b038416906370a08231906024016109ef565b50506001600b5550565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610af6576001600160a01b038416600090815260026020908152604080832033845290915281208054849290610af0908490611f00565b90915550505b610b018484846118f8565b5060019392505050565b6004546001600160a01b031615610b645760405162461bcd60e51b815260206004820152601e60248201527f5377617073506169723a20414c52454144595f494e495449414c495a45440000604482015260640161049b565b600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169181169190911790915560048054909116331790556001600b55565b6000600b54600114610bcb5760405162461bcd60e51b815260040161049b90611e5a565b6000600b81905580610bdb6108cc565b506005546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c519190611ed1565b6006546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc39190611ed1565b90506000610cda6001600160701b03861684611f00565b90506000610cf16001600160701b03861684611f00565b9050610d008686600a5461197b565b6000805490819003610d3f576103e8610d21610d1c8486611f17565b611a8d565b610d2b9190611f00565b9750610d3a60006103e8611aeb565b610d86565b610d836001600160701b038816610d568386611f17565b610d609190611f69565b6001600160701b038816610d748486611f17565b610d7e9190611f69565b611b54565b97505b60008811610dd65760405162461bcd60e51b815260206004820152601d60248201527f494e53554646494349454e545f4c49515549444954595f4d494e544544000000604482015260640161049b565b610de08989611aeb565b610dec858589896116d5565b600754610e0b906001600160701b03600160701b820481169116611f17565b600a55604080518481526020810184905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600b55509395945050505050565b600080600b54600114610e805760405162461bcd60e51b815260040161049b90611e5a565b6000600b81905580610e906108cc565b506005546006546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a0823190602401602060405180830381865afa158015610eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0e9190611ed1565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7c9190611ed1565b30600090815260016020526040902054600a5491925090610fa0908890889061197b565b60005480610fae8584611f17565b610fb89190611f69565b995080610fc58484611f17565b610fcf9190611f69565b985060008a118015610fe15750600089115b61102d5760405162461bcd60e51b815260206004820152601d60248201527f494e53554646494349454e545f4c49515549444954595f4255524e4544000000604482015260640161049b565b6110373083611b6c565b611042868c8c61158a565b61104d858c8b61158a565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190611ed1565b6040516370a0823160e01b81523060048201529094506001600160a01b038616906370a0823190602401602060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111209190611ed1565b925061112e84848a8a6116d5565b60075461114d906001600160701b03600160701b820481169116611f17565b600a55604080518b8152602081018b90526001600160a01b038d169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a350505050505050506001600b81905550915091565b60006109033384846118f8565b428410156112085760405162461bcd60e51b815260206004820152601f60248201527f537761707345524332303a205045524d49545f43414c4c5f4558504952454400604482015260640161049b565b6001600160a01b038716600090815260036020526040812080547f8d38bff3de880885f7638027341cf8dbbdbf33f05204f0f79849a330f262a9e0917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b918761127683611f7d565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016112ef92919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561137a5760405162461bcd60e51b815260206004820152601d60248201527f537761707345524332303a20494e56414c49445f5349474e4154555245000000604482015260640161049b565b6040805160008082526020820180845284905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa1580156113ce573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114045750886001600160a01b0316816001600160a01b0316145b6114505760405162461bcd60e51b815260206004820152601d60248201527f537761707345524332303a20494e56414c49445f5349474e4154555245000000604482015260640161049b565b61145b898989611896565b505050505050505050565b600b546001146114885760405162461bcd60e51b815260040161049b90611e5a565b6000600b556005546040516370a0823160e01b8152306004820152611583916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb9190611ed1565b6006546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190611ed1565b6007546001600160701b0380821691600160701b9004166116d5565b6001600b55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b179052915160009283928716916116169190611f96565b6000604051808303816000865af19150503d8060008114611653576040519150601f19603f3d011682016040523d82523d6000602084013e611658565b606091505b50915091508180156116825750805115806116825750808060200190518101906116829190611fb2565b6116ce5760405162461bcd60e51b815260206004820152601a60248201527f5377617073506169723a205452414e534645525f4641494c4544000000000000604482015260640161049b565b5050505050565b6001600160701b0384118015906116f357506001600160701b038311155b6117355760405162461bcd60e51b81526020600482015260136024820152725377617073506169723a204f564552464c4f5760681b604482015260640161049b565b600061174664010000000042611fd4565b60075490915063ffffffff600160e01b909104811682039081161580159061177657506001600160701b03841615155b801561178a57506001600160701b03831615155b156117fe5763ffffffff81166117af600160701b6001600160701b0386160286611be4565b600880546001600160e01b03929092169290920201905563ffffffff81166117e6600160701b6001600160701b0387160285611be4565b600980546001600160e01b0392909216929092020190555b506007805463ffffffff8316600160e01b026001600160e01b036001600160701b03888116600160701b9081026001600160e01b03199095168b83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a15050505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831660009081526001602052604090205461191c908290611f00565b6001600160a01b0384811660008181526001602090815260408083209590955592861680825290849020805486019055925184815290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016118eb565b8060000361198857505050565b60006119a3610d1c6001600160701b03808616908716611f17565b905060006119b083611a8d565b9050808211156116ce576000816119c8846005611f17565b6119d29190611fe8565b6119dc8385611f00565b6000546119e99190611f17565b6119f39190611f69565b905080600003611a0557505050505050565b611a85600460009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7f9190611f36565b82611aeb565b505050505050565b60006003821115611adc575080600160028204015b81811015611ad657809150600281828581611abf57611abf611f53565b040181611ace57611ace611f53565b049050611aa2565b50919050565b8115611ae6575060015b919050565b80600054611af99190611fe8565b60009081556001600160a01b038316808252600160209081526040808420805486019055518481529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000818310611b635781611b65565b825b9392505050565b6000805482900381556001600160a01b038316815260016020526040902054611b96908290611f00565b6001600160a01b0383166000818152600160205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b489085815260200190565b60006001600160701b0382166001600160e01b03841681611c0757611c07611f53565b049392505050565b6001600160a01b0381168114611c2457600080fd5b50565b600080600080600060808688031215611c3f57600080fd5b85359450602086013593506040860135611c5881611c0f565b9250606086013567ffffffffffffffff80821115611c7557600080fd5b818801915088601f830112611c8957600080fd5b813581811115611c9857600080fd5b896020828501011115611caa57600080fd5b9699959850939650602001949392505050565b60005b83811015611cd8578181015183820152602001611cc0565b83811115611ce7576000848401525b50505050565b6020815260008251806020840152611d0c816040850160208701611cbd565b601f01601f19169190910160400192915050565b60008060408385031215611d3357600080fd5b8235611d3e81611c0f565b946020939093013593505050565b600080600060608486031215611d6157600080fd5b8335611d6c81611c0f565b92506020840135611d7c81611c0f565b929592945050506040919091013590565b60008060408385031215611da057600080fd5b8235611dab81611c0f565b91506020830135611dbb81611c0f565b809150509250929050565b600060208284031215611dd857600080fd5b8135611b6581611c0f565b600080600080600080600060e0888a031215611dfe57600080fd5b8735611e0981611c0f565b96506020880135611e1981611c0f565b95506040880135945060608801359350608088013560ff81168114611e3d57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60208082526011908201527014ddd85c1cd4185a5c8e881313d0d2d151607a1b604082015260600190565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b600060208284031215611ee357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611f1257611f12611eea565b500390565b6000816000190483118215151615611f3157611f31611eea565b500290565b600060208284031215611f4857600080fd5b8151611b6581611c0f565b634e487b7160e01b600052601260045260246000fd5b600082611f7857611f78611f53565b500490565b600060018201611f8f57611f8f611eea565b5060010190565b60008251611fa8818460208701611cbd565b9190910192915050565b600060208284031215611fc457600080fd5b81518015158114611b6557600080fd5b600082611fe357611fe3611f53565b500690565b60008219821115611ffb57611ffb611eea565b50019056fea2646970667358221220fa081df5e17b676f55079757c12e1bfb8cfff147f8ec82075a71c156c872c32864736f6c634300080e0033
Deployed Bytecode Sourcemap
170:10860:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6610:2205;;;;;;:::i;:::-;;:::i;:::-;;87:46:3;;;;;;;;;;;;;;;-1:-1:-1;;;87:46:3;;;;;;;;;;;;:::i;:::-;;;;;;;;1795:254:4;;;:::i;:::-;;;;-1:-1:-1;;;;;1936:15:5;;;1918:34;;1988:15;;;;1983:2;1968:18;;1961:43;2052:10;2040:23;2020:18;;;2013:51;1857:2;1842:18;1795:254:4;1669:401:5;2674:240:3;;;;;;:::i;:::-;;:::i;:::-;;;2560:14:5;;2553:22;2535:41;;2523:2;2508:18;2674:240:3;2395:187:5;497:21:4;;;;;-1:-1:-1;;;;;497:21:4;;;;;;-1:-1:-1;;;;;2751:32:5;;;2733:51;;2721:2;2706:18;497:21:4;2587:203:5;331:26:3;;;;;;;;;2941:25:5;;;2929:2;2914:18;331:26:3;2795:177:5;8821:465:4;;;:::i;3158:376:3:-;;;;;;:::i;:::-;;:::i;579:151::-;;621:109;579:151;;186:35;;219:2;186:35;;;;;3792:4:5;3780:17;;;3762:36;;3750:2;3735:18;186:35:3;3620:184:5;532:41:3;;;;;1470:319:4;;;;;;:::i;:::-;;:::i;653:35::-;;;;;;694;;;;;;3605:1425;;;;;;:::i;:::-;;:::i;364:44:3:-;;;;;;:::i;:::-;;;;;;;;;;;;;;736:20:4;;;;;;484:41:3;;;;;;:::i;:::-;;;;;;;;;;;;;;5036:1568:4;;;;;;:::i;:::-;;:::i;:::-;;;;4628:25:5;;;4684:2;4669:18;;4662:34;;;;4601:18;5036:1568:4;4454:248:5;139:41:3;;;;;;;;;;;;;;;-1:-1:-1;;;139:41:3;;;;;2920:232;;;;;;:::i;:::-;;:::i;302:51:4:-;;346:7;302:51;;469:22;;;;;-1:-1:-1;;;;;469:22:4;;;524:21;;;;;-1:-1:-1;;;;;524:21:4;;;3540:1330:3;;;;;;:::i;:::-;;:::i;414:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;9292:234:4;;;:::i;6610:2205::-;840:8;;852:1;840:13;819:77;;;;-1:-1:-1;;;819:77:4;;;;;;;:::i;:::-;;;;;;;;;917:1;906:8;:12;6804:15;;;;:46:::1;;;6849:1;6835:11;:15;6804:46;6783:119;;;::::0;-1:-1:-1;;;6783:119:4;;6089:2:5;6783:119:4::1;::::0;::::1;6071:21:5::0;6128:2;6108:18;;;6101:30;6167:28;6147:18;;;6140:56;6213:18;;6783:119:4::1;5887:350:5::0;6783:119:4::1;6927:17;6958::::0;6990:13:::1;:11;:13::i;:::-;6913:90;;;;;7049:9;-1:-1:-1::0;;;;;7035:23:4::1;:11;:23;:62;;;;;7088:9;-1:-1:-1::0;;;;;7074:23:4::1;:11;:23;7035:62;7014:131;;;::::0;-1:-1:-1;;;7014:131:4;;6444:2:5;7014:131:4::1;::::0;::::1;6426:21:5::0;6483:2;6463:18;;;6456:30;-1:-1:-1;;;6502:18:5;;;6495:52;6564:18;;7014:131:4::1;6242:346:5::0;7014:131:4::1;7241:6;::::0;7279::::1;::::0;7156:16:::1;::::0;;;-1:-1:-1;;;;;7241:6:4;;::::1;::::0;7279::::1;7304:15:::0;;7300:61:::1;;7321:40;7335:7;7344:3;7349:11;7321:13;:40::i;:::-;7379:15:::0;;7375:61:::1;;7396:40;7410:7;7419:3;7424:11;7396:13;:40::i;:::-;7455:16:::0;;7451:172:::1;;7473:150;::::0;-1:-1:-1;;;7473:150:4;;-1:-1:-1;;;;;7473:27:4;::::1;::::0;::::1;::::0;:150:::1;::::0;7518:10:::1;::::0;7546:11;;7575;;7604:5;;;;7473:150:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7451:172;7649:40;::::0;-1:-1:-1;;;7649:40:4;;7683:4:::1;7649:40;::::0;::::1;2733:51:5::0;-1:-1:-1;;;;;7649:25:4;::::1;::::0;::::1;::::0;2706:18:5;;7649:40:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7714;::::0;-1:-1:-1;;;7714:40:4;;7748:4:::1;7714:40;::::0;::::1;2733:51:5::0;7638::4;;-1:-1:-1;;;;;;7714:25:4;::::1;::::0;::::1;::::0;2706:18:5;;7714:40:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7703:51;;7209:556;;7775:18;7831:11;7819:9;-1:-1:-1::0;;;;;7819:23:4::1;;;;;:::i;:::-;7808:8;:34;:89;;7896:1;7808:89;;;7869:23;7881:11:::0;-1:-1:-1;;;;;7869:23:4;::::1;;:::i;:::-;7857:36;::::0;:8;:36:::1;:::i;:::-;7775:122:::0;-1:-1:-1;7908:18:4::1;7952:23;7964:11:::0;-1:-1:-1;;;;;7952:23:4;::::1;;:::i;:::-;7941:8;:34;:89;;8029:1;7941:89;;;8002:23;8014:11:::0;-1:-1:-1;;;;;8002:23:4;::::1;;:::i;:::-;7990:36;::::0;:8;:36:::1;:::i;:::-;7908:122;;8075:1;8062:10;:14;:44;;;;8105:1;8092:10;:14;8062:44;8041:116;;;::::0;-1:-1:-1;;;8041:116:4;;7883:2:5;8041:116:4::1;::::0;::::1;7865:21:5::0;7922:2;7902:18;;;7895:30;7961:27;7941:18;;;7934:55;8006:18;;8041:116:4::1;7681:349:5::0;8041:116:4::1;8182:24;8228:14;:10:::0;8241:1:::1;8228:14;:::i;:::-;8209:15;:8:::0;8220:4:::1;8209:15;:::i;:::-;:34;;;;:::i;:::-;8182:61:::0;-1:-1:-1;8257:24:4::1;8303:14;:10:::0;8316:1:::1;8303:14;:::i;:::-;8284:15;:8:::0;8295:4:::1;8284:15;:::i;:::-;:34;;;;:::i;:::-;8257:61:::0;-1:-1:-1;8413:50:4::1;-1:-1:-1::0;;;;;8413:50:4;;::::1;::::0;:18;::::1;:50;:::i;:::-;:84;::::0;8487:9:::1;8413:84;:::i;:::-;8358:35;8377:16:::0;8358;:35:::1;:::i;:::-;:139;;8333:178;;;::::0;::::1;;8168:354;;8532:107;8553:8;8575;8597:9;8620;8532:7;:107::i;:::-;8655:153;::::0;;8439:25:5;;;8495:2;8480:18;;8473:34;;;8523:18;;;8516:34;;;8581:2;8566:18;;8559:34;;;-1:-1:-1;;;;;8655:153:4;::::1;::::0;8673:10:::1;::::0;8655:153:::1;::::0;8426:3:5;8411:19;8655:153:4::1;;;;;;;-1:-1:-1::0;;950:1:4;939:8;:12;-1:-1:-1;;;;;;;;;6610:2205:4:o;1795:254::-;1970:8;;-1:-1:-1;;;;;1970:8:4;;;;-1:-1:-1;;;1992:8:4;;;;;;-1:-1:-1;;;2014:18:4;;;;;1795:254::o;2674:240:3:-;2781:4;2801:84;2823:10;2847:8;2869:6;2801:8;:84::i;:::-;-1:-1:-1;2903:4:3;2674:240;;;;:::o;8821:465:4:-;840:8;;852:1;840:13;819:77;;;;-1:-1:-1;;;819:77:4;;;;;;;:::i;:::-;917:1;906:8;:12;;;8899:6:::1;::::0;8933::::1;::::0;8981:7:::1;::::0;;8967:30:::1;::::0;;-1:-1:-1;;;8967:30:4;;;;-1:-1:-1;;;;;8899:6:4;;::::1;::::0;8933;;::::1;::::0;8981:7;;::::1;::::0;8967:28:::1;::::0;:30;;::::1;::::0;::::1;::::0;;;;;;;8981:7;8967:30:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9120:8;::::0;9077:40:::1;::::0;-1:-1:-1;;;9077:40:4;;9111:4:::1;9077:40;::::0;::::1;2733:51:5::0;8949:48:4;;-1:-1:-1;9008:130:4::1;::::0;9035:7;;8949:48;;-1:-1:-1;;;;;9120:8:4;;::::1;::::0;-1:-1:-1;;;;;9077:25:4;::::1;::::0;::::1;::::0;2706:18:5;;9077:40:4::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;9008:13;:130::i;:::-;9261:8;::::0;9218:40:::1;::::0;-1:-1:-1;;;9218:40:4;;9252:4:::1;9218:40;::::0;::::1;2733:51:5::0;9149:130:4::1;::::0;9176:7;;9197;;-1:-1:-1;;;9261:8:4;::::1;-1:-1:-1::0;;;;;9261:8:4::1;::::0;-1:-1:-1;;;;;9218:25:4;::::1;::::0;::::1;::::0;2706:18:5;;9218:40:4::1;2587:203:5::0;9149:130:4::1;-1:-1:-1::0;;950:1:4;939:8;:12;-1:-1:-1;8821:465:4:o;3158:376:3:-;-1:-1:-1;;;;;3312:16:3;;3288:4;3312:16;;;:9;:16;;;;;;;;3329:10;3312:28;;;;;;;;-1:-1:-1;;3312:43:3;3308:112;;-1:-1:-1;;;;;3371:16:3;;;;;;:9;:16;;;;;;;;3388:10;3371:28;;;;;;;:38;;3403:6;;3371:16;:38;;3403:6;;3371:38;:::i;:::-;;;;-1:-1:-1;;3308:112:3;3430:75;3453:5;3472:3;3489:6;3430:9;:75::i;:::-;-1:-1:-1;3523:4:3;3158:376;;;;;:::o;1470:319:4:-;1598:7;;-1:-1:-1;;;;;1598:7:4;:23;1577:100;;;;-1:-1:-1;;;1577:100:4;;9062:2:5;1577:100:4;;;9044:21:5;9101:2;9081:18;;;9074:30;9140:32;9120:18;;;9113:60;9190:18;;1577:100:4;8860:354:5;1577:100:4;1688:6;:16;;-1:-1:-1;;;;;1688:16:4;;;-1:-1:-1;;;;;;1688:16:4;;;;;;;1714:6;:16;;;;;;;;;;;;;;;;1740:7;:20;;;;;1750:10;1740:20;;;1688:16;1770:8;:12;1470:319::o;3605:1425::-;3693:17;840:8;;852:1;840:13;819:77;;;;-1:-1:-1;;;819:77:4;;;;;;;:::i;:::-;917:1;906:8;:12;;;917:1;3803:13:::1;:11;:13::i;:::-;-1:-1:-1::0;3853:6:4::1;::::0;3846:39:::1;::::0;-1:-1:-1;;;3846:39:4;;3879:4:::1;3846:39;::::0;::::1;2733:51:5::0;3726:90:4;;-1:-1:-1;3726:90:4;;-1:-1:-1;3827:16:4::1;::::0;-1:-1:-1;;;;;3853:6:4;;::::1;::::0;3846:24:::1;::::0;2706:18:5;;3846:39:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3921:6;::::0;3914:39:::1;::::0;-1:-1:-1;;;3914:39:4;;3947:4:::1;3914:39;::::0;::::1;2733:51:5::0;3827:58:4;;-1:-1:-1;3895:16:4::1;::::0;-1:-1:-1;;;;;3921:6:4;;::::1;::::0;3914:24:::1;::::0;2706:18:5;;3914:39:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3895:58:::0;-1:-1:-1;3964:15:4::1;3982:20;-1:-1:-1::0;;;;;3982:20:4;::::1;:8:::0;:20:::1;:::i;:::-;3964:38:::0;-1:-1:-1;4012:15:4::1;4030:20;-1:-1:-1::0;;;;;4030:20:4;::::1;:8:::0;:20:::1;:::i;:::-;4012:38;;4061:83;4083:9;4106;4129:5;;4061:8;:83::i;:::-;4155:20;4178:11:::0;;;4204:17;;;4200:397:::1;;346:7;4250:53;4272:17;4282:7:::0;4272;:17:::1;:::i;:::-;4250:4;:53::i;:::-;:73;;;;:::i;:::-;4238:85;;4338:82;268:1:3;346:7:4;4338:5;:82::i;:::-;4200:397;;;4465:121;-1:-1:-1::0;;;;;4486:34:4;::::1;:22;4496:12:::0;4486:7;:22:::1;:::i;:::-;:34;;;;:::i;:::-;-1:-1:-1::0;;;;;4538:34:4;::::1;:22;4548:12:::0;4538:7;:22:::1;:::i;:::-;:34;;;;:::i;:::-;4465:3;:121::i;:::-;4453:133;;4200:397;4640:1;4628:9;:13;4607:89;;;::::0;-1:-1:-1;;;4607:89:4;;9678:2:5;4607:89:4::1;::::0;::::1;9660:21:5::0;9717:2;9697:18;;;9690:30;9756:31;9736:18;;;9729:59;9805:18;;4607:89:4::1;9476:353:5::0;4607:89:4::1;4707:55;4726:3;4743:9;4707:5;:55::i;:::-;4773:107;4794:8;4816;4838:9;4861;4773:7;:107::i;:::-;4919:8;::::0;4899:28:::1;::::0;-1:-1:-1;;;;;;;;4919:8:4;::::1;::::0;::::1;::::0;4907::::1;4899:28;:::i;:::-;4891:5;:36:::0;4943:80:::1;::::0;;4628:25:5;;;4684:2;4669:18;;4662:34;;;4961:10:4::1;::::0;4943:80:::1;::::0;4601:18:5;4943:80:4::1;;;;;;;-1:-1:-1::0;;950:1:4;939:8;:12;-1:-1:-1;3605:1425:4;;;-1:-1:-1;;;;;3605:1425:4:o;5036:1568::-;5137:15;5166;840:8;;852:1;840:13;819:77;;;;-1:-1:-1;;;819:77:4;;;;;;;:::i;:::-;917:1;906:8;:12;;;917:1;5283:13:::1;:11;:13::i;:::-;-1:-1:-1::0;5325:6:4::1;::::0;5359::::1;::::0;5395:40:::1;::::0;-1:-1:-1;;;5395:40:4;;5429:4:::1;5395:40;::::0;::::1;2733:51:5::0;5206:90:4;;-1:-1:-1;5206:90:4;;-1:-1:-1;;;;;;5325:6:4;;::::1;::::0;5359;::::1;::::0;5307:15:::1;::::0;5325:6;;5395:25:::1;::::0;2706:18:5;;5395:40:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5464;::::0;-1:-1:-1;;;5464:40:4;;5498:4:::1;5464:40;::::0;::::1;2733:51:5::0;5376:59:4;;-1:-1:-1;5445:16:4::1;::::0;-1:-1:-1;;;;;5464:25:4;::::1;::::0;::::1;::::0;2706:18:5;;5464:40:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5553:4;5515:17;5535:24:::0;;;:9:::1;:24;::::0;;;;;5638:5:::1;::::0;5445:59;;-1:-1:-1;5535:24:4;5570:83:::1;::::0;5592:9;;5615;;5570:8:::1;:83::i;:::-;5664:20;5687:11:::0;;5719:20:::1;5731:8:::0;5719:9;:20:::1;:::i;:::-;:35;;;;:::i;:::-;5709:45:::0;-1:-1:-1;5797:12:4;5774:20:::1;5786:8:::0;5774:9;:20:::1;:::i;:::-;:35;;;;:::i;:::-;5764:45;;5851:1;5841:7;:11;:38;;;;;5878:1;5868:7;:11;5841:38;5820:114;;;::::0;-1:-1:-1;;;5820:114:4;;10036:2:5;5820:114:4::1;::::0;::::1;10018:21:5::0;10075:2;10055:18;;;10048:30;10114:31;10094:18;;;10087:59;10163:18;;5820:114:4::1;9834:353:5::0;5820:114:4::1;5945:65;5972:4;5991:9;5945:5;:65::i;:::-;6021:82;6048:7;6069:3;6086:7;6021:13;:82::i;:::-;6114;6141:7;6162:3;6179:7;6114:13;:82::i;:::-;6218:40;::::0;-1:-1:-1;;;6218:40:4;;6252:4:::1;6218:40;::::0;::::1;2733:51:5::0;-1:-1:-1;;;;;6218:25:4;::::1;::::0;::::1;::::0;2706:18:5;;6218:40:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6279;::::0;-1:-1:-1;;;6279:40:4;;6313:4:::1;6279:40;::::0;::::1;2733:51:5::0;6207::4;;-1:-1:-1;;;;;;6279:25:4;::::1;::::0;::::1;::::0;2706:18:5;;6279:40:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6268:51;;6330:107;6351:8;6373;6395:9;6418;6330:7;:107::i;:::-;6476:8;::::0;6456:28:::1;::::0;-1:-1:-1;;;;;;;;6476:8:4;::::1;::::0;::::1;::::0;6464::::1;6456:28;:::i;:::-;6448:5;:36:::0;6500:97:::1;::::0;;4628:25:5;;;4684:2;4669:18;;4662:34;;;-1:-1:-1;;;;;6500:97:4;::::1;::::0;6518:10:::1;::::0;6500:97:::1;::::0;4601:18:5;6500:97:4::1;;;;;;;5196:1408;;;;;;;;950:1:::0;939:8;:12;;;;5036:1568;;;:::o;2920:232:3:-;3023:4;3043:80;3066:10;3090:3;3107:6;3043:9;:80::i;3540:1330::-;3786:15;3773:9;:28;;3752:106;;;;-1:-1:-1;;;3752:106:3;;10394:2:5;3752:106:3;;;10376:21:5;10433:2;10413:18;;;10406:30;10472:33;10452:18;;;10445:61;10523:18;;3752:106:3;10192:355:5;3752:106:3;-1:-1:-1;;;;;4211:14:3;;3869;4211;;;:6;:14;;;;;:16;;3971;;621:109;;4113:6;;4145:8;;4179:6;;3869:14;4211:16;;;:::i;:::-;;;;-1:-1:-1;4036:248:3;;;;;;10979:25:5;;;;-1:-1:-1;;;;;11078:15:5;;;11058:18;;;11051:43;11130:15;;;;11110:18;;;11103:43;11162:18;;;11155:34;11205:19;;;11198:35;11249:19;;;11242:35;;;10951:19;;4036:248:3;;;;;;;;;;;;4005:297;;;;;;3909:407;;;;;;;;-1:-1:-1;;;11546:27:5;;11598:1;11589:11;;11582:27;;;;11634:2;11625:12;;11618:28;11671:2;11662:12;;11288:392;3909:407:3;;;;;;;;;;;;;3886:440;;;;;;3869:457;;4355:66;4349:2;4341:11;;:80;4337:150;;;4437:39;;-1:-1:-1;;;4437:39:3;;11887:2:5;4437:39:3;;;11869:21:5;11926:2;11906:18;;;11899:30;11965:31;11945:18;;;11938:59;12014:18;;4437:39:3;11685:353:5;4337:150:3;4524:87;;;4497:24;4524:87;;;;;;;;;12270:25:5;;;12343:4;12331:17;;12311:18;;;12304:45;;;;12365:18;;;12358:34;;;12408:18;;;12401:34;;;4524:87:3;;12242:19:5;;4524:87:3;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4524:87:3;;-1:-1:-1;;4524:87:3;;;-1:-1:-1;;;;;;;4643:32:3;;;;;;:74;;;4711:6;-1:-1:-1;;;;;4691:26:3;:16;-1:-1:-1;;;;;4691:26:3;;4643:74;4622:150;;;;-1:-1:-1;;;4622:150:3;;11887:2:5;4622:150:3;;;11869:21:5;11926:2;11906:18;;;11899:30;11965:31;11945:18;;;11938:59;12014:18;;4622:150:3;11685:353:5;4622:150:3;4783:80;4805:6;4825:8;4847:6;4783:8;:80::i;:::-;3742:1128;;3540:1330;;;;;;;:::o;9292:234:4:-;840:8;;852:1;840:13;819:77;;;;-1:-1:-1;;;819:77:4;;;;;;;:::i;:::-;917:1;906:8;:12;9380:6:::1;::::0;9373:39:::1;::::0;-1:-1:-1;;;9373:39:4;;9406:4:::1;9373:39;::::0;::::1;2733:51:5::0;9352:167:4::1;::::0;-1:-1:-1;;;;;9380:6:4::1;::::0;9373:24:::1;::::0;2706:18:5;;9373:39:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9433:6;::::0;9426:39:::1;::::0;-1:-1:-1;;;9426:39:4;;9459:4:::1;9426:39;::::0;::::1;2733:51:5::0;-1:-1:-1;;;;;9433:6:4;;::::1;::::0;9426:24:::1;::::0;2706:18:5;;9426:39:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9479:8;::::0;-1:-1:-1;;;;;9479:8:4;;::::1;::::0;-1:-1:-1;;;9501:8:4;::::1;;9352:7;:167::i;:::-;950:1:::0;939:8;:12;9292:234::o;10505:523::-;421:34;;;;;;;;;;;;;;;;;10695:107;;-1:-1:-1;;;;;12638:32:5;;;10695:107:4;;;12620:51:5;12687:18;;;;12680:34;;;10695:107:4;;;;;;;;;;12593:18:5;;;;10695:107:4;;;;;;;-1:-1:-1;;;;;10695:107:4;-1:-1:-1;;;10695:107:4;;;10670:142;;-1:-1:-1;;;;10670:11:4;;;:142;;10695:107;10670:142;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10634:178;;;;10844:7;:125;;;;-1:-1:-1;10873:11:4;;:16;;:82;;;10925:4;10893:62;;;;;;;;;;;;:::i;:::-;10823:198;;;;-1:-1:-1;;;10823:198:4;;13488:2:5;10823:198:4;;;13470:21:5;13527:2;13507:18;;;13500:30;13566:28;13546:18;;;13539:56;13612:18;;10823:198:4;13286:350:5;10823:198:4;10624:404;;10505:523;;;:::o;2055:951::-;-1:-1:-1;;;;;2237:24:4;;;;;:64;;-1:-1:-1;;;;;;2277:24:4;;;2237:64;2216:130;;;;-1:-1:-1;;;2216:130:4;;13843:2:5;2216:130:4;;;13825:21:5;13882:2;13862:18;;;13855:30;-1:-1:-1;;;13901:18:5;;;13894:49;13960:18;;2216:130:4;13641:343:5;2216:130:4;2357:21;2388:25;2406:7;2388:15;:25;:::i;:::-;2487:18;;2357:57;;-1:-1:-1;2487:18:4;-1:-1:-1;;;2487:18:4;;;;;2470:35;;;2523:15;;;;;;:33;;-1:-1:-1;;;;;;2542:14:4;;;;2523:33;:51;;;;-1:-1:-1;;;;;;2560:14:4;;;;2523:51;2519:272;;;2618:58;;;2626:35;-1:-1:-1;;;;;;;;9674:11:4;;:18;2651:9;2626:5;:35::i;:::-;2594:20;:82;;-1:-1:-1;;;;;2618:44:4;;;;:58;;;;2594:82;;;2718:58;;;2726:35;-1:-1:-1;;;;;;;;9674:11:4;;:18;2751:9;2726:5;:35::i;:::-;2694:20;:82;;-1:-1:-1;;;;;2718:44:4;;;;:58;;;;2694:82;;;2519:272;-1:-1:-1;2811:8:4;:29;;2890:35;;;-1:-1:-1;;;2890:35:4;-1:-1:-1;;;;;;;;;;2850:29:4;;;-1:-1:-1;;;2850:29:4;;;-1:-1:-1;;;;;;2850:29:4;;;2811;;;2850;;;;;2890:35;;;;;;;;;2941:58;;;2959:8;;;;;;;;;;14329:34:5;;2981:8:4;;;;;;;14394:2:5;14379:18;;14372:43;2941:58:4;;14253:18:5;2941:58:4;;;;;;;2206:800;2055:951;;;;:::o;2026:267:3:-;-1:-1:-1;;;;;2154:17:3;;;;;;;:9;:17;;;;;;;;:27;;;;;;;;;;;;;:36;;;2206:80;;2941:25:5;;;2206:80:3;;2914:18:5;2206:80:3;;;;;;;;2026:267;;;:::o;2299:369::-;-1:-1:-1;;;;;2449:16:3;;;;;;:9;:16;;;;;;:25;;2468:6;;2449:25;:::i;:::-;-1:-1:-1;;;;;2422:16:3;;;;;;;:9;:16;;;;;;;;:52;;;;2538:14;;;;;;;;;;;;:23;;2509:52;;2587:74;;2941:25:5;;;2422:16:3;;2587:74;;2914:18:5;2587:74:3;2795:177:5;3012:587:4;3148:6;3158:1;3148:11;3144:24;;3012:587;;;:::o;3144:24::-;3178:13;3194:36;3199:30;-1:-1:-1;;;;;3199:30:4;;;;:18;;:30;:::i;3194:36::-;3178:52;;3240:17;3260:12;3265:6;3260:4;:12::i;:::-;3240:32;;3295:9;3287:5;:17;3283:310;;;3321:17;3422:9;3410;:5;3418:1;3410:9;:::i;:::-;:21;;;;:::i;:::-;3372:17;3380:9;3372:5;:17;:::i;:::-;3341:11;;:49;;;;:::i;:::-;:91;;;;:::i;:::-;3321:111;;3451:9;3464:1;3451:14;3447:27;;3467:7;;;3012:587;;;:::o;3447:27::-;3488:94;3525:7;;;;;;;;;-1:-1:-1;;;;;3525:7:4;-1:-1:-1;;;;;3511:28:4;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3559:9;3488:5;:94::i;:::-;3306:287;3134:465;;3012:587;;;:::o;10080:419::-;10167:9;10225:1;10220:2;:6;10216:267;;;-1:-1:-1;10250:2:4;10291:1;10287;10282:6;;:10;10310:102;10321:1;10317;:5;10310:102;;;10350:1;10346:5;;10392:1;10387;10383;10378:2;:6;;;;;:::i;:::-;;:10;10377:16;;;;;:::i;:::-;;10373:20;;10310:102;;;10228:198;10080:419;;;:::o;10216:267::-;10436:7;;10432:51;;-1:-1:-1;10467:1:4;10432:51;10080:419;;;:::o;1326:340:3:-;1459:6;1445:11;;:20;;;;:::i;:::-;1423:11;:42;;;-1:-1:-1;;;;;1529:14:3;;;;;:9;:14;;;;;;;;;;:23;;1500:52;;1578:81;2941:25:5;;;1529:14:3;;1423:11;1578:81;;2914:18:5;1578:81:3;;;;;;;;1326:340;;:::o;9915:159:4:-;10021:9;10055:2;10050;:7;:17;;10065:2;10050:17;;;10060:2;10050:17;10046:21;9915:159;-1:-1:-1;;;9915:159:4:o;1672:348:3:-;1821:11;;;:20;;;1795:46;;-1:-1:-1;;;;;1889:16:3;;;;-1:-1:-1;1889:16:3;;;;;;:25;;1835:6;;1889:25;:::i;:::-;-1:-1:-1;;;;;1862:16:3;;;;;;:9;:16;;;;;;:52;;;;1930:83;;;;;;1997:6;2941:25:5;;2929:2;2914:18;;2795:177;9715:194:4;9823:9;-1:-1:-1;;;;;9881:11:4;;-1:-1:-1;;;;;9876:16:4;;9881:11;9876:16;;;;:::i;:::-;;;9715:194;-1:-1:-1;;;9715:194:4:o;14:131:5:-;-1:-1:-1;;;;;89:31:5;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:863::-;247:6;255;263;271;279;332:3;320:9;311:7;307:23;303:33;300:53;;;349:1;346;339:12;300:53;385:9;372:23;362:33;;442:2;431:9;427:18;414:32;404:42;;496:2;485:9;481:18;468:32;509:31;534:5;509:31;:::i;:::-;559:5;-1:-1:-1;615:2:5;600:18;;587:32;638:18;668:14;;;665:34;;;695:1;692;685:12;665:34;733:6;722:9;718:22;708:32;;778:7;771:4;767:2;763:13;759:27;749:55;;800:1;797;790:12;749:55;840:2;827:16;866:2;858:6;855:14;852:34;;;882:1;879;872:12;852:34;927:7;922:2;913:6;909:2;905:15;901:24;898:37;895:57;;;948:1;945;938:12;895:57;150:863;;;;-1:-1:-1;150:863:5;;-1:-1:-1;979:2:5;971:11;;1001:6;150:863;-1:-1:-1;;;150:863:5:o;1018:258::-;1090:1;1100:113;1114:6;1111:1;1108:13;1100:113;;;1190:11;;;1184:18;1171:11;;;1164:39;1136:2;1129:10;1100:113;;;1231:6;1228:1;1225:13;1222:48;;;1266:1;1257:6;1252:3;1248:16;1241:27;1222:48;;1018:258;;;:::o;1281:383::-;1430:2;1419:9;1412:21;1393:4;1462:6;1456:13;1505:6;1500:2;1489:9;1485:18;1478:34;1521:66;1580:6;1575:2;1564:9;1560:18;1555:2;1547:6;1543:15;1521:66;:::i;:::-;1648:2;1627:15;-1:-1:-1;;1623:29:5;1608:45;;;;1655:2;1604:54;;1281:383;-1:-1:-1;;1281:383:5:o;2075:315::-;2143:6;2151;2204:2;2192:9;2183:7;2179:23;2175:32;2172:52;;;2220:1;2217;2210:12;2172:52;2259:9;2246:23;2278:31;2303:5;2278:31;:::i;:::-;2328:5;2380:2;2365:18;;;;2352:32;;-1:-1:-1;;;2075:315:5:o;2977:456::-;3054:6;3062;3070;3123:2;3111:9;3102:7;3098:23;3094:32;3091:52;;;3139:1;3136;3129:12;3091:52;3178:9;3165:23;3197:31;3222:5;3197:31;:::i;:::-;3247:5;-1:-1:-1;3304:2:5;3289:18;;3276:32;3317:33;3276:32;3317:33;:::i;:::-;2977:456;;3369:7;;-1:-1:-1;;;3423:2:5;3408:18;;;;3395:32;;2977:456::o;3809:388::-;3877:6;3885;3938:2;3926:9;3917:7;3913:23;3909:32;3906:52;;;3954:1;3951;3944:12;3906:52;3993:9;3980:23;4012:31;4037:5;4012:31;:::i;:::-;4062:5;-1:-1:-1;4119:2:5;4104:18;;4091:32;4132:33;4091:32;4132:33;:::i;:::-;4184:7;4174:17;;;3809:388;;;;;:::o;4202:247::-;4261:6;4314:2;4302:9;4293:7;4289:23;4285:32;4282:52;;;4330:1;4327;4320:12;4282:52;4369:9;4356:23;4388:31;4413:5;4388:31;:::i;4707:829::-;4818:6;4826;4834;4842;4850;4858;4866;4919:3;4907:9;4898:7;4894:23;4890:33;4887:53;;;4936:1;4933;4926:12;4887:53;4975:9;4962:23;4994:31;5019:5;4994:31;:::i;:::-;5044:5;-1:-1:-1;5101:2:5;5086:18;;5073:32;5114:33;5073:32;5114:33;:::i;:::-;5166:7;-1:-1:-1;5220:2:5;5205:18;;5192:32;;-1:-1:-1;5271:2:5;5256:18;;5243:32;;-1:-1:-1;5327:3:5;5312:19;;5299:33;5376:4;5363:18;;5351:31;;5341:59;;5396:1;5393;5386:12;5341:59;4707:829;;;;-1:-1:-1;4707:829:5;;;;5419:7;5473:3;5458:19;;5445:33;;-1:-1:-1;5525:3:5;5510:19;;;5497:33;;4707:829;-1:-1:-1;;4707:829:5:o;5541:341::-;5743:2;5725:21;;;5782:2;5762:18;;;5755:30;-1:-1:-1;;;5816:2:5;5801:18;;5794:47;5873:2;5858:18;;5541:341::o;6593:632::-;6863:1;6859;6854:3;6850:11;6846:19;6838:6;6834:32;6823:9;6816:51;6903:6;6898:2;6887:9;6883:18;6876:34;6946:6;6941:2;6930:9;6926:18;6919:34;6989:3;6984:2;6973:9;6969:18;6962:31;7030:6;7024:3;7013:9;7009:19;7002:35;7088:6;7080;7074:3;7063:9;7059:19;7046:49;7145:1;7115:22;;;7139:3;7111:32;;;7104:43;;;;7208:2;7187:15;;;-1:-1:-1;;7183:29:5;7168:45;7164:55;;6593:632;-1:-1:-1;;;;6593:632:5:o;7230:184::-;7300:6;7353:2;7341:9;7332:7;7328:23;7324:32;7321:52;;;7369:1;7366;7359:12;7321:52;-1:-1:-1;7392:16:5;;7230:184;-1:-1:-1;7230:184:5:o;7419:127::-;7480:10;7475:3;7471:20;7468:1;7461:31;7511:4;7508:1;7501:15;7535:4;7532:1;7525:15;7551:125;7591:4;7619:1;7616;7613:8;7610:34;;;7624:18;;:::i;:::-;-1:-1:-1;7661:9:5;;7551:125::o;8035:168::-;8075:7;8141:1;8137;8133:6;8129:14;8126:1;8123:21;8118:1;8111:9;8104:17;8100:45;8097:71;;;8148:18;;:::i;:::-;-1:-1:-1;8188:9:5;;8035:168::o;8604:251::-;8674:6;8727:2;8715:9;8706:7;8702:23;8698:32;8695:52;;;8743:1;8740;8733:12;8695:52;8775:9;8769:16;8794:31;8819:5;8794:31;:::i;9219:127::-;9280:10;9275:3;9271:20;9268:1;9261:31;9311:4;9308:1;9301:15;9335:4;9332:1;9325:15;9351:120;9391:1;9417;9407:35;;9422:18;;:::i;:::-;-1:-1:-1;9456:9:5;;9351:120::o;10552:135::-;10591:3;10612:17;;;10609:43;;10632:18;;:::i;:::-;-1:-1:-1;10679:1:5;10668:13;;10552:135::o;12725:274::-;12854:3;12892:6;12886:13;12908:53;12954:6;12949:3;12942:4;12934:6;12930:17;12908:53;:::i;:::-;12977:16;;;;;12725:274;-1:-1:-1;;12725:274:5:o;13004:277::-;13071:6;13124:2;13112:9;13103:7;13099:23;13095:32;13092:52;;;13140:1;13137;13130:12;13092:52;13172:9;13166:16;13225:5;13218:13;13211:21;13204:5;13201:32;13191:60;;13247:1;13244;13237:12;13989:112;14021:1;14047;14037:35;;14052:18;;:::i;:::-;-1:-1:-1;14086:9:5;;13989:112::o;14426:128::-;14466:3;14497:1;14493:6;14490:1;14487:13;14484:39;;;14503:18;;:::i;:::-;-1:-1:-1;14539:9:5;;14426:128::o
Swarm Source
ipfs://fa081df5e17b676f55079757c12e1bfb8cfff147f8ec82075a71c156c872c328
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.