abstract contract ERC721MetaTransaction is 
    ERC721,
    AccessControlMixin,
    NativeMetaTransaction,
    ContextMixin
{
    constructor(string memory _name) {
        _setupContractId("ERC721MetaTransaction"); //for errorMessage
        _initializeEIP712(_name);
    }

    // This is to support Native meta transactions
    // never use msg.sender directly, use _msgSender() instead
    function _msgSender()
        virtual
        internal
        override
        view
        returns (address)
    {
        return ContextMixin.msgSender();
    }
}
function _msgSender()
    virtual
    internal
    override
    view
    returns (address)
{
    return ContextMixin.msgSender();
}

// This is to support Native meta transactions
// never use msg.sender directly, use _msgSender() instead