contract Token is UpgradeableToken, BurnableToken {
    string public name = "KEYOTO";
    string public symbol = "KEYO";

    // For patient incentive programs
    uint256 public INITIAL_SUPPLY;

    event UpdatedTokenInformation(string newName, string newSymbol);

    constructor (address kpoWallet, address _upgradeMaster, uint256 _INITIAL_SUPPLY)
        public
        UpgradeableToken(_upgradeMaster)
    {
        require(maxTokenSupply >= _INITIAL_SUPPLY * (10 ** uint256(decimals)));
        INITIAL_SUPPLY = _INITIAL_SUPPLY * (10 ** uint256(decimals));
        totalSupply_ = INITIAL_SUPPLY;
        balances[kpoWallet] = INITIAL_SUPPLY;
        emit Transfer(address(0), kpoWallet, INITIAL_SUPPLY);
    }

    /**
    * Owner can update token information here
    */
    function setTokenInformation(string _name, string _symbol) external onlyOwner {
        name = _name;
        symbol = _symbol;

        emit UpdatedTokenInformation(name, symbol);
    }

    /**
    * Owner can burn token here
    */
    function burn(uint256 _value) public onlyOwner {
        super.burn(_value);
    }
}
function burn(uint256 _value) public onlyOwner {
    super.burn(_value);
}

/**
 * Owner can burn token here
 */