false
true
0

Contract Address Details

0xd18124029b167E03BBAaB8D5d6Fbb646aE020e1d

Contract Name
CoverERC20
Creator
0xdd79dc–34f4b0 at 0x75b002–627bdd
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
26353249
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
CoverERC20




Optimization enabled
true
Compiler version
v0.7.3+commit.9bfce1f6




Optimization runs
200
EVM Version
istanbul




Verified at
2026-04-22T20:40:02.528142Z

CoverERC20.sol

// SPDX-License-Identifier

pragma solidity ^0.7.3;

/**
 * @title Interface of Ownable
 */
interface IOwnable {
    function owner() external view returns (address);
}

// SPDX-License-Identifier

pragma solidity ^0.7.3;

/**
 * @title Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function symbol() external view returns (string memory);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function totalSupply() external view returns (uint256);

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool);
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);
}

// SPDX-License-Identifier

pragma solidity ^0.7.3;

/**
 * @title CoverERC20 contract interface, implements {IERC20}. See {CoverERC20}.
 * @author crypto-pumpkin@github
 */
interface ICoverERC20 is IERC20 {
    function burn(uint256 _amount) external returns (bool);

    /// @notice access restriction - owner (Cover)
    function mint(address _account, uint256 _amount) external returns (bool);
    function setSymbol(string calldata _symbol) external returns (bool);
    function burnByCover(address _account, uint256 _amount) external returns (bool);
}

// SPDX-License-Identifier

pragma solidity ^0.7.3;

/**
 * @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.
     */
    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.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        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.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// SPDX-License-Identifier

// solhint-disable-next-line compiler-version
pragma solidity ^0.7.3;


/**
 * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
 * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an
 * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
 * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
 * 
 * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
 * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.
 * 
 * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
 * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
 */
abstract contract Initializable {

    /**
     * @dev Indicates that the contract has been initialized.
     */
    bool private _initialized;

    /**
     * @dev Indicates that the contract is in the process of being initialized.
     */
    bool private _initializing;

    /**
     * @dev Modifier to protect an initializer function from being invoked twice.
     */
    modifier initializer() {
        require(_initializing || _isConstructor() || !_initialized, "Initializable: contract is already initialized");

        bool isTopLevelCall = !_initializing;
        if (isTopLevelCall) {
            _initializing = true;
            _initialized = true;
        }

        _;

        if (isTopLevelCall) {
            _initializing = false;
        }
    }

    /// @dev Returns true if and only if the function is running in the constructor
    function _isConstructor() private view returns (bool) {
        // extcodesize checks the size of the code stored in an address, and
        // address returns the current address. Since the code is still not
        // deployed when running a constructor, any checks on its code size will
        // yield zero, making it an effective way to detect if a contract is
        // under construction or not.
        address self = address(this);
        uint256 cs;
        // solhint-disable-next-line no-inline-assembly
        assembly { cs := extcodesize(self) }
        return cs == 0;
    }
}

// SPDX-License-Identifier

pragma solidity ^0.7.3;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 * @author crypto-pumpkin@github
 *
 * By initialization, the owner account will be the one that called initializeOwner. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Initializable {
    address private _owner;
    address private _newOwner;

    event OwnershipTransferInitiated(address indexed previousOwner, address indexed newOwner);
    event OwnershipTransferCompleted(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev COVER: Initializes the contract setting the deployer as the initial owner.
     */
    function initializeOwner() internal initializer {
        _owner = msg.sender;
        emit OwnershipTransferCompleted(address(0), _owner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferInitiated(_owner, newOwner);
        _newOwner = newOwner;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function claimOwnership() public virtual {
        require(_newOwner == msg.sender, "Ownable: caller is not the owner");
        emit OwnershipTransferCompleted(_owner, _newOwner);
        _owner = _newOwner;
    }
}

// SPDX-License-Identifier

pragma solidity ^0.7.3;

/**
 * @title CoverERC20 implements {ERC20} standards with expended features for COVER
 * @author crypto-pumpkin@github
 *
 * COVER's covToken Features:
 *  - Has mint and burn by owner (Cover contract) only feature.
 *  - No limit on the totalSupply.
 *  - Should only be created from Cover contract. See {Cover}
 */
contract CoverERC20 is ICoverERC20, Initializable, Ownable {
  using SafeMath for uint256;

  uint8 public constant decimals = 18;
  string public constant name = "covToken";

  // The symbol of  the contract
  string public override symbol;
  uint256 private _totalSupply;

  mapping(address => uint256) private balances;
  mapping(address => mapping (address => uint256)) private allowances;

  /// @notice Initialize, called once
  function initialize (string calldata _symbol) external initializer {
    symbol = _symbol;
    initializeOwner();
  }

  /// @notice Standard ERC20 function
  function balanceOf(address account) external view override returns (uint256) {
    return balances[account];
  }

  /// @notice Standard ERC20 function
  function totalSupply() external view override returns (uint256) {
    return _totalSupply;
  }

  /// @notice Standard ERC20 function
  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {
    _transfer(msg.sender, recipient, amount);
    return true;
  }

  /// @notice Standard ERC20 function
  function allowance(address owner, address spender) external view virtual override returns (uint256) {
    return allowances[owner][spender];
  }

  /// @notice Standard ERC20 function
  function approve(address spender, uint256 amount) external virtual override returns (bool) {
    _approve(msg.sender, spender, amount);
    return true;
  }

  /// @notice Standard ERC20 function
  function transferFrom(address sender, address recipient, uint256 amount)
    external virtual override returns (bool)
  {
    _transfer(sender, recipient, amount);
    _approve(sender, msg.sender, allowances[sender][msg.sender].sub(amount, "CoverERC20: transfer amount exceeds allowance"));
    return true;
  }

  /// @notice New ERC20 function
  function increaseAllowance(address spender, uint256 addedValue) public virtual override returns (bool) {
    _approve(msg.sender, spender, allowances[msg.sender][spender].add(addedValue));
    return true;
  }

  /// @notice New ERC20 function
  function decreaseAllowance(address spender, uint256 subtractedValue) public virtual override returns (bool) {
    _approve(msg.sender, spender, allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
    return true;
  }

  /// @notice COVER specific function
  function mint(address _account, uint256 _amount)
    external override onlyOwner returns (bool)
  {
    require(_account != address(0), "CoverERC20: mint to the zero address");

    _totalSupply = _totalSupply.add(_amount);
    balances[_account] = balances[_account].add(_amount);
    emit Transfer(address(0), _account, _amount);
    return true;
  }

  /// @notice COVER specific function
  function setSymbol(string calldata _symbol)
    external override onlyOwner returns (bool)
  {
    symbol = _symbol;
    return true;
  }

  /// @notice COVER specific function
  function burnByCover(address _account, uint256 _amount) external override onlyOwner returns (bool) {
    _burn(_account, _amount);
    return true;
  }

  /// @notice COVER specific function
  function burn(uint256 _amount) external override returns (bool) {
    _burn(msg.sender, _amount);
    return true;
  }

  function _transfer(address sender, address recipient, uint256 amount) internal {
    require(sender != address(0), "CoverERC20: transfer from the zero address");
    require(recipient != address(0), "CoverERC20: transfer to the zero address");

    balances[sender] = balances[sender].sub(amount, "CoverERC20: transfer amount exceeds balance");
    balances[recipient] = balances[recipient].add(amount);
    emit Transfer(sender, recipient, amount);
  }

  function _burn(address account, uint256 amount) internal {
    require(account != address(0), "CoverERC20: burn from the zero address");

    balances[account] = balances[account].sub(amount, "CoverERC20: burn amount exceeds balance");
    _totalSupply = _totalSupply.sub(amount);
    emit Transfer(account, address(0), amount);
  }

  function _approve(address owner, address spender, uint256 amount) internal {
    require(owner != address(0), "CoverERC20: approve from the zero address");
    require(spender != address(0), "CoverERC20: approve to the zero address");

    allowances[owner][spender] = amount;
    emit Approval(owner, spender, amount);
  }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"CoverERC20.sol":"CoverERC20"}}
              

Contract ABI

[{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferCompleted","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferInitiated","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"burn","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"burnByCover","inputs":[{"type":"address","name":"_account","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"claimOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"string","name":"_symbol","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"mint","inputs":[{"type":"address","name":"_account","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"setSymbol","inputs":[{"type":"string","name":"_symbol","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
              

Contract Creation Code

Verify & Publish
0x608060405234801561001057600080fd5b5061139c806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063b84c824611610071578063b84c82461461037a578063dd62ed3e146103ea578063f2fde38b14610418578063f62d18881461043e578063f8cc02df146104ae57610121565b806370a08231146102d05780638da5cb5b146102f657806395d89b411461031a578063a457c2d714610322578063a9059cbb1461034e57610121565b8063313ce567116100f4578063313ce56714610233578063395093511461025157806340c10f191461027d57806342966c68146102a95780634e71e0c8146102c657610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e6104da565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b0381351690602001356104fe565b604080519115158252519081900360200190f35b6101eb610514565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b0381358116916020810135909116906040013561051a565b61023b610583565b6040805160ff9092168252519081900360200190f35b6101cf6004803603604081101561026757600080fd5b506001600160a01b038135169060200135610588565b6101cf6004803603604081101561029357600080fd5b506001600160a01b0381351690602001356105be565b6101cf600480360360208110156102bf57600080fd5b50356106e7565b6102ce6106fb565b005b6101eb600480360360208110156102e657600080fd5b50356001600160a01b03166107b7565b6102fe6107d2565b604080516001600160a01b039092168252519081900360200190f35b61012e6107e7565b6101cf6004803603604081101561033857600080fd5b506001600160a01b038135169060200135610872565b6101cf6004803603604081101561036457600080fd5b506001600160a01b0381351690602001356108c1565b6101cf6004803603602081101561039057600080fd5b8101906020810181356401000000008111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460018302840111640100000000831117156103df57600080fd5b5090925090506108ce565b6101eb6004803603604081101561040057600080fd5b506001600160a01b038135811691602001351661092e565b6102ce6004803603602081101561042e57600080fd5b50356001600160a01b0316610959565b6102ce6004803603602081101561045457600080fd5b81019060208101813564010000000081111561046f57600080fd5b82018360208201111561048157600080fd5b803590602001918460018302840111640100000000831117156104a357600080fd5b509092509050610a52565b6101cf600480360360408110156104c457600080fd5b506001600160a01b038135169060200135610b0b565b6040518060400160405280600881526020016731b7bb2a37b5b2b760c11b81525081565b600061050b338484610b69565b50600192915050565b60035490565b6000610527848484610c55565b6105798433610574856040518060600160405280602d81526020016112ca602d91396001600160a01b038a1660009081526005602090815260408083203384529091529020549190610da7565b610b69565b5060019392505050565b601281565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161050b9185906105749086610e3e565b600080546201000090046001600160a01b03163314610612576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b6001600160a01b0383166106575760405162461bcd60e51b81526004018080602001828103825260248152602001806112256024913960400191505060405180910390fd5b6003546106649083610e3e565b6003556001600160a01b03831660009081526004602052604090205461068a9083610e3e565b6001600160a01b03841660008181526004602090815260408083209490945583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b60006106f33383610e9f565b506001919050565b6001546001600160a01b03163314610748576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169362010000909204909116917fe9a5158ac7353c7c7322ececc080bc8e89334efa5795b6e21e40eb266b0003d691a36001546000805462010000600160b01b0319166001600160a01b039092166201000002919091179055565b6001600160a01b031660009081526004602052604090205490565b6000546201000090046001600160a01b031690565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561086a5780601f1061083f5761010080835404028352916020019161086a565b820191906000526020600020905b81548152906001019060200180831161084d57829003601f168201915b505050505081565b600061050b338461057485604051806060016040528060258152602001611342602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190610da7565b600061050b338484610c55565b600080546201000090046001600160a01b03163314610922576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b610579600284846110cf565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6000546201000090046001600160a01b031633146109ac576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b6001600160a01b0381166109f15760405162461bcd60e51b81526004018080602001828103825260268152602001806111d86026913960400191505060405180910390fd5b600080546040516001600160a01b03808516936201000090930416917fb150023a879fd806e3599b6ca8ee3b60f0e360ab3846d128d67ebce1a391639a91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1680610a6b5750610a6b610f8f565b80610a79575060005460ff16155b610ab45760405162461bcd60e51b815260040180806020018281038252602e815260200180611273602e913960400191505060405180910390fd5b600054610100900460ff16158015610adf576000805460ff1961ff0019909116610100171660011790555b610aeb600284846110cf565b50610af4610f95565b8015610b06576000805461ff00191690555b505050565b600080546201000090046001600160a01b03163314610b5f576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b61050b8383610e9f565b6001600160a01b038316610bae5760405162461bcd60e51b81526004018080602001828103825260298152602001806112a16029913960400191505060405180910390fd5b6001600160a01b038216610bf35760405162461bcd60e51b81526004018080602001828103825260278152602001806111fe6027913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610c9a5760405162461bcd60e51b815260040180806020018281038252602a815260200180611249602a913960400191505060405180910390fd5b6001600160a01b038216610cdf5760405162461bcd60e51b81526004018080602001828103825260288152602001806111b06028913960400191505060405180910390fd5b610d1c816040518060600160405280602b8152602001611317602b91396001600160a01b0386166000908152600460205260409020549190610da7565b6001600160a01b038085166000908152600460205260408082209390935590841681522054610d4b9082610e3e565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610e365760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610dfb578181015183820152602001610de3565b50505050905090810190601f168015610e285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610e98576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610ee45760405162461bcd60e51b81526004018080602001828103825260268152602001806111636026913960400191505060405180910390fd5b610f2181604051806060016040528060278152602001611189602791396001600160a01b0385166000908152600460205260409020549190610da7565b6001600160a01b038316600090815260046020526040902055600354610f47908261108d565b6003556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b303b1590565b600054610100900460ff1680610fae5750610fae610f8f565b80610fbc575060005460ff16155b610ff75760405162461bcd60e51b815260040180806020018281038252602e815260200180611273602e913960400191505060405180910390fd5b600054610100900460ff16158015611022576000805460ff1961ff0019909116610100171660011790555b600080546201000033810262010000600160b01b0319909216919091178083556040519190046001600160a01b031691907fe9a5158ac7353c7c7322ececc080bc8e89334efa5795b6e21e40eb266b0003d6908290a3801561108a576000805461ff00191690555b50565b6000610e9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610da7565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106111105782800160ff1982351617855561113d565b8280016001018555821561113d579182015b8281111561113d578235825591602001919060010190611122565b5061114992915061114d565b5090565b5b80821115611149576000815560010161114e56fe436f76657245524332303a206275726e2066726f6d20746865207a65726f2061646472657373436f76657245524332303a206275726e20616d6f756e7420657863656564732062616c616e6365436f76657245524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373436f76657245524332303a20617070726f766520746f20746865207a65726f2061646472657373436f76657245524332303a206d696e7420746f20746865207a65726f2061646472657373436f76657245524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564436f76657245524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373436f76657245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f76657245524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205a1b85bd186bbccf0aea5142b0b82eef6ce2029412a61fc78cfa1ba33c68c9a864736f6c63430007030033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063b84c824611610071578063b84c82461461037a578063dd62ed3e146103ea578063f2fde38b14610418578063f62d18881461043e578063f8cc02df146104ae57610121565b806370a08231146102d05780638da5cb5b146102f657806395d89b411461031a578063a457c2d714610322578063a9059cbb1461034e57610121565b8063313ce567116100f4578063313ce56714610233578063395093511461025157806340c10f191461027d57806342966c68146102a95780634e71e0c8146102c657610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e6104da565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b0381351690602001356104fe565b604080519115158252519081900360200190f35b6101eb610514565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b0381358116916020810135909116906040013561051a565b61023b610583565b6040805160ff9092168252519081900360200190f35b6101cf6004803603604081101561026757600080fd5b506001600160a01b038135169060200135610588565b6101cf6004803603604081101561029357600080fd5b506001600160a01b0381351690602001356105be565b6101cf600480360360208110156102bf57600080fd5b50356106e7565b6102ce6106fb565b005b6101eb600480360360208110156102e657600080fd5b50356001600160a01b03166107b7565b6102fe6107d2565b604080516001600160a01b039092168252519081900360200190f35b61012e6107e7565b6101cf6004803603604081101561033857600080fd5b506001600160a01b038135169060200135610872565b6101cf6004803603604081101561036457600080fd5b506001600160a01b0381351690602001356108c1565b6101cf6004803603602081101561039057600080fd5b8101906020810181356401000000008111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460018302840111640100000000831117156103df57600080fd5b5090925090506108ce565b6101eb6004803603604081101561040057600080fd5b506001600160a01b038135811691602001351661092e565b6102ce6004803603602081101561042e57600080fd5b50356001600160a01b0316610959565b6102ce6004803603602081101561045457600080fd5b81019060208101813564010000000081111561046f57600080fd5b82018360208201111561048157600080fd5b803590602001918460018302840111640100000000831117156104a357600080fd5b509092509050610a52565b6101cf600480360360408110156104c457600080fd5b506001600160a01b038135169060200135610b0b565b6040518060400160405280600881526020016731b7bb2a37b5b2b760c11b81525081565b600061050b338484610b69565b50600192915050565b60035490565b6000610527848484610c55565b6105798433610574856040518060600160405280602d81526020016112ca602d91396001600160a01b038a1660009081526005602090815260408083203384529091529020549190610da7565b610b69565b5060019392505050565b601281565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161050b9185906105749086610e3e565b600080546201000090046001600160a01b03163314610612576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b6001600160a01b0383166106575760405162461bcd60e51b81526004018080602001828103825260248152602001806112256024913960400191505060405180910390fd5b6003546106649083610e3e565b6003556001600160a01b03831660009081526004602052604090205461068a9083610e3e565b6001600160a01b03841660008181526004602090815260408083209490945583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b60006106f33383610e9f565b506001919050565b6001546001600160a01b03163314610748576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169362010000909204909116917fe9a5158ac7353c7c7322ececc080bc8e89334efa5795b6e21e40eb266b0003d691a36001546000805462010000600160b01b0319166001600160a01b039092166201000002919091179055565b6001600160a01b031660009081526004602052604090205490565b6000546201000090046001600160a01b031690565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561086a5780601f1061083f5761010080835404028352916020019161086a565b820191906000526020600020905b81548152906001019060200180831161084d57829003601f168201915b505050505081565b600061050b338461057485604051806060016040528060258152602001611342602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190610da7565b600061050b338484610c55565b600080546201000090046001600160a01b03163314610922576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b610579600284846110cf565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6000546201000090046001600160a01b031633146109ac576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b6001600160a01b0381166109f15760405162461bcd60e51b81526004018080602001828103825260268152602001806111d86026913960400191505060405180910390fd5b600080546040516001600160a01b03808516936201000090930416917fb150023a879fd806e3599b6ca8ee3b60f0e360ab3846d128d67ebce1a391639a91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1680610a6b5750610a6b610f8f565b80610a79575060005460ff16155b610ab45760405162461bcd60e51b815260040180806020018281038252602e815260200180611273602e913960400191505060405180910390fd5b600054610100900460ff16158015610adf576000805460ff1961ff0019909116610100171660011790555b610aeb600284846110cf565b50610af4610f95565b8015610b06576000805461ff00191690555b505050565b600080546201000090046001600160a01b03163314610b5f576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b61050b8383610e9f565b6001600160a01b038316610bae5760405162461bcd60e51b81526004018080602001828103825260298152602001806112a16029913960400191505060405180910390fd5b6001600160a01b038216610bf35760405162461bcd60e51b81526004018080602001828103825260278152602001806111fe6027913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610c9a5760405162461bcd60e51b815260040180806020018281038252602a815260200180611249602a913960400191505060405180910390fd5b6001600160a01b038216610cdf5760405162461bcd60e51b81526004018080602001828103825260288152602001806111b06028913960400191505060405180910390fd5b610d1c816040518060600160405280602b8152602001611317602b91396001600160a01b0386166000908152600460205260409020549190610da7565b6001600160a01b038085166000908152600460205260408082209390935590841681522054610d4b9082610e3e565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610e365760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610dfb578181015183820152602001610de3565b50505050905090810190601f168015610e285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610e98576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610ee45760405162461bcd60e51b81526004018080602001828103825260268152602001806111636026913960400191505060405180910390fd5b610f2181604051806060016040528060278152602001611189602791396001600160a01b0385166000908152600460205260409020549190610da7565b6001600160a01b038316600090815260046020526040902055600354610f47908261108d565b6003556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b303b1590565b600054610100900460ff1680610fae5750610fae610f8f565b80610fbc575060005460ff16155b610ff75760405162461bcd60e51b815260040180806020018281038252602e815260200180611273602e913960400191505060405180910390fd5b600054610100900460ff16158015611022576000805460ff1961ff0019909116610100171660011790555b600080546201000033810262010000600160b01b0319909216919091178083556040519190046001600160a01b031691907fe9a5158ac7353c7c7322ececc080bc8e89334efa5795b6e21e40eb266b0003d6908290a3801561108a576000805461ff00191690555b50565b6000610e9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610da7565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106111105782800160ff1982351617855561113d565b8280016001018555821561113d579182015b8281111561113d578235825591602001919060010190611122565b5061114992915061114d565b5090565b5b80821115611149576000815560010161114e56fe436f76657245524332303a206275726e2066726f6d20746865207a65726f2061646472657373436f76657245524332303a206275726e20616d6f756e7420657863656564732062616c616e6365436f76657245524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373436f76657245524332303a20617070726f766520746f20746865207a65726f2061646472657373436f76657245524332303a206d696e7420746f20746865207a65726f2061646472657373436f76657245524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564436f76657245524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373436f76657245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f76657245524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205a1b85bd186bbccf0aea5142b0b82eef6ce2029412a61fc78cfa1ba33c68c9a864736f6c63430007030033