contract Utility is ERC20, AdminRole {

    string private _name;
    string private _symbol;
    uint8  private _decimals;

    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
        _totalSupply = 0;
    }

    /**
     * @return the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @return the symbol of the token.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @return the number of decimals of the token.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    /**
    * @dev Destroy the contract
    */
    function Destroy() public onlyAdmin returns (bool) {
        selfdestruct(msg.sender);
        return true;
    }

    /**
    * @dev sudo Transfer tokens
    * @param from The address to transfer from.
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function sudoTransfer(address from, address to, uint256 value) public onlyAdmin returns (bool) {
        _transfer(from, to, value);
        return true;
    }

    /**
    * @dev Mint tokens
    * @param to The address to mint in.
    * @param value The amount to be minted.
    */
    function Mint(address to, uint256 value) public onlyAdmin returns (bool) {
        _mint(to, value);
        return true;
    }

    /**
    * @dev Burn tokens
    * @param from The address to burn in.
    * @param value The amount to be burned.
    */
    function Burn(address from, uint256 value) public onlyAdmin returns (bool) {
        _burn(from, value);
        return true;
    }

}
function name() public view returns (string memory) {
    return _name;
}

/**
 * @return the name of the token.
 */