/*
 * Since the strings in this file are printed out when the "-v" switch is
 * given to ispell, you may want to translate them into your native language.
 * However, any translation of these strings MUST accurately preserve the
 * legal rights under international law;  you may wish to consult a lawyer
 * about this since you will be responsible for the results of any
 * incorrect translation.
 */

static char * Version_ID[] = {
    "@(#) International Ispell Version 3.1.20 10/10/95",
    "@(#) Copyright (c), 1983, by Pace Willisson",
    "@(#) International version Copyright (c) 1987, 1988, 1990-1995,",
    "@(#) by Geoff Kuenning, Granada Hills, CA.  All rights reserved.",
    "@(#)",
    "@(#) Redistribution and use in source and binary forms, with or without",
    "@(#) modification, are permitted provided that the following conditions",
    "@(#) are met:",
    "@(#)",
    "@(#) 1. Redistributions of source code must retain the above copyright",
    "@(#)    notice, this list of conditions and the following disclaimer.",
    "@(#) 2. Redistributions in binary form must reproduce the above",
    "@(#)    copyright notice, this list of conditions and the following",
    "@(#)    disclaimer in the documentation and/or other materials provided",
    "@(#)    with the distribution.",
    "@(#) 3. All modifications to the source code must be clearly marked as",
    "@(#)    such.  Binary redistributions based on modified source code",
    "@(#)    must be clearly marked as modified versions in the documentation",
    "@(#)    and/or other materials provided with the distribution.",
    "@(#) 4. All advertising materials mentioning features or use of this",
    "@(#)    software must display the following acknowledgment:",
    "@(#)      This product includes software developed by Geoff Kuenning and",
    "@(#)      other unpaid contributors.",
    "@(#) 5. The name of Geoff Kuenning may not be used to endorse or promote",
    "@(#)    products derived from this software without specific prior",
    "@(#)    written permission.",
    "@(#)",
    "@(#) THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS",
    "@(#) IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT",
    "@(#) LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS",
    "@(#) FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GEOFF",
    "@(#) KUENNING OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,",
    "@(#) INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES",
    "@(#) (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR",
    "@(#) SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)",
    "@(#) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,",
    "@(#) STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)",
    "@(#) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED",
    "@(#) OF THE POSSIBILITY OF SUCH DAMAGE.",
    NULL
};

static char RCS_Version_ID[] =
    "$Id$";

/*
 * $Log$
 * Revision 1.1  2007/01/09 23:57:18  lattner
 * initial recheckin of mibench
 *
 * Revision 1.1.1.1  2007/01/09 02:59:06  evancheng
 * Add selected tests from MiBench 1.0 to LLVM test suite.
 *
 * Revision 1.44  1995/10/11  05:03:28  geoff
 * Upgrade to patch level 20
 *
 * Revision 1.43  1995/10/11  04:58:26  geoff
 * Upgrade to patch 19
 *
 * Revision 1.42  1995/01/15  01:23:26  geoff
 * Upgrade to patch level 18
 *
 * Revision 1.41  1995/01/15  01:14:30  geoff
 * Upgrade to patch level 17
 *
 * Revision 1.40  1995/01/15  01:03:55  geoff
 * Upgrade to patch level 16
 *
 * Revision 1.39  1995/01/15  01:01:01  geoff
 * Upgrade to patch level 15
 *
 * Revision 1.38  1995/01/15  00:54:19  geoff
 * Upgrade to patch level 14
 *
 * Revision 1.37  1994/11/21  07:03:01  geoff
 * Update to patch level 13.
 *
 * Revision 1.36  1994/11/01  06:28:31  geoff
 * Update to patch level 12
 *
 * Revision 1.35  1994/11/01  06:12:42  geoff
 * Update to patch level 11
 *
 * Revision 1.34  1994/11/01  06:01:15  geoff
 * Update to patch level 10
 *
 * Revision 1.33  1994/11/01  05:36:43  geoff
 * Update to patch level 9
 *
 * Revision 1.32  1994/05/25  04:38:59  geoff
 * Update to patch level 8
 *
 * Revision 1.31  1994/05/18  03:07:26  geoff
 * Update to patch level 7
 *
 * Revision 1.30  1994/05/17  06:21:05  geoff
 * Version update for ispell.el release
 *
 * Revision 1.29  1994/04/27  04:14:18  geoff
 * Update to patch level 5
 *
 * Revision 1.28  1994/03/21  02:00:50  geoff
 * Update to patch level 4
 *
 * Revision 1.27  1994/02/23  04:52:31  geoff
 * Update to latest version.
 *
 * Revision 1.26  1994/02/08  05:59:20  geoff
 * Update version
 *
 * Revision 1.25  1994/02/07  08:58:28  geoff
 * Get rid of a comma that confuses patch
 *
 * Revision 1.24  1994/02/07  08:24:23  geoff
 * Upate patch level
 *
 * Revision 1.23  1994/01/25  07:12:21  geoff
 * Get rid of all old RCS log lines in preparation for the 3.1 release.
 *
 */
