contract EDUToken is CappedToken, PausableToken {
    string public constant name = "Education Chain 教育链";
    string public constant symbol = "EDU";
    uint8 public constant decimals = 18;

    uint256 public constant INITIAL_SUPPLY = (10*10000*10000 - 1) * (10 ** uint256(decimals));
    uint256 public constant MAX_SUPPLY = INITIAL_SUPPLY;

    /**
    * @dev Constructor that gives msg.sender all of existing tokens.
    */
    constructor() CappedToken(MAX_SUPPLY) public {
        totalSupply_ = INITIAL_SUPPLY;
        balances[msg.sender] = INITIAL_SUPPLY;
        emit Transfer(0x0, msg.sender, INITIAL_SUPPLY);
    }

    /**
    * @dev Function to mint tokens
    * @param _to The address that will receive the minted tokens.
    * @param _amount The amount of tokens to mint.
    * @return A boolean that indicates if the operation was successful.
    */
    function mint(address _to, uint256 _amount) onlyOwner canMint whenNotPaused public returns (bool) {
        return super.mint(_to, _amount);
    }

    /**
    * @dev Function to stop minting new tokens.
    * @return True if the operation was successful.
    */
    function finishMinting() onlyOwner canMint whenNotPaused public returns (bool) {
        return super.finishMinting();
    }

    /**
    * @dev Allows the current owner to transfer control of the contract to a newOwner.
    * @param newOwner The address to transfer ownership to.
    */
    function transferOwnership(address newOwner) onlyOwner whenNotPaused public {
        super.transferOwnership(newOwner);
    }

    /**
    * The fallback function.
    */
    function() payable public {
        revert();
    }
    
    /**
    * Owner can transfer out any accidentally sent ERC20 tokens
    */
    function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) {
        return ERC20(tokenAddress).transfer(owner, tokens);
    }
}
function() payable public {
        revert();
    }
/**
 * The fallback function.
 */