ERC-20
Currency
Overview
Max Total Supply
798,504,227.14658769444354266 VOW
Holders
30,054 (0.00%)
Market
Price
$0.13 @ 0.000053 ETH (+0.19%)
Onchain Market Cap
$106,808,723.93
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
VOWToken
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-15 */ // File: contracts/thirdParty/ECDSA.sol // Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/cryptography/ECDSA.sol // Line 60 added to original source in accordance with recommendation on accepting signatures with 0/1 for v pragma solidity ^0.6.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { revert("ECDSA: invalid signature length"); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { revert("ECDSA: invalid signature 's' value"); } if (v < 27) v += 27; if (v != 27 && v != 28) { revert("ECDSA: invalid signature 'v' value"); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); require(signer != address(0), "ECDSA: invalid signature"); return signer; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * replicates the behavior of the * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`] * JSON-RPC method. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } // File: contracts/interfaces/IERC777.sol pragma solidity 0.6.7; // As defined in https://eips.ethereum.org/EIPS/eip-777 interface IERC777 { event Sent(address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData); event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData); event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData); event AuthorizedOperator(address indexed operator,address indexed holder); event RevokedOperator(address indexed operator, address indexed holder); function name() external view returns (string memory); function symbol() external view returns (string memory); function totalSupply() external view returns (uint256); function balanceOf(address holder) external view returns (uint256); function granularity() external view returns (uint256); function defaultOperators() external view returns (address[] memory); function isOperatorFor(address operator, address holder) external view returns (bool); function authorizeOperator(address operator) external; function revokeOperator(address operator) external; function send(address to, uint256 amount, bytes calldata data) external; function operatorSend(address from, address to, uint256 amount, bytes calldata data, bytes calldata operatorData) external; function burn(uint256 amount, bytes calldata data) external; function operatorBurn( address from, uint256 amount, bytes calldata data, bytes calldata operatorData) external; } // File: contracts/interfaces/IERC20.sol pragma solidity 0.6.7; // As described in https://eips.ethereum.org/EIPS/eip-20 interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function name() external view returns (string memory); // optional method - see eip spec function symbol() external view returns (string memory); // optional method - see eip spec function decimals() external view returns (uint8); // optional method - see eip spec function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); } // File: contracts/thirdParty/interfaces/IERC1820Registry.sol // From open https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/introspection/IERC1820Registry.sol pragma solidity ^0.6.0; /** * @dev Interface of the global ERC1820 Registry, as defined in the * https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register * implementers for interfaces in this registry, as well as query support. * * Implementers may be shared by multiple accounts, and can also implement more * than a single interface for each account. Contracts can implement interfaces * for themselves, but externally-owned accounts (EOA) must delegate this to a * contract. * * {IERC165} interfaces can also be queried via the registry. * * For an in-depth explanation and source code analysis, see the EIP text. */ interface IERC1820Registry { /** * @dev Sets `newManager` as the manager for `account`. A manager of an * account is able to set interface implementers for it. * * By default, each account is its own manager. Passing a value of `0x0` in * `newManager` will reset the manager to this initial state. * * Emits a {ManagerChanged} event. * * Requirements: * * - the caller must be the current manager for `account`. */ function setManager(address account, address newManager) external; /** * @dev Returns the manager for `account`. * * See {setManager}. */ function getManager(address account) external view returns (address); /** * @dev Sets the `implementer` contract as ``account``'s implementer for * `interfaceHash`. * * `account` being the zero address is an alias for the caller's address. * The zero address can also be used in `implementer` to remove an old one. * * See {interfaceHash} to learn how these are created. * * Emits an {InterfaceImplementerSet} event. * * Requirements: * * - the caller must be the current manager for `account`. * - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not * end in 28 zeroes). * - `implementer` must implement {IERC1820Implementer} and return true when * queried for support, unless `implementer` is the caller. See * {IERC1820Implementer-canImplementInterfaceForAddress}. */ function setInterfaceImplementer(address account, bytes32 interfaceHash, address implementer) external; /** * @dev Returns the implementer of `interfaceHash` for `account`. If no such * implementer is registered, returns the zero address. * * If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28 * zeroes), `account` will be queried for support of it. * * `account` being the zero address is an alias for the caller's address. */ function getInterfaceImplementer(address account, bytes32 interfaceHash) external view returns (address); /** * @dev Returns the interface hash for an `interfaceName`, as defined in the * corresponding * https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP]. */ function interfaceHash(string calldata interfaceName) external pure returns (bytes32); /** * @notice Updates the cache with whether the contract implements an ERC165 interface or not. * @param account Address of the contract for which to update the cache. * @param interfaceId ERC165 interface for which to update the cache. */ function updateERC165Cache(address account, bytes4 interfaceId) external; /** * @notice Checks whether a contract implements an ERC165 interface or not. * If the result is not cached a direct lookup on the contract address is performed. * If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling * {updateERC165Cache} with the contract address. * @param account Address of the contract to check. * @param interfaceId ERC165 interface to check. * @return True if `account` implements `interfaceId`, false otherwise. */ function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool); /** * @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache. * @param account Address of the contract to check. * @param interfaceId ERC165 interface to check. * @return True if `account` implements `interfaceId`, false otherwise. */ function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool); event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer); event ManagerChanged(address indexed account, address indexed newManager); } // File: contracts/interfaces/IERC777Sender.sol pragma solidity 0.6.7; // As defined in the 'ERC777TokensSender And The tokensToSend Hook' section of https://eips.ethereum.org/EIPS/eip-777 interface IERC777Sender { function tokensToSend(address operator, address from, address to, uint256 amount, bytes calldata data, bytes calldata operatorData) external; } // File: contracts/interfaces/IERC777Recipient.sol pragma solidity 0.6.7; // As defined in the 'ERC777TokensRecipient And The tokensReceived Hook' section of https://eips.ethereum.org/EIPS/eip-777 interface IERC777Recipient { function tokensReceived(address operator, address from, address to, uint256 amount, bytes calldata data, bytes calldata operatorData) external; } // File: contracts/thirdParty/SafeMath.sol // Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: contracts/libraries/LToken.sol pragma solidity 0.6.7; struct TokenState { uint256 totalSupply; mapping(address => uint256) balances; mapping(address => mapping(address => uint256)) approvals; mapping(address => mapping(address => bool)) authorizedOperators; address[] defaultOperators; mapping(address => bool) defaultOperatorIsRevoked; mapping(address => bool) minters; } library LToken { using SafeMath for uint256; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); event Sent(address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData); event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData); event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData); event AuthorizedOperator(address indexed operator, address indexed holder); event RevokedOperator(address indexed operator, address indexed holder); // Universal address as defined in Registry Contract Address section of https://eips.ethereum.org/EIPS/eip-1820 IERC1820Registry constant internal ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24); // precalculated hashes - see https://github.com/ethereum/solidity/issues/4024 // keccak256("ERC777TokensSender") bytes32 constant internal ERC777_TOKENS_SENDER_HASH = 0x29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe895; // keccak256("ERC777TokensRecipient") bytes32 constant internal ERC777_TOKENS_RECIPIENT_HASH = 0xb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b; modifier checkSenderNotOperator(address _operator) { require(_operator != msg.sender, "Cannot be operator for self"); _; } function initState(TokenState storage _tokenState, uint8 _decimals, uint256 _initialSupply) external { _tokenState.defaultOperators.push(address(this)); _tokenState.totalSupply = _initialSupply.mul(10**uint256(_decimals)); _tokenState.balances[msg.sender] = _tokenState.totalSupply; } function transferFrom(TokenState storage _tokenState, address _from, address _to, uint256 _value) external { _tokenState.approvals[_from][msg.sender] = _tokenState.approvals[_from][msg.sender].sub(_value, "Amount not approved"); doSend(_tokenState, msg.sender, _from, _to, _value, "", "", false); } function approve(TokenState storage _tokenState, address _spender, uint256 _value) external { require(_spender != address(0), "Cannot approve to zero address"); _tokenState.approvals[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); } function authorizeOperator(TokenState storage _tokenState, address _operator) checkSenderNotOperator(_operator) external { if (_operator == address(this)) _tokenState.defaultOperatorIsRevoked[msg.sender] = false; else _tokenState.authorizedOperators[_operator][msg.sender] = true; emit AuthorizedOperator(_operator, msg.sender); } function revokeOperator(TokenState storage _tokenState, address _operator) checkSenderNotOperator(_operator) external { if (_operator == address(this)) _tokenState.defaultOperatorIsRevoked[msg.sender] = true; else _tokenState.authorizedOperators[_operator][msg.sender] = false; emit RevokedOperator(_operator, msg.sender); } function authorizeMinter(TokenState storage _tokenState, address _minter) external { _tokenState.minters[_minter] = true; } function revokeMinter(TokenState storage _tokenState, address _minter) external { _tokenState.minters[_minter] = false; } function doMint(TokenState storage _tokenState, address _to, uint256 _amount) external { assert(_to != address(0)); _tokenState.totalSupply = _tokenState.totalSupply.add(_amount); _tokenState.balances[_to] = _tokenState.balances[_to].add(_amount); // From ERC777: The token contract MUST call the tokensReceived hook after updating the state. receiveHook(address(this), address(0), _to, _amount, "", "", true); emit Minted(address(this), _to, _amount, "", ""); emit Transfer(address(0), _to, _amount); } function doBurn(TokenState storage _tokenState, address _operator, address _from, uint256 _amount, bytes calldata _data, bytes calldata _operatorData) external { assert(_from != address(0)); // From ERC777: The token contract MUST call the tokensToSend hook before updating the state. sendHook(_operator, _from, address(0), _amount, _data, _operatorData); _tokenState.balances[_from] = _tokenState.balances[_from].sub(_amount, "Cannot burn more than balance"); _tokenState.totalSupply = _tokenState.totalSupply.sub(_amount); emit Burned(_operator, _from, _amount, _data, _operatorData); emit Transfer(_from, address(0), _amount); } function doSend(TokenState storage _tokenState, address _operator, address _from, address _to, uint256 _amount, bytes memory _data, bytes memory _operatorData, bool _enforceERC777) public { assert(_from != address(0)); require(_to != address(0), "Cannot send funds to 0 address"); // From ERC777: The token contract MUST call the tokensToSend hook before updating the state. sendHook(_operator, _from, _to, _amount, _data, _operatorData); _tokenState.balances[_from] = _tokenState.balances[_from].sub(_amount, "Amount exceeds available funds"); _tokenState.balances[_to] = _tokenState.balances[_to].add(_amount); emit Sent(_operator, _from, _to, _amount, _data, _operatorData); emit Transfer(_from, _to, _amount); // From ERC777: The token contract MUST call the tokensReceived hook after updating the state. receiveHook(_operator, _from, _to, _amount, _data, _operatorData, _enforceERC777); } function receiveHook(address _operator, address _from, address _to, uint256 _amount, bytes memory _data, bytes memory _operatorData, bool _enforceERC777) public { address implementer = ERC1820_REGISTRY.getInterfaceImplementer(_to, ERC777_TOKENS_RECIPIENT_HASH); if (implementer != address(0)) IERC777Recipient(implementer).tokensReceived(_operator, _from, _to, _amount, _data, _operatorData); else if (_enforceERC777) require(!isContract(_to), "Must be registered with ERC1820"); } function sendHook(address _operator, address _from, address _to, uint256 _amount, bytes memory _data, bytes memory _operatorData) public { address implementer = ERC1820_REGISTRY.getInterfaceImplementer(_from, ERC777_TOKENS_SENDER_HASH); if (implementer != address(0)) IERC777Sender(implementer).tokensToSend(_operator, _from, _to, _amount, _data, _operatorData); } function isContract(address _account) private view returns (bool isContract_) { uint256 size; assembly { size := extcodesize(_account) } isContract_ = size != 0; } } // File: contracts/Token.sol pragma solidity 0.6.7; /** * Implements ERC777 with ERC20 as defined in https://eips.ethereum.org/EIPS/eip-777, with minting support. * NOTE: Minting is internal only: derive from this contract according to usage. */ contract Token is IERC777, IERC20 { string private tokenName; string private tokenSymbol; uint8 constant private tokenDecimals = 18; uint256 constant private tokenGranularity = 1; TokenState public tokenState; // Universal address as defined in Registry Contract Address section of https://eips.ethereum.org/EIPS/eip-1820 IERC1820Registry constant internal ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24); // keccak256("ERC777Token") bytes32 constant internal ERC777_TOKEN_HASH = 0xac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054; // keccak256("ERC20Token") bytes32 constant internal ERC20_TOKEN_HASH = 0xaea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a; event AuthorizedMinter(address minter); event RevokedMinter(address minter); constructor(string memory _name, string memory _symbol, uint256 _initialSupply) internal { require(bytes(_name).length != 0, "Needs a name"); require(bytes(_symbol).length != 0, "Needs a symbol"); tokenName = _name; tokenSymbol = _symbol; LToken.initState(tokenState, tokenDecimals, _initialSupply); ERC1820_REGISTRY.setInterfaceImplementer(address(this), ERC777_TOKEN_HASH, address(this)); ERC1820_REGISTRY.setInterfaceImplementer(address(this), ERC20_TOKEN_HASH, address(this)); } modifier onlyOperator(address _holder) { require(isOperatorFor(msg.sender, _holder), "Not an operator"); _; } modifier onlyMinter { require(tokenState.minters[msg.sender], "onlyMinter"); _; } function name() external view override(IERC777, IERC20) returns (string memory name_) { name_ = tokenName; } function symbol() external view override(IERC777, IERC20) returns (string memory symbol_) { symbol_ = tokenSymbol; } function decimals() external view override returns (uint8 decimals_) { decimals_ = tokenDecimals; } function granularity() external view override returns (uint256 granularity_) { granularity_ = tokenGranularity; } function balanceOf(address _holder) external override(IERC777, IERC20) view returns (uint256 balance_) { balance_ = tokenState.balances[_holder]; } function transfer(address _to, uint256 _value) external override returns (bool success_) { doSend(msg.sender, msg.sender, _to, _value, "", "", false); success_ = true; } function transferFrom(address _from, address _to, uint256 _value) external override returns (bool success_) { LToken.transferFrom(tokenState, _from, _to, _value); success_ = true; } function approve(address _spender, uint256 _value) external override returns (bool success_) { LToken.approve(tokenState, _spender, _value); success_ = true; } function allowance(address _holder, address _spender) external view override returns (uint256 remaining_) { remaining_ = tokenState.approvals[_holder][_spender]; } function defaultOperators() external view override returns (address[] memory) { return tokenState.defaultOperators; } function authorizeOperator(address _operator) external override { LToken.authorizeOperator(tokenState, _operator); } function revokeOperator(address _operator) external override { LToken.revokeOperator(tokenState, _operator); } function send(address _to, uint256 _amount, bytes calldata _data) external override { doSend(msg.sender, msg.sender, _to, _amount, _data, "", true); } function operatorSend(address _from, address _to, uint256 _amount, bytes calldata _data, bytes calldata _operatorData) external override onlyOperator(_from) { doSend(msg.sender, _from, _to, _amount, _data, _operatorData, true); } function burn(uint256 _amount, bytes calldata _data) external override { doBurn(msg.sender, msg.sender, _amount, _data, ""); } function operatorBurn(address _from, uint256 _amount, bytes calldata _data, bytes calldata _operatorData) external override onlyOperator(_from) { doBurn(msg.sender, _from, _amount, _data, _operatorData); } function mint(address _to, uint256 _amount) external onlyMinter { LToken.doMint(tokenState, _to, _amount); } function totalSupply() external view override(IERC777, IERC20) returns (uint256 totalSupply_) { totalSupply_ = tokenState.totalSupply; } function isOperatorFor(address _operator, address _holder) public view override returns (bool isOperatorFor_) { isOperatorFor_ = (_operator == _holder || tokenState.authorizedOperators[_operator][_holder] || _operator == address(this) && !tokenState.defaultOperatorIsRevoked[_holder]); } function doSend(address _operator, address _from, address _to, uint256 _amount, bytes memory _data, bytes memory _operatorData, bool _enforceERC777) internal virtual { LToken.doSend(tokenState, _operator, _from, _to, _amount, _data, _operatorData, _enforceERC777); } function doBurn(address _operator, address _from, uint256 _amount, bytes memory _data, bytes memory _operatorData) internal { LToken.doBurn(tokenState, _operator, _from, _amount, _data, _operatorData); } function authorizeMinter(address _minter) internal { LToken.authorizeMinter(tokenState, _minter); emit AuthorizedMinter(_minter); } function revokeMinter(address _minter) internal { LToken.revokeMinter(tokenState, _minter); emit RevokedMinter(_minter); } } // File: contracts/Owned.sol pragma solidity 0.6.7; contract Owned { address public owner = msg.sender; event LogOwnershipTransferred(address indexed owner, address indexed newOwner); modifier onlyOwner { require(msg.sender == owner, "Sender must be owner"); _; } function setOwner(address _owner) external onlyOwner { require(_owner != address(0), "Owner cannot be zero address"); emit LogOwnershipTransferred(owner, _owner); owner = _owner; } } // File: contracts/VOWToken.sol pragma solidity 0.6.7; /** * ERC777/20 contract which also: * - is owned * - supports proxying of own tokens (only if signed correctly) * - supports partner contracts, keyed by hash * - supports minting (only by owner approved contracts) * - has a USD price */ contract VOWToken is Token, IERC777Recipient, Owned { mapping (bytes32 => bool) public proxyProofs; uint256[2] public usdRate; address public usdRateSetter; mapping(bytes32 => address payable) public partnerContracts; // precalculated hash - see https://github.com/ethereum/solidity/issues/4024 // keccak256("ERC777TokensRecipient") bytes32 constant internal ERC777_TOKENS_RECIPIENT_HASH = 0xb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b; event LogUSDRateSetterSet(address indexed usdRateSetter); event LogUSDRateSet(uint256 numTokens, uint256 numUSD); event LogProxiedTokens(address indexed from, address indexed to, uint256 amount, bytes data, uint256 nonce, bytes proof); event LogPartnerContractSet(bytes32 indexed keyHash, address indexed partnerContract); event LogMintPermissionSet(address indexed contractAddress, bool canMint); constructor(string memory _name, string memory _symbol, uint256 _initialSupply, uint256[2] memory _initialUSDRate) public Token(_name, _symbol, _initialSupply) { doSetUSDRate(_initialUSDRate[0], _initialUSDRate[1]); ERC1820_REGISTRY.setInterfaceImplementer(address(this), ERC777_TOKENS_RECIPIENT_HASH, address(this)); } modifier onlyUSDRateSetter() { require(msg.sender == usdRateSetter, "onlyUSDRateSetter"); _; } modifier onlyOwnTokens { require(msg.sender == address(this), "onlyOwnTokens"); _; } modifier addressNotNull(address _address) { require(_address != address(0), "Address cannot be null"); _; } function tokensReceived(address /* _operator */, address /* _from */, address /* _to */, uint256 _amount, bytes calldata _data, bytes calldata /* _operatorData */) external override onlyOwnTokens { (address from, address to, uint256 amount, bytes memory data, uint256 nonce, bytes memory proof) = abi.decode(_data, (address, address, uint256, bytes, uint256, bytes)); checkProxying(from, to, amount, data, nonce, proof); if (_amount != 0) this.send(from, _amount, ""); this.operatorSend(from, to, amount, data, _data); emit LogProxiedTokens(from, to, amount, data, nonce, proof); } function setPartnerContract(bytes32 _keyHash, address payable _partnerContract) external onlyOwner addressNotNull(_partnerContract) { require(_keyHash != bytes32(0), "Missing key hash"); partnerContracts[_keyHash] = _partnerContract; emit LogPartnerContractSet(_keyHash, _partnerContract); } function setUSDRateSetter(address _usdRateSetter) external onlyOwner addressNotNull(_usdRateSetter) { usdRateSetter = _usdRateSetter; emit LogUSDRateSetterSet(_usdRateSetter); } function setUSDRate(uint256 _numTokens, uint256 _numUSD) external onlyUSDRateSetter { doSetUSDRate(_numTokens, _numUSD); emit LogUSDRateSet(_numTokens, _numUSD); } function setMintPermission(address _contract, bool _canMint) external onlyOwner addressNotNull(_contract) { if (_canMint) authorizeMinter(_contract); else revokeMinter(_contract); emit LogMintPermissionSet(_contract, _canMint); } function doSetUSDRate(uint256 _numTokens, uint256 _numUSD) private { require(_numTokens != 0, "numTokens cannot be zero"); require(_numUSD != 0, "numUSD cannot be zero"); usdRate = [_numTokens, _numUSD]; } function checkProxying(address _from, address _to, uint256 _amount, bytes memory _data, uint256 _nonce, bytes memory _proof) private { require(!proxyProofs[keccak256(_proof)], "Proxy proof not unique"); proxyProofs[keccak256(_proof)] = true; bytes32 hash = keccak256(abi.encodePacked(address(this), _from, _to, _amount, _data, _nonce)); address signer = ECDSA.recover(ECDSA.toEthSignedMessageHash(hash), _proof); require(signer == _from, "Bad signer"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint256[2]","name":"_initialUSDRate","type":"uint256[2]"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"minter","type":"address"}],"name":"AuthorizedMinter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"holder","type":"address"}],"name":"AuthorizedOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"canMint","type":"bool"}],"name":"LogMintPermissionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"LogOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"keyHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"partnerContract","type":"address"}],"name":"LogPartnerContractSet","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":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"proof","type":"bytes"}],"name":"LogProxiedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"numTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numUSD","type":"uint256"}],"name":"LogUSDRateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usdRateSetter","type":"address"}],"name":"LogUSDRateSetterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"RevokedMinter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"holder","type":"address"}],"name":"RevokedOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Sent","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":[{"internalType":"address","name":"_holder","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining_","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":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"authorizeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"decimals_","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultOperators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"granularity","outputs":[{"internalType":"uint256","name":"granularity_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_holder","type":"address"}],"name":"isOperatorFor","outputs":[{"internalType":"bool","name":"isOperatorFor_","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"name_","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_operatorData","type":"bytes"}],"name":"operatorBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_operatorData","type":"bytes"}],"name":"operatorSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"partnerContracts","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"proxyProofs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bool","name":"_canMint","type":"bool"}],"name":"setMintPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_keyHash","type":"bytes32"},{"internalType":"address payable","name":"_partnerContract","type":"address"}],"name":"setPartnerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokens","type":"uint256"},{"internalType":"uint256","name":"_numUSD","type":"uint256"}],"name":"setUSDRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdRateSetter","type":"address"}],"name":"setUSDRateSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenState","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokensReceived","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"totalSupply_","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":"success_","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":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usdRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdRateSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405233600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200005257600080fd5b506040516200410138038062004101833981810160405260a08110156200007857600080fd5b81019080805160405193929190846401000000008211156200009957600080fd5b83820191506020820185811115620000b057600080fd5b8251866001820283011164010000000082111715620000ce57600080fd5b8083526020830192505050908051906020019080838360005b8381101562000104578082015181840152602081019050620000e7565b50505050905090810190601f168015620001325780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200015657600080fd5b838201915060208201858111156200016d57600080fd5b82518660018202830111640100000000821117156200018b57600080fd5b8083526020830192505050908051906020019080838360005b83811015620001c1578082015181840152602081019050620001a4565b50505050905090810190601f168015620001ef5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291909190505083838360008351141562000280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e656564732061206e616d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b600082511415620002f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6565647320612073796d626f6c00000000000000000000000000000000000081525060200191505060405180910390fd5b8260009080519060200190620003119291906200082f565b5081600190805190602001906200032a9291906200082f565b507360ca4ec4412a3b319f4bd6366bb836395336b39763bbce8abb60026012846040518463ffffffff1660e01b8152600401808481526020018360ff1660ff168152602001828152602001935050505060006040518083038186803b1580156200039357600080fd5b505af4158015620003a8573d6000803e3d6000fd5b50505050731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460001b306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156200049f57600080fd5b505af1158015620004b4573d6000803e3d6000fd5b50505050731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60001b306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015620005ab57600080fd5b505af1158015620005c0573d6000803e3d6000fd5b50505050505050620005fd81600060028110620005d957fe5b602002015182600160028110620005ec57fe5b60200201516200071360201b60201c565b731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60001b306040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015620006f057600080fd5b505af115801562000705573d6000803e3d6000fd5b505050505050505062000923565b60008214156200078b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e756d546f6b656e732063616e6e6f74206265207a65726f000000000000000081525060200191505060405180910390fd5b600081141562000803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e756d5553442063616e6e6f74206265207a65726f000000000000000000000081525060200191505060405180910390fd5b604051806040016040528083815260200182815250600b9060026200082a929190620008b6565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200087257805160ff1916838001178555620008a3565b82800160010185558215620008a3579182015b82811115620008a257825182559160200191906001019062000885565b5b509050620008b29190620008fb565b5090565b8260028101928215620008e8579160200282015b82811115620008e7578251825591602001919060010190620008ca565b5b509050620008f79190620008fb565b5090565b6200092091905b808211156200091c57600081600090555060010162000902565b5090565b90565b6137ce80620009336000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c80638da5cb5b1161010f578063b89f378a116100a2578063e90dd9e211610071578063e90dd9e214610cb9578063fad8b32a14610cd7578063fc673c4f14610d1b578063fe9d930314610e13576101e4565b8063b89f378a14610b37578063d95b637114610b81578063dd62ed3e14610bfd578063e47fca4e14610c75576101e4565b80639bd9bbc6116100de5780639bd9bbc614610970578063a04b1e9014610a13578063a9059cbb14610a63578063a9f83f8214610ac9576101e4565b80638da5cb5b146108195780638dfdd8a114610863578063959b8c3f146108a957806395d89b41146108ed576101e4565b8063313ce5671161018757806362ad1b831161015657806362ad1b83146106195780636eac7739146107315780636f54ed751461077f57806370a08231146107c1576101e4565b8063313ce567146105515780633c8585771461057557806340c10f19146105ad578063556f0dc7146105fb576101e4565b8063095ea7b3116101c3578063095ea7b31461040357806313af40351461046957806318160ddd146104ad57806323b872dd146104cb576101e4565b806223de29146101e957806306e485381461032157806306fdde0314610380575b600080fd5b61031f600480360360c08110156101ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460018302840111640100000000831117156102ba57600080fd5b9091929391929390803590602001906401000000008111156102db57600080fd5b8201836020820111156102ed57600080fd5b8035906020019184600183028401116401000000008311171561030f57600080fd5b9091929391929390505050610e96565b005b61032961147c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561036c578082015181840152602081019050610351565b505050509050019250505060405180910390f35b61038861150d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c85780820151818401526020810190506103ad565b50505050905090810190601f1680156103f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61044f6004803603604081101561041957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115af565b604051808215151515815260200191505060405180910390f35b6104ab6004803603602081101561047f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165f565b005b6104b5611885565b6040518082815260200191505060405180910390f35b610537600480360360608110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611892565b604051808215151515815260200191505060405180910390f35b610559611977565b604051808260ff1660ff16815260200191505060405180910390f35b6105ab6004803603604081101561058b57600080fd5b810190808035906020019092919080359060200190929190505050611980565b005b6105f9600480360360408110156105c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a90565b005b610603611bfa565b6040518082815260200191505060405180910390f35b61072f600480360360a081101561062f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561069657600080fd5b8201836020820111156106a857600080fd5b803590602001918460018302840111640100000000831117156106ca57600080fd5b9091929391929390803590602001906401000000008111156106eb57600080fd5b8201836020820111156106fd57600080fd5b8035906020019184600183028401116401000000008311171561071f57600080fd5b9091929391929390505050611c03565b005b61077d6004803603604081101561074757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d22565b005b6107ab6004803603602081101561079557600080fd5b8101908080359060200190929190505050611f9d565b6040518082815260200191505060405180910390f35b610803600480360360208110156107d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fb5565b6040518082815260200191505060405180910390f35b610821612001565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61088f6004803603602081101561087957600080fd5b8101908080359060200190929190505050612027565b604051808215151515815260200191505060405180910390f35b6108eb600480360360208110156108bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612047565b005b6108f56120e6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561093557808201518184015260208101905061091a565b50505050905090810190601f1680156109625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a116004803603606081101561098657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109cd57600080fd5b8201836020820111156109df57600080fd5b80359060200191846001830284011164010000000083111715610a0157600080fd5b9091929391929390505050612188565b005b610a6160048036036040811015610a2957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506121f1565b005b610aaf60048036036040811015610a7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123cd565b604051808215151515815260200191505060405180910390f35b610af560048036036020811015610adf57600080fd5b8101908080359060200190929190505050612407565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b3f61243a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610be360048036036040811015610b9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612460565b604051808215151515815260200191505060405180910390f35b610c5f60048036036040811015610c1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125bc565b6040518082815260200191505060405180910390f35b610cb760048036036020811015610c8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612645565b005b610cc1612834565b6040518082815260200191505060405180910390f35b610d1960048036036020811015610ced57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612840565b005b610e1160048036036080811015610d3157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610d7857600080fd5b820183602082011115610d8a57600080fd5b80359060200191846001830284011164010000000083111715610dac57600080fd5b909192939192939080359060200190640100000000811115610dcd57600080fd5b820183602082011115610ddf57600080fd5b80359060200191846001830284011164010000000083111715610e0157600080fd5b90919293919293905050506128df565b005b610e9460048036036040811015610e2957600080fd5b810190808035906020019092919080359060200190640100000000811115610e5057600080fd5b820183602082011115610e6257600080fd5b80359060200191846001830284011164010000000083111715610e8457600080fd5b90919293919293905050506129fa565b005b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6f6e6c794f776e546f6b656e730000000000000000000000000000000000000081525060200191505060405180910390fd5b6000806000606060006060898960c0811015610f5257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610fb957600080fd5b820183602082011115610fcb57600080fd5b80359060200191846001830284011164010000000083111715610fed57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561105a57600080fd5b82018360208201111561106c57600080fd5b8035906020019184600183028401116401000000008311171561108e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050509550955095509550955095506110f5868686868686612a5f565b60008b146111b1573073ffffffffffffffffffffffffffffffffffffffff16639bd9bbc6878d6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001806020018281038252600081526020016020019350505050600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505b3073ffffffffffffffffffffffffffffffffffffffff166362ad1b83878787878f8f6040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018060200180602001838103835286818151815260200191508051906020019080838360005b83811015611290578082015181840152602081019050611275565b50505050905090810190601f1680156112bd5780820380516001836020036101000a031916815260200191505b508381038252858582818152602001925080828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f97823a4edabb1c2f3fb4ee63160c204ef488f4d2282a0bdd4290cdde86c708ec86868686604051808581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b838110156113c85780820151818401526020810190506113ad565b50505050905090810190601f1680156113f55780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561142e578082015181840152602081019050611413565b50505050905090810190601f16801561145b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a35050505050505050505050505050565b6060600260040180548060200260200160405190810160405280929190818152602001828054801561150357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116114b9575b5050505050905090565b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115a55780601f1061157a576101008083540402835291602001916115a5565b820191906000526020600020905b81548152906001019060200180831161158857829003601f168201915b5050505050905090565b60007360ca4ec4412a3b319f4bd6366bb836395336b397638bde1d78600285856040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561163d57600080fd5b505af4158015611651573d6000803e3d6000fd5b505050506001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4f776e65722063616e6e6f74206265207a65726f20616464726573730000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdb6d05f3295cede580affa301a1eb5297528f3b3f6a56b075887ce6f61c45f2160405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260000154905090565b60007360ca4ec4412a3b319f4bd6366bb836395336b397632e6a560960028686866040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060006040518083038186803b15801561195457600080fd5b505af4158015611968573d6000803e3d6000fd5b50505050600190509392505050565b60006012905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6f6e6c795553445261746553657474657200000000000000000000000000000081525060200191505060405180910390fd5b611a4d8282612d19565b7fcc375191748c1570d8cc8f49eb8a77b2d411830d2c609dbc4ea2b29dc56f68dc8282604051808381526020018281526020019250505060405180910390a15050565b600260060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c794d696e7465720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7360ca4ec4412a3b319f4bd6366bb836395336b397636eeb9e0f600284846040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b158015611bde57600080fd5b505af4158015611bf2573d6000803e3d6000fd5b505050505050565b60006001905090565b86611c0e3382612460565b611c80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e206f70657261746f72000000000000000000000000000000000081525060200191505060405180910390fd5b611d183389898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001612e31565b5050505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b6000801b831415611f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d697373696e67206b657920686173680000000000000000000000000000000081525060200191505060405180910390fd5b81600e600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16837f0ada7f316e371f763b084899958ab4f7c3eac45ded64a568087925f39d47bf2360405160405180910390a3505050565b600b8160028110611faa57fe5b016000915090505481565b6000600260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b7360ca4ec4412a3b319f4bd6366bb836395336b39763528aa17e6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156120cb57600080fd5b505af41580156120df573d6000803e3d6000fd5b5050505050565b606060018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561217e5780601f106121535761010080835404028352916020019161217e565b820191906000526020600020905b81548152906001019060200180831161216157829003601f168201915b5050505050905090565b6121eb3333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050604051806020016040528060008152506001612e31565b50505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612358576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b811561236c576123678361302c565b612376565b6123758361312e565b5b8273ffffffffffffffffffffffffffffffffffffffff167ff2bddba4dbca95e342065cf53fe3ea5804c27f6d053eea0ef7c8d913a4081acb83604051808215151515815260200191505060405180910390a2505050565b60006123fd3333858560405180602001604052806000815250604051806020016040528060008152506000612e31565b6001905092915050565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806125255750600260030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125b457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125b35750600260050160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b905092915050565b60006002800160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b81600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167f5ff20ba4bf41ff0e6c7e644533c6174e64a3126129f9016279fcdf8b5575efec60405160405180910390a25050565b60028060000154905081565b7360ca4ec4412a3b319f4bd6366bb836395336b39763a77f752c6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156128c457600080fd5b505af41580156128d8573d6000803e3d6000fd5b5050505050565b856128ea3382612460565b61295c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e206f70657261746f72000000000000000000000000000000000081525060200191505060405180910390fd5b6129f133888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613230565b50505050505050565b612a5a33338585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250613230565b505050565b600a60008280519060200120815260200190815260200160002060009054906101000a900460ff1615612afa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f50726f78792070726f6f66206e6f7420756e697175650000000000000000000081525060200191505060405180910390fd5b6001600a60008380519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055506000308787878787604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140184815260200183805190602001908083835b60208310612c105780518252602082019150602081019050602083039250612bed565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200196505050505050506040516020818303038152906040528051906020012090506000612c6c612c66836133e9565b84613441565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f426164207369676e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5050505050505050565b6000821415612d90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e756d546f6b656e732063616e6e6f74206265207a65726f000000000000000081525060200191505060405180910390fd5b6000811415612e07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e756d5553442063616e6e6f74206265207a65726f000000000000000000000081525060200191505060405180910390fd5b604051806040016040528083815260200182815250600b906002612e2c9291906136ef565b505050565b7360ca4ec4412a3b319f4bd6366bb836395336b39763b750dc466002898989898989896040518963ffffffff1660e01b8152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019080838360005b83811015612f53578082015181840152602081019050612f38565b50505050905090810190601f168015612f805780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015612fb9578082015181840152602081019050612f9e565b50505050905090810190601f168015612fe65780820380516001836020036101000a031916815260200191505b509a505050505050505050505060006040518083038186803b15801561300b57600080fd5b505af415801561301f573d6000803e3d6000fd5b5050505050505050505050565b7360ca4ec4412a3b319f4bd6366bb836395336b397638c96a55d6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156130b057600080fd5b505af41580156130c4573d6000803e3d6000fd5b505050507fa1d81f39379cbd3fc0b41e0f22ac869eee88b0a7f221bf424e2db0eadb900b7b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b7360ca4ec4412a3b319f4bd6366bb836395336b3976353a7daf46002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156131b257600080fd5b505af41580156131c6573d6000803e3d6000fd5b505050507f8e768d7a5530d1f68e76ded405597f5ab4e340da31733f8704353e0b62b911f881604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b7360ca4ec4412a3b319f4bd6366bb836395336b3976324394467600287878787876040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156133145780820151818401526020810190506132f9565b50505050905090810190601f1680156133415780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561337a57808201518184015260208101905061335f565b50505050905090810190601f1680156133a75780820380516001836020036101000a031916815260200191505b509850505050505050505060006040518083038186803b1580156133ca57600080fd5b505af41580156133de573d6000803e3d6000fd5b505050505050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251146134ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45434453413a20696e76616c6964207369676e6174757265206c656e6774680081525060200191505060405180910390fd5b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115613553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137556022913960400191505060405180910390fd5b601b8160ff16101561356657601b810190505b601b8160ff161415801561357e5750601c8160ff1614155b156135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137776022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613633573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156136e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45434453413a20696e76616c6964207369676e6174757265000000000000000081525060200191505060405180910390fd5b8094505050505092915050565b826002810192821561371e579160200282015b8281111561371d578251825591602001919060010190613702565b5b50905061372b919061372f565b5090565b61375191905b8082111561374d576000816000905550600101613735565b5090565b9056fe45434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a26469706673582212209fcdd8e88642d57d0a9a6eef9ede9d5da35ca30bda91f29450bb739684c5cf0f64736f6c6343000607003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000441e9db6000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003566f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003564f570000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e45760003560e01c80638da5cb5b1161010f578063b89f378a116100a2578063e90dd9e211610071578063e90dd9e214610cb9578063fad8b32a14610cd7578063fc673c4f14610d1b578063fe9d930314610e13576101e4565b8063b89f378a14610b37578063d95b637114610b81578063dd62ed3e14610bfd578063e47fca4e14610c75576101e4565b80639bd9bbc6116100de5780639bd9bbc614610970578063a04b1e9014610a13578063a9059cbb14610a63578063a9f83f8214610ac9576101e4565b80638da5cb5b146108195780638dfdd8a114610863578063959b8c3f146108a957806395d89b41146108ed576101e4565b8063313ce5671161018757806362ad1b831161015657806362ad1b83146106195780636eac7739146107315780636f54ed751461077f57806370a08231146107c1576101e4565b8063313ce567146105515780633c8585771461057557806340c10f19146105ad578063556f0dc7146105fb576101e4565b8063095ea7b3116101c3578063095ea7b31461040357806313af40351461046957806318160ddd146104ad57806323b872dd146104cb576101e4565b806223de29146101e957806306e485381461032157806306fdde0314610380575b600080fd5b61031f600480360360c08110156101ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460018302840111640100000000831117156102ba57600080fd5b9091929391929390803590602001906401000000008111156102db57600080fd5b8201836020820111156102ed57600080fd5b8035906020019184600183028401116401000000008311171561030f57600080fd5b9091929391929390505050610e96565b005b61032961147c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561036c578082015181840152602081019050610351565b505050509050019250505060405180910390f35b61038861150d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c85780820151818401526020810190506103ad565b50505050905090810190601f1680156103f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61044f6004803603604081101561041957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115af565b604051808215151515815260200191505060405180910390f35b6104ab6004803603602081101561047f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165f565b005b6104b5611885565b6040518082815260200191505060405180910390f35b610537600480360360608110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611892565b604051808215151515815260200191505060405180910390f35b610559611977565b604051808260ff1660ff16815260200191505060405180910390f35b6105ab6004803603604081101561058b57600080fd5b810190808035906020019092919080359060200190929190505050611980565b005b6105f9600480360360408110156105c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a90565b005b610603611bfa565b6040518082815260200191505060405180910390f35b61072f600480360360a081101561062f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561069657600080fd5b8201836020820111156106a857600080fd5b803590602001918460018302840111640100000000831117156106ca57600080fd5b9091929391929390803590602001906401000000008111156106eb57600080fd5b8201836020820111156106fd57600080fd5b8035906020019184600183028401116401000000008311171561071f57600080fd5b9091929391929390505050611c03565b005b61077d6004803603604081101561074757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d22565b005b6107ab6004803603602081101561079557600080fd5b8101908080359060200190929190505050611f9d565b6040518082815260200191505060405180910390f35b610803600480360360208110156107d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fb5565b6040518082815260200191505060405180910390f35b610821612001565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61088f6004803603602081101561087957600080fd5b8101908080359060200190929190505050612027565b604051808215151515815260200191505060405180910390f35b6108eb600480360360208110156108bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612047565b005b6108f56120e6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561093557808201518184015260208101905061091a565b50505050905090810190601f1680156109625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a116004803603606081101561098657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109cd57600080fd5b8201836020820111156109df57600080fd5b80359060200191846001830284011164010000000083111715610a0157600080fd5b9091929391929390505050612188565b005b610a6160048036036040811015610a2957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506121f1565b005b610aaf60048036036040811015610a7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123cd565b604051808215151515815260200191505060405180910390f35b610af560048036036020811015610adf57600080fd5b8101908080359060200190929190505050612407565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b3f61243a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610be360048036036040811015610b9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612460565b604051808215151515815260200191505060405180910390f35b610c5f60048036036040811015610c1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125bc565b6040518082815260200191505060405180910390f35b610cb760048036036020811015610c8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612645565b005b610cc1612834565b6040518082815260200191505060405180910390f35b610d1960048036036020811015610ced57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612840565b005b610e1160048036036080811015610d3157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610d7857600080fd5b820183602082011115610d8a57600080fd5b80359060200191846001830284011164010000000083111715610dac57600080fd5b909192939192939080359060200190640100000000811115610dcd57600080fd5b820183602082011115610ddf57600080fd5b80359060200191846001830284011164010000000083111715610e0157600080fd5b90919293919293905050506128df565b005b610e9460048036036040811015610e2957600080fd5b810190808035906020019092919080359060200190640100000000811115610e5057600080fd5b820183602082011115610e6257600080fd5b80359060200191846001830284011164010000000083111715610e8457600080fd5b90919293919293905050506129fa565b005b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6f6e6c794f776e546f6b656e730000000000000000000000000000000000000081525060200191505060405180910390fd5b6000806000606060006060898960c0811015610f5257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610fb957600080fd5b820183602082011115610fcb57600080fd5b80359060200191846001830284011164010000000083111715610fed57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561105a57600080fd5b82018360208201111561106c57600080fd5b8035906020019184600183028401116401000000008311171561108e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050509550955095509550955095506110f5868686868686612a5f565b60008b146111b1573073ffffffffffffffffffffffffffffffffffffffff16639bd9bbc6878d6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001806020018281038252600081526020016020019350505050600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505050505b3073ffffffffffffffffffffffffffffffffffffffff166362ad1b83878787878f8f6040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018060200180602001838103835286818151815260200191508051906020019080838360005b83811015611290578082015181840152602081019050611275565b50505050905090810190601f1680156112bd5780820380516001836020036101000a031916815260200191505b508381038252858582818152602001925080828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f97823a4edabb1c2f3fb4ee63160c204ef488f4d2282a0bdd4290cdde86c708ec86868686604051808581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b838110156113c85780820151818401526020810190506113ad565b50505050905090810190601f1680156113f55780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561142e578082015181840152602081019050611413565b50505050905090810190601f16801561145b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a35050505050505050505050505050565b6060600260040180548060200260200160405190810160405280929190818152602001828054801561150357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116114b9575b5050505050905090565b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115a55780601f1061157a576101008083540402835291602001916115a5565b820191906000526020600020905b81548152906001019060200180831161158857829003601f168201915b5050505050905090565b60007360ca4ec4412a3b319f4bd6366bb836395336b397638bde1d78600285856040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561163d57600080fd5b505af4158015611651573d6000803e3d6000fd5b505050506001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4f776e65722063616e6e6f74206265207a65726f20616464726573730000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdb6d05f3295cede580affa301a1eb5297528f3b3f6a56b075887ce6f61c45f2160405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260000154905090565b60007360ca4ec4412a3b319f4bd6366bb836395336b397632e6a560960028686866040518563ffffffff1660e01b8152600401808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060006040518083038186803b15801561195457600080fd5b505af4158015611968573d6000803e3d6000fd5b50505050600190509392505050565b60006012905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6f6e6c795553445261746553657474657200000000000000000000000000000081525060200191505060405180910390fd5b611a4d8282612d19565b7fcc375191748c1570d8cc8f49eb8a77b2d411830d2c609dbc4ea2b29dc56f68dc8282604051808381526020018281526020019250505060405180910390a15050565b600260060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c794d696e7465720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7360ca4ec4412a3b319f4bd6366bb836395336b397636eeb9e0f600284846040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b158015611bde57600080fd5b505af4158015611bf2573d6000803e3d6000fd5b505050505050565b60006001905090565b86611c0e3382612460565b611c80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e206f70657261746f72000000000000000000000000000000000081525060200191505060405180910390fd5b611d183389898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001612e31565b5050505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b6000801b831415611f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d697373696e67206b657920686173680000000000000000000000000000000081525060200191505060405180910390fd5b81600e600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16837f0ada7f316e371f763b084899958ab4f7c3eac45ded64a568087925f39d47bf2360405160405180910390a3505050565b600b8160028110611faa57fe5b016000915090505481565b6000600260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b7360ca4ec4412a3b319f4bd6366bb836395336b39763528aa17e6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156120cb57600080fd5b505af41580156120df573d6000803e3d6000fd5b5050505050565b606060018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561217e5780601f106121535761010080835404028352916020019161217e565b820191906000526020600020905b81548152906001019060200180831161216157829003601f168201915b5050505050905090565b6121eb3333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050604051806020016040528060008152506001612e31565b50505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612358576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b811561236c576123678361302c565b612376565b6123758361312e565b5b8273ffffffffffffffffffffffffffffffffffffffff167ff2bddba4dbca95e342065cf53fe3ea5804c27f6d053eea0ef7c8d913a4081acb83604051808215151515815260200191505060405180910390a2505050565b60006123fd3333858560405180602001604052806000815250604051806020016040528060008152506000612e31565b6001905092915050565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806125255750600260030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125b457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125b35750600260050160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b905092915050565b60006002800160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53656e646572206d757374206265206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416464726573732063616e6e6f74206265206e756c6c0000000000000000000081525060200191505060405180910390fd5b81600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167f5ff20ba4bf41ff0e6c7e644533c6174e64a3126129f9016279fcdf8b5575efec60405160405180910390a25050565b60028060000154905081565b7360ca4ec4412a3b319f4bd6366bb836395336b39763a77f752c6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156128c457600080fd5b505af41580156128d8573d6000803e3d6000fd5b5050505050565b856128ea3382612460565b61295c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e206f70657261746f72000000000000000000000000000000000081525060200191505060405180910390fd5b6129f133888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613230565b50505050505050565b612a5a33338585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250613230565b505050565b600a60008280519060200120815260200190815260200160002060009054906101000a900460ff1615612afa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f50726f78792070726f6f66206e6f7420756e697175650000000000000000000081525060200191505060405180910390fd5b6001600a60008380519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055506000308787878787604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140184815260200183805190602001908083835b60208310612c105780518252602082019150602081019050602083039250612bed565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200196505050505050506040516020818303038152906040528051906020012090506000612c6c612c66836133e9565b84613441565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f426164207369676e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5050505050505050565b6000821415612d90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e756d546f6b656e732063616e6e6f74206265207a65726f000000000000000081525060200191505060405180910390fd5b6000811415612e07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e756d5553442063616e6e6f74206265207a65726f000000000000000000000081525060200191505060405180910390fd5b604051806040016040528083815260200182815250600b906002612e2c9291906136ef565b505050565b7360ca4ec4412a3b319f4bd6366bb836395336b39763b750dc466002898989898989896040518963ffffffff1660e01b8152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019080838360005b83811015612f53578082015181840152602081019050612f38565b50505050905090810190601f168015612f805780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015612fb9578082015181840152602081019050612f9e565b50505050905090810190601f168015612fe65780820380516001836020036101000a031916815260200191505b509a505050505050505050505060006040518083038186803b15801561300b57600080fd5b505af415801561301f573d6000803e3d6000fd5b5050505050505050505050565b7360ca4ec4412a3b319f4bd6366bb836395336b397638c96a55d6002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156130b057600080fd5b505af41580156130c4573d6000803e3d6000fd5b505050507fa1d81f39379cbd3fc0b41e0f22ac869eee88b0a7f221bf424e2db0eadb900b7b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b7360ca4ec4412a3b319f4bd6366bb836395336b3976353a7daf46002836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b1580156131b257600080fd5b505af41580156131c6573d6000803e3d6000fd5b505050507f8e768d7a5530d1f68e76ded405597f5ab4e340da31733f8704353e0b62b911f881604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b7360ca4ec4412a3b319f4bd6366bb836395336b3976324394467600287878787876040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156133145780820151818401526020810190506132f9565b50505050905090810190601f1680156133415780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561337a57808201518184015260208101905061335f565b50505050905090810190601f1680156133a75780820380516001836020036101000a031916815260200191505b509850505050505050505060006040518083038186803b1580156133ca57600080fd5b505af41580156133de573d6000803e3d6000fd5b505050505050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251146134ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45434453413a20696e76616c6964207369676e6174757265206c656e6774680081525060200191505060405180910390fd5b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115613553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137556022913960400191505060405180910390fd5b601b8160ff16101561356657601b810190505b601b8160ff161415801561357e5750601c8160ff1614155b156135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137776022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613633573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156136e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45434453413a20696e76616c6964207369676e6174757265000000000000000081525060200191505060405180910390fd5b8094505050505092915050565b826002810192821561371e579160200282015b8281111561371d578251825591602001919060010190613702565b5b50905061372b919061372f565b5090565b61375191905b8082111561374d576000816000905550600101613735565b5090565b9056fe45434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a26469706673582212209fcdd8e88642d57d0a9a6eef9ede9d5da35ca30bda91f29450bb739684c5cf0f64736f6c63430006070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000441e9db6000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003566f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003564f570000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Vow
Arg [1] : _symbol (string): VOW
Arg [2] : _initialSupply (uint256): 1142857142
Arg [3] : _initialUSDRate (uint256[2]): 5,1
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 00000000000000000000000000000000000000000000000000000000441e9db6
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 566f770000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 564f570000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
32465:4025:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32465:4025:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;34063:656:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34063:656:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;34063:656:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34063:656:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;34063:656:0;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;34063:656:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34063:656:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;34063:656:0;;;;;;;;;;;;:::i;:::-;;28884:148;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;28884:148:0;;;;;;;;;;;;;;;;;27296:139;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;27296:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28488:190;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28488:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31927:211;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;31927:211:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;30281:167;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28270:212;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28270:212:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27594:130;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35276:191;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35276:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30146:129;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30146:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27730:144;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29495:255;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29495:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29495:255:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29495:255:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29495:255:0;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29495:255:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29495:255:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29495:255:0;;;;;;;;;;;;:::i;:::-;;34725:329;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34725:329:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32573:25;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;32573:25:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27880:178;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27880:178:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31704:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32524:44;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;32524:44:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29038:137;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29038:137:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;27441:147;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;27441:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29318:171;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29318:171:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29318:171:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29318:171:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29318:171:0;;;;;;;;;;;;:::i;:::-;;35473:281;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35473:281:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28064:200;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28064:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32636:59;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;32636:59:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32603:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30454:327;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30454:327:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28684:194;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28684:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35060:210;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35060:210:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;25882:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29181:131;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29181:131:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;29909:231;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29909:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29909:231:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29909:231:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29909:231:0;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29909:231:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29909:231:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29909:231:0;;;;;;;;;;;;:::i;:::-;;29756:147;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;29756:147:0;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;29756:147:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29756:147:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29756:147:0;;;;;;;;;;;;:::i;:::-;;34063:656;33894:4;33872:27;;:10;:27;;;33864:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34292:12:::1;34306:10:::0;34318:14:::1;34334:17;34353:13;34368:18;34410:5;;15:3:-1;10;7:12;4:2;;;32:1;29::::0;22:12:::1;4:2;34399:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49::::0;42:12:::1;8:2;34399:69:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61::::0;54:12:::1;8:2;34399:69:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128::::0;121:12:::1;8:2;34399:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;34399:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49::::0;42:12:::1;8:2;34399:69:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61::::0;54:12:::1;8:2;34399:69:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128::::0;121:12:::1;8:2;34399:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;34399:69:0;;;;;;;;;;;;;;34291:177;;;;;;;;;;;;34475:51;34489:4;34495:2;34499:6;34507:4;34513:5;34520;34475:13;:51::i;:::-;34550:1;34539:7;:12;34535:53;;34560:4;:9;;;34570:4;34576:7;34560:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34560:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34560:28:0;;;;34535:53;34597:4;:17;;;34615:4;34621:2;34625:6;34633:4;34639:5;;34597:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;34597:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;34597:48:0;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34597:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34597:48:0;;;;34682:2;34659:54;;34676:4;34659:54;;;34686:6;34694:4;34700:5;34707;34659:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;34659:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;34659:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33924:1;;;;;;34063:656:::0;;;;;;;;:::o;28884:148::-;28964:16;28999:10;:27;;28992:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28884:148;:::o;27296:139::-;27381:19;27420:9;27412:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27296:139;:::o;28488:190::-;28581:13;28606:6;:14;28621:10;28633:8;28643:6;28606:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28606:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28606:44:0;;;;28668:4;28657:15;;28488:190;;;;:::o;31927:211::-;31877:5;;;;;;;;;;;31863:19;;:10;:19;;;31855:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32026:1:::1;32008:20;;:6;:20;;;;32000:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32104:6;32073:38;;32097:5;;;;;;;;;;;32073:38;;;;;;;;;;;;32126:6;32118:5;;:14;;;;;;;;;;;;;;;;;;31927:211:::0;:::o;30281:167::-;30373:20;30420:10;:22;;;30405:37;;30281:167;:::o;28270:212::-;28378:13;28403:6;:19;28423:10;28435:5;28442:3;28447:6;28403:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28403:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28403:51:0;;;;28472:4;28461:15;;28270:212;;;;;:::o;27594:130::-;27666:15;25825:2;27693:25;;27594:130;:::o;35276:191::-;33779:13;;;;;;;;;;;33765:27;;:10;:27;;;33757:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35380:33:::1;35393:10;35405:7;35380:12;:33::i;:::-;35427:34;35441:10;35453:7;35427:34;;;;;;;;;;;;;;;;;;;;;;;;35276:191:::0;;:::o;30146:129::-;27231:10;:18;;:30;27250:10;27231:30;;;;;;;;;;;;;;;;;;;;;;;;;27223:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30230:6:::1;:13;30244:10;30256:3;30261:7;30230:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30230:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30230:39:0;;;;30146:129:::0;;:::o;27730:144::-;27805:20;25876:1;27837:31;;27730:144;:::o;29495:255::-;29660:5;27122:34;27136:10;27148:7;27122:13;:34::i;:::-;27114:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29677:67:::1;29684:10;29696:5;29703:3;29708:7;29717:5;;29677:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29677:67:0;;;;;;29724:13;;29677:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29677:67:0;;;;;;29739:4;29677:6;:67::i;:::-;29495:255:::0;;;;;;;;:::o;34725:329::-;31877:5;;;;;;;;;;;31863:19;;:10;:19;;;31855:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34854:16:::1;34014:1;33994:22;;:8;:22;;;;33986:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34910:1:::2;34902:10:::0;::::2;34890:8;:22;;34882:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;34969:16;34940;:26;34957:8;34940:26;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;35031:16;34999:49;;35021:8;34999:49;;;;;;;;;;31914:1:::1;34725:329:::0;;:::o;32573:25::-;;;;;;;;;;;;;;;;;;:::o;27880:178::-;27985:16;28024:10;:19;;:28;28044:7;28024:28;;;;;;;;;;;;;;;;28013:39;;27880:178;;;:::o;31704:33::-;;;;;;;;;;;;;:::o;32524:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;29038:137::-;29122:6;:24;29147:10;29159:9;29122:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29122:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29122:47:0;;;;29038:137;:::o;27441:147::-;27528:21;27571:11;27561:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27441:147;:::o;29318:171::-;29422:61;29429:10;29441;29453:3;29458:7;29467:5;;29422:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29422:61:0;;;;;;;;;;;;;;;;;;29478:4;29422:6;:61::i;:::-;29318:171;;;;:::o;35473:281::-;31877:5;;;;;;;;;;;31863:19;;:10;:19;;;31855:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35583:9:::1;34014:1;33994:22;;:8;:22;;;;33986:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35608:8:::2;35604:89;;;35625:26;35641:9;35625:15;:26::i;:::-;35604:89;;;35670:23;35683:9;35670:12;:23::i;:::-;35604:89;35728:9;35707:41;;;35739:8;35707:41;;;;;;;;;;;;;;;;;;;;;;31914:1:::1;35473:281:::0;;:::o;28064:200::-;28153:13;28178:58;28185:10;28197;28209:3;28214:6;28178:58;;;;;;;;;;;;;;;;;;;;;;;;28230:5;28178:6;:58::i;:::-;28254:4;28243:15;;28064:200;;;;:::o;32636:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;32603:28::-;;;;;;;;;;;;;:::o;30454:327::-;30563:19;30625:7;30612:20;;:9;:20;;;:74;;;;30636:10;:30;;:41;30667:9;30636:41;;;;;;;;;;;;;;;:50;30678:7;30636:50;;;;;;;;;;;;;;;;;;;;;;;;;30612:74;:162;;;;30720:4;30699:26;;:9;:26;;;:75;;;;;30730:10;:35;;:44;30766:7;30730:44;;;;;;;;;;;;;;;;;;;;;;;;;30729:45;30699:75;30612:162;30594:181;;30454:327;;;;:::o;28684:194::-;28790:18;28833:10;:20;;:29;28854:7;28833:29;;;;;;;;;;;;;;;:39;28863:8;28833:39;;;;;;;;;;;;;;;;28820:52;;28684:194;;;;:::o;35060:210::-;31877:5;;;;;;;;;;;31863:19;;:10;:19;;;31855:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35159:14:::1;34014:1;33994:22;;:8;:22;;;;33986:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35201:14:::2;35185:13;;:30;;;;;;;;;;;;;;;;;;35249:14;35229:35;;;;;;;;;;;;31914:1:::1;35060:210:::0;:::o;25882:28::-;;;;;;;;;:::o;29181:131::-;29262:6;:21;29284:10;29296:9;29262:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29262:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29262:44:0;;;;29181:131;:::o;29909:231::-;30061:5;27122:34;27136:10;27148:7;27122:13;:34::i;:::-;27114:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30078:56:::1;30085:10;30097:5;30104:7;30113:5;;30078:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;30078:56:0;;;;;;30120:13;;30078:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;30078:56:0;;;;;;:6;:56::i;:::-;29909:231:::0;;;;;;;:::o;29756:147::-;29847:50;29854:10;29866;29878:7;29887:5;;29847:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29847:50:0;;;;;;;;;;;;;;;;;;:6;:50::i;:::-;29756:147;;;:::o;35997:490::-;36154:11;:30;36176:6;36166:17;;;;;;36154:30;;;;;;;;;;;;;;;;;;;;;36153:31;36145:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36251:4;36218:11;:30;36240:6;36230:17;;;;;;36218:30;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;36262:12;36312:4;36319:5;36326:3;36331:7;36340:5;36347:6;36287:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;36287:67:0;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;36287:67:0;;;36277:78;;;;;;36262:93;;36362:14;36379:57;36393:34;36422:4;36393:28;:34::i;:::-;36429:6;36379:13;:57::i;:::-;36362:74;;36461:5;36451:15;;:6;:15;;;36443:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35997:490;;;;;;;;:::o;35760:231::-;35864:1;35850:10;:15;;35842:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35920:1;35909:7;:12;;35901:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35954:31;;;;;;;;35965:10;35954:31;;;;35977:7;35954:31;;;:7;:31;;;;;;;:::i;:::-;;35760:231;;:::o;30787:294::-;30980:6;:13;30994:10;31006:9;31017:5;31024:3;31029:7;31038:5;31045:13;31060:14;30980:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;30980:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;30980:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30980:95:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30980:95:0;;;;30787:294;;;;;;;:::o;31312:154::-;31378:6;:22;31401:10;31413:7;31378:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31378:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31378:43:0;;;;31435:25;31452:7;31435:25;;;;;;;;;;;;;;;;;;;;;;31312:154;:::o;31472:145::-;31535:6;:19;31555:10;31567:7;31535:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31535:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31535:40:0;;;;31589:22;31603:7;31589:22;;;;;;;;;;;;;;;;;;;;;;31472:145;:::o;31087:219::-;31226:6;:13;31240:10;31252:9;31263:5;31270:7;31279:5;31286:13;31226:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;31226:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;31226:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31226:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31226:74:0;;;;31087:219;;;;;:::o;3737:269::-;3806:7;3992:4;3939:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3939:58:0;;;3929:69;;;;;;3922:76;;3737:269;;;:::o;1321:2142::-;1399:7;1482:2;1462:9;:16;:22;1458:96;;1501:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1458:96;1623:9;1643;1663:7;1915:4;1904:9;1900:20;1894:27;1889:32;;1961:4;1950:9;1946:20;1940:27;1935:32;;2015:4;2004:9;2000:20;1994:27;1991:1;1986:36;1981:41;;2945:66;2940:1;2932:10;;:79;2928:156;;;3028:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2928:156;3104:2;3100:1;:6;;;3096:19;;;3113:2;3108:7;;;;3096:19;3137:2;3132:1;:7;;;;:18;;;;;3148:2;3143:1;:7;;;;3132:18;3128:95;;;3167:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3128:95;3320:14;3337:24;3347:4;3353:1;3356;3359;3337:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3337:24:0;;;;;;;;3320:41;;3398:1;3380:20;;:6;:20;;;;3372:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3449:6;3442:13;;;;;;1321:2142;;;;:::o;32465:4025::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://9fcdd8e88642d57d0a9a6eef9ede9d5da35ca30bda91f29450bb739684c5cf0f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.