contract FECORE is ERC20Burnable, CMERC20Snapshot {
        constructor(
            string memory name,
            string memory symbol,
            uint256 amount
        ) public payable ERC20(name, symbol) {
            _setupDecimals(18);
            _mint(msg.sender, amount);

            // set up required roles
            _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
            _setupRole(SNAPSHOT_ROLE, _msgSender());
        }

        // overrides
        function _burn(address account, uint256 value)
            internal
            override(ERC20, ERC20Snapshot)
        {
            super._burn(account, value);
        }

        function _mint(address account, uint256 value)
            internal
            override(ERC20, ERC20Snapshot)
        {
            super._mint(account, value);
        }

        function _transfer(
            address from,
            address to,
            uint256 value
        ) internal override(ERC20, ERC20Snapshot) {
            super._transfer(from, to, value);
        }
    }
// imports
function _burn(address account, uint256 value)
            internal
            override(ERC20, ERC20Snapshot)
        {
            super._burn(account, value);
        }
// overrides