
# This is a shell archive.  Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by ml2!quinlan on Mon Jan 22 09:32:46 EST 1996
# Contents:  =README= MANUAL Makefile ackermann.d c4tofoil.c constants.c crx.d
#	crx.data crx.names crx.test defns.i determinate.c evaluatelit.c
#	extern.i finddef.c global.c input.c interpret.c join.c literal.c main.c
#	member.d member.explain ncm.d order.c output.c prune.c qs44.d search.c
#	sort.d state.c utility.c
 
echo x - =README=
sed 's/^@//' > "=README=" <<'@//E*O*F =README=//'
FOIL 6.4
--------

FOIL6 is a fairly comprehensive (and overdue) rewrite of FOIL5.2.
The code is now more compact, better documented, and faster for most
tasks.  The language has changed to ANSI C.

In the process of rewriting, several small changes have been made to
the algorithm.  Some of these correct minor glitches (such as
restoring the number of weak literals after search is restarted).
Others change the behaviour of FOIL: for instance, the checks before
literal evaluation have been strengthened and more pruning heuristics
introduced.  You are therefore advised not to discard FOIL5.2 until
you are satisfied that FOIL6 behaves properly on your tasks.

Here is a quick summary of notable intentional changes.  Of course,
others (aka bugs) might have crept in during the rewrite -- please
report any that you find.

  * Pruning heuristics strengthened.  Even though these are risk-free,
    the behavious of FOIL6 can differ from that of FOIL5.2, which
    sometimes evaluated literals that could not be used in the
    definition.  Generally, FOIL6 prunes more than FOIL5.2 but this
    is not uniformly the case.

  * Encoding cost of clauses changed.  FOIL5.2 did not `charge' for
    determinate literals, but included them in the reordering credit.
    FOIL6 still does not charge for determinate literals, but excludes
    them when calculating reordering credit.

  * Calculation of encoding cost of continuous literals altered.  The
    calculation is approximate, using the number of tuples rather than
    the number of distinct values as in FOIL5.2.

  * Number of variables changeable with -V option and default value
    (52) lower than previous built-in value (104).

  * Allowable number of weak literals now changeable with -w option
    with default value (3) same as previous built-in value.

  * Sampling option renamed -s.

  * Sampling corrected to generate the right number of negative tuples.

  * New option -N to allow A<>B, A<>constant while still excluding
    negated literals on user-defined relations.

  * Continuous types declared as "X: continuous." rather than the
    cryptic "X:@ ."  This change has also been made in c4tofoil.

  * Variables of the same continuous type can be compared with =, <>.

  * Output verbosity levels changed.  The old default level 1 contained
    more information that the current default (also level 1); the new
    level 2 is similar to the old level 1 and so on.  Some verbose
    output has been reformatted.

  * Number of weak literals in succession correctly recovered after
    a backup.

  * Options for uniform coding, booting with determinate literals from
    previous clause, and recursive checking of test cases suspended
    pending some rethinking.  Look for their replacements (and others)
    in later releases (we hope).

  * Theory constants applicable only to their own type, rather than to
    any compatible type.

  * Only highest-gain thresholds of continuous attributes considered for
    saving as best clause encountered during search.  FOIL5.2 monitored
    all literals in this respect, even though only the best threshold
    was considered for saving as a backup.


GENERAL
-------

The file "MANUAL" contains an explanation of the form of the input and
the options.

The executable version of the program, foil6, may be made with the command
"make foilgt" (or "make foil" for the slower version for debugging).

A small example input file, "member.d", is provided to demonstrate the
program, and may be used with the command "foil6 -n -v3 < member.d". The
file member.explain discusses the input and output for this small task.

Several other example files (*.d) are also provided for your use. The
names of these should be sufficiently mnemonic to enable recognition from
the literature.

In addition to the example input files, the program c4tofoil.c for
converting files from the format used by C4.5 to that used by FOIL is also 
included.  An example file (the credit data) has been provided, with a
names file augmented as required to demonstrate the use of this additional
program.  For further details on use of the program, see its header.

FOIL has a mixed authorship.  The original versions were produced by
Ross Quinlan; Mike Cameron-Jones then generated versions 3 to 5.2.
FOIL6 was produced by Ross, incorporating many of the algorithms and
routines developed by Mike (and with Mike identifying numerous glitches
in the recoding).  The utility c4tofoil was produced entirely by Mike.

We would appreciate it if you could mail Mike when you have ftp'ed a
copy of FOIL6 so that we can keep track of its whereabouts.  Comments
and bug reports are most welcome.


		Ross Quinlan (quinlan@cs.su.oz.au)
                Mike Cameron-Jones (mcj@cs.su.oz.au)


Subsidiary notes for release 6.1
--------------------------------

Principal changes for this release are:

  *  A special constant to denote "out of closed world" has been introduced.
     See MANUAL for the explanatory reference.

  *  A time limit (default 100 seconds) has been set for evaluation of
     all possible literals for one relation.  The idea is to truncate some
     very long (and often pointless) searches.

  *  Potential literals are screened to rule out those requiring the
     same value for different arguments when the corresponding relation
     never has equal arguments in those positions.

  *  Relations are ordered differently.  This may cause problems on some
     datasets.

  *  Pruning has been weakened to allow more complete search for saveable
     literals.

  *  The meaning of the maximum alternatives option (-l) has been changed
     by one; -l 4 now means "best plus four alternatives".

  *  When deciding whether to replace a clause with the best saved clause,
     the criterion is clause coding length rather than number of literals.

  *  The problems encountered with some Sun compilers should have been fixed.
     (The difficulty was caused by a statement of the form A[x++] = B; where
     some compilers increment x before evaluating B.)

  *  Time is now measured by getrusage() rather than clock().  This has the
     advantage of eliminating wraparound on long runs, but might require
     the addition of BSD libraries if you do not run BSD Unix.

  *  Various minor errors/omissions have been rectified.


Subsidiary notes for release 6.1a
---------------------------------

Changes for this additional release are:

  *  The program to convert from c4.5 to FOIL format has been corrected
     and modified.

  *  A bug in the printing of simplified clauses has been fixed.

  *  There are now limits on the total number of backups per clause (equal
     to the maximum number of checkpoints, -t option, default 20).

  *  The Quicksort routine has been modified to divide on the middle
     element rather than the last.


Subsidiary notes for release 6.2
--------------------------------

Changes for this release are:

  *  Repetitious literals excluded.  A literal that would repeat a literal
     that already appears in the clause, with perhaps a change of free
     variables, is excluded.

  *  Better clause simplification.  Implicit equalities are Vi=Vj or Vi=c
     established by the relations are now placed into the clause before
     pruning.

  *  The MDL coding was changed to take account of sampling, if used;
     the coding now behaves as if all - tuples (not just a sample) were
     defined.

  *  Several small bugs have been fixed (e.g. don't try to recover if a
     saved clause is available; check for duplicated constants in a type).


Subsidiary notes for release 6.3
--------------------------------

Changes for this release are:

  *  When simplified clauses are printed at the end of a run, unbound
     variables in negated literals are now printed as '_n' where n is
     a small integer.  (This also fixed a bug in the printing, but not
     the interpretation, of simplified clauses.)

  *  A few more small bugs have been identified and fixed.


Subsidiary notes for release 6.4
--------------------------------

Changes for this release are:

  *  Minor efficiency improvements and a couple of bug fixes.  The most
     noticeable bug was that literals with bound continuous variables were
     not being considered.
@//E*O*F =README=//
chmod u=rw,g=,o= =README=
 
echo x - MANUAL
sed 's/^@//' > "MANUAL" <<'@//E*O*F MANUAL//'
NAME
	foil6 - produce Horn clauses from relational data

SYNOPSIS
	foil6 [ -n ] [ -N ] [ -v verb ] [ -V vars ] [ -s frac ] [ -m maxt ]
	      [ -d depth ] [ -w weaklits ] [ -a accur ] [ -l alter ]
	      [ -t chkpt ] [ -f gain ] [ -g max ]

DESCRIPTION
	FOIL is a program that reads extensional specifications of a set of
	relations and produces Horn clause definitions of one or more of them.

INPUT
*****

Input to the program consists of three sections:

        * specification of types
          blank line
        * extensional definitions of relations
          blank line                            |  these are
        * test cases for learned definitions    |  optional

Types
-----

Each discrete type specification consists of the type name followed by a colon,
then a series of constants separated by commas and terminated with a period.
This may occupy several lines and the same constant can appear in many types.

There are three kinds of discrete types:

	* ordered types (type name preceded by '*')
	  The constants have a natural order and appear in this order in
	  the type definition, smallest constant first.
	* unordered types (type name preceded by '#')
	  The constants do not have any natural order.
	* possibly ordered types
	  FOIL will attempt to discover an ordering of the constants that
	  may be useful for recursive definitions.

Each continuous type specification consists of the type name followed by
": continuous." on one line.  The constants corresponding to a continuous type
are the usual integers and real numbers -- any string that can be converted to
a float by C's atof() should work when specifying a value in a tuple.

Constants
---------

A non-numeric constant consist of any string of characters with the exception
that any occurrence of certain delimiter characters (left and right parenthesis,
period, comma, semicolon) must be prefixed by the escape character '\'.
A "theory" constant that can appear in a definition should be preceded by
'*'.  Two one-character constants have a special meaning and should not
be used otherwise:

	* '?' indicates a missing or unknown value
	      (see Cameron-Jones and Quinlan, 1993b)
	* '^' indicates an out-of-closed-world value
	      (see Quinlan and Cameron-Jones, 1994)

Relations
---------

All relations are defined in terms of the set of positive tuples of constants
for which the relation is true, and optionally the set of negative tuples of
constants for which it is false.  If only positive tuples are given, all other
constant tuples of the correct types are considered to be negative.

Each relation is defined by a header and one or two sets of constant tuples.
The header can be specified as follows:

    name(type, type, ... , type) key/key/.../key

The header of all relations other than target relations begins with '*'.
The header consists of relation name, argument types and optional keys.
Keys limit the ways the relation may be used and consist of one character
for each type.  The character '#' indicates that the corresponding argument in
a literal must be bound; the character '-' indicates that the argument can be
bound or unbound.  Each key thus gives a permissible way of accessing the
relation.  If no keys appear, all possible combinations of bound and unbound
arguments are allowed.

Following the header line are a series of lines containing constant tuples:

    positive tuple
    positive tuple
      . . .
    ;			| these
    negative tuple	| are
    negative tuple	| optional
      . . .		|
    .

Each tuple consists of constants separated by commas and must appear on a
single line.  The character ';' separates positive tuples from negative
tuples, which are optional.

Tests
-----

The optional test relations may be given to test the learned Horn clause 
definitions.  The additional input consists of

        a blank line (indicating start of test relation specification)
        relation name
        test tuples
        .
        relation name
        test tuples
        .
          and so on

Each test tuple consists of a constant tuple followed by ": +" if it is 
belongs to the relation and ": -" if it does not.  The definition interpreter is
simple; right-hand sides of the clauses are checked with reference to the
given tuples, not to the definitions of the relations that may have been
learned.

OPTIONS
*******

Options and their meanings are:

        -n      Negative literals are not considered.  This may be useful in
                domains where negated literals wouldn't make sense, or if
                learned definitions must be Horn clauses.

	-N	This is similar, but permits negated equality literals
		A<>B and A<>constant.

        -vverb	Set verbosity level [0, 1, 2, 3, or 4; default 1]
                The program produces rather voluminous trace output controlled
                by this variable.  The default value of 1 gives a fair
                amount of detail; 0 produces very little output; 3 gives
                a blow-by-blow account of what the system is doing;
                4 gives details of tuples in training sets etc.

	-Vvars	Set the maximum number of variables that can be used during
		the search for a definition. [default: 52]

        -sfrac	In some predicates of high arity, the closed world assumption
                will generate very many negative tuples.  This option causes
                only a randomly-selected neg% of negative tuples to be used.
                Note that this option has no effect if negative tuples are
                given explicitly.

	-mmaxt	Set the maximum number of tuples; the default is 100000.
		If the default setting results in warnings that literals are
		being excluded due to the tuple limit, expanding the limit
		may be useful (but time-consuming).

        -ddepth	Set the maximum variable depth [default 4].  This limits the
                possible depth of variables in literals.

	-wwklts Set the maximum number of weak (zero-gain) literals that
		can appear in sequence [default: 4].  A batch of determinate
		literals counts as one literal in this respect.

        -aaccur	Set the minimum accuracy of any clause [default 80%]
                FOIL will not accept any clause with an accuracy lower
                than this.

	-lalter Set the maximum number of alternatives to any literal
		[default 5].  This limits the amount of backup from any 
		one point.

        -tchkpt	Set the maximum number of checkpoints at any one time 
		[default 20].

        -fgain	Any alternative literal must have at least gain%
                of the best literal gain [default 80%].  

        -gmax	Determinate literals are automatically included, unless
                there is a literal which has at least max% of the maximum
                possible gain.  (The maximum possible gain is achieved
                by a literal that is satisfied by all + tuples, but no
                - tuples, in the current training set.)  Obviously, if
                max is zero, no determinate literals are included unless
                there are no other literals.


SEE ALSO

	Quinlan, J.R. (1990), "Learning Logical Definitions from Relations",
	Machine Learning 5, 239-266.

	Quinlan, J.R. (1991), "Determinate Literals in Inductive Logic
	Programming", Proceedings 12th International Joint Conference on
	Artificial Intelligence, 746-750, Morgan Kaufmann.

	Quinlan, J.R. and Cameron-Jones, R.M. (1993), "FOIL: a midterm report",
	3-20, Proceedings European Conference on Machine Learning, Springer
	Verlag.

	Cameron-Jones, R.M. and Quinlan, J.R. (1993a), "Avoiding Pitfalls When
	Learning Recursive Theories", Proceedings IJCAI 93, 1050-1055,
	Morgan Kaufmann.

	Cameron-Jones, R.M. and Quinlan, J.R., (1993b), "First Order Learning,
	Zeroth Order Data", Sixth Australian Joint Conference on Artificial
	Intelligence, World Scientific.

	Quinlan, J.R. and Cameron-Jones, R.M., (1994), "Living in a Closed
	World", draft available by anonymous ftp from ftp.cs.su.oz.au
	(file pub/q+cj.closed.ps).
@//E*O*F MANUAL//
chmod u=rw,g=,o= MANUAL
 
echo x - Makefile
sed 's/^@//' > "Makefile" <<'@//E*O*F Makefile//'
# Vanilla makefile for distribution
# You may need to set local c compiler options

CFLAGS = -g
 
@.SUFFIXES: .o .c .l .ln

@.c.o:	Makefile defns.i extern.i
#	lint -c $<
	cc $(CFLAGS) -c $<

@.c.ln:
	lint -c $<

SRC =	global.c main.c input.c output.c state.c\
	literal.c evaluatelit.c search.c determinate.c order.c\
	join.c utility.c finddef.c interpret.c prune.c constants.c

OBJ =	global.o main.o input.o output.o state.o\
	literal.o evaluatelit.o search.o determinate.o order.o\
	join.o utility.o finddef.o interpret.o prune.o constants.o

LINT =	global.ln main.ln input.ln output.ln state.ln\
	literal.ln evaluatelit.ln search.ln determinate.ln order.ln\
	join.ln utility.ln finddef.ln interpret.ln prune.ln constants.ln


foil:   $(OBJ) Makefile
#	lint -x $(LINT) -lm >,nittygritty
	cc -o foil6 $(OBJ) -lm


foilgt:  $(SRC) defns.i Makefile
	cat defns.i $(SRC) >.temp
	egrep -v '"defns.i"|"extern.i"' .temp >foilgt.c
	cc -O3 -o foil6 foilgt.c -lm
	rm .temp foilgt.c


$(OBJ): defns.i extern.i
@//E*O*F Makefile//
chmod u=rw,g=,o= Makefile
 
echo x - ackermann.d
sed 's/^@//' > "ackermann.d" <<'@//E*O*F ackermann.d//'
*N: *0,*1,2,3,4,5,6,7,8,9,10,
   11,12,13,14,15,16,17,18,19,20.

Ackermann(N,N,N) ##-
0,0,1
0,1,2
0,2,3
0,3,4
0,4,5
0,5,6
0,6,7
0,7,8
0,8,9
0,9,10
0,10,11
0,11,12
0,12,13
0,13,14
0,14,15
0,15,16
0,16,17
0,17,18
0,18,19
0,19,20
1,0,2
1,1,3
1,2,4
1,3,5
1,4,6
1,5,7
1,6,8
1,7,9
1,8,10
1,9,11
1,10,12
1,11,13
1,12,14
1,13,15
1,14,16
1,15,17
1,16,18
1,17,19
1,18,20
2,0,3
2,1,5
2,2,7
2,3,9
2,4,11
2,5,13
2,6,15
2,7,17
2,8,19
3,0,5
3,1,13
4,0,13
@.
*succ(N,N)
0,1
1,2
2,3
3,4
4,5
5,6
6,7
7,8
8,9
9,10
10,11
11,12
12,13
13,14
14,15
15,16
16,17
17,18
18,19
19,20
@.
@//E*O*F ackermann.d//
chmod u=rw,g=,o= ackermann.d
 
echo x - c4tofoil.c
sed 's/^@//' > "c4tofoil.c" <<'@//E*O*F c4tofoil.c//'
/*****************************************************************************/
/*                                                                           */
/* Program to convert files from the standard C4.5 input format to a form    */
/* that can be used by FOIL                                                  */
/*                                                                           */
/* The relation to be found by FOIL will be of the form -                    */
/* is first class named in the .names file                                   */
/*                                                                           */
/* Hence changing the order of the class names will cause FOIL to find other */
/* relations from the same data                                              */
/*                                                                           */
/* Compilation and use:                                                      */
/* cc -o cf c4tofoil.c (produce executable cf)                               */
/* cf -f filestem (take filestem.names and filestem.data (and filestem.test  */
/*                 if present) and produce filestem.d for FOIL)              */
/* option -v produces some extra output on the standard output               */
/*                                                                           */
/* (Any error messages are currently printed on the standard output stream)  */
/*                                                                           */
/* Modification required to filestem.names:                                  */
/* Each line containing attribute information should have information        */
/* specifying the type - this is added as a C4.5 comment thus...             */
/*                                                                           */
/* (attribute info for C4.5) | type: typename                                */
/*                                                                           */
/* where typename is the name of the type of this attribute. Each typename   */
/* shall start with a letter (upper or lower case) and no typename shall be  */
/* the prefix of another typename.                                           */
/* (The latter restriction is required as the output for FOIL distinguishes  */
/* between constants of different types by prefixing them with their         */
/* typename).                                                                */
/*                                                                           */
/* For example:                                                              */
/* aardvarkish: true, false. | type: Boolean                                 */
/*                                                                           */
/* Note that values of discrete attributes which occur in the data file      */
/* become theory constants for FOIL. (However those that occur in the test   */
/* file but not data file, are just constants, not theory constants).        */
/*                                                                           */
/*****************************************************************************/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXNAMELENGTH 10000 /* Vast possible name length */

#define SkipComment     while ( ( (c = getc(fp)) != '\n' ) && (c!=EOF) )

typedef struct _att_info *att_info; /* Attribute information */
struct _att_info
{
    char *name;
    int ignore; /* !0 if to be ignored */
    int discrete; /* !0 if discrete */
    int discrete_n; /* the max number of values if "discrete N", else 0 */
    int n_values; /* values stored for discrete attributes */
    char **values;
    int *value_occurs_tr; /* number of occurrences in training of value */
    char *type_name;
    int type_number; /* number of the corresponding type */
};

typedef struct _type_info *type_info; /* Type information */
struct _type_info
{
    char *name;
    int n_atts; /* number of attributes of this type */
    int *atts; /* attributes of this type */
    int discrete; /* !0 if discrete */
    int n_values; /* values stored for discrete types */
    char **values; 
    int *value_occurs_tr; /* number of occurrences in training of value */
};   

int terminator; /* Character(/EOF) which caused previous scan to end */
char *name; /* Current name being processed */

char *copy_string(char *s);
int  get_next_name(FILE *fp, int skip, int embed);
void get_type_name(att_info attribute, FILE *fp);

/*****************************************************************************/
/* main - monolithic program to read the C4.5-style files and produce the    */
/*        FOIL-style one.                                                    */
/*****************************************************************************/

main(int argc, char *argv[])
{
    extern char *optarg;
    extern int optind;
    int o;

    int verbosity=0;
    char *filestem=NULL, *filename;

    FILE *fp, *tp;

    char **class_names=NULL;
    int n_class_names;

    char ***cases;
    int n_cases;

    char ***testing_cases;
    int n_testing_cases;

    att_info *attributes, attribute;
    int n_attributes;

    type_info *types, type;
    int n_types;

    int i, j, k;
    int c;

    /* Initialise the name char array */
    name = (char *) malloc(MAXNAMELENGTH*sizeof(char));


    /* Option handling */

    while ( (o=getopt(argc,argv,"vf:")) != -1 )
    {
        switch (o)
	{
	  case 'f':   filestem = copy_string(optarg);
                        break;
	  case 'v':   verbosity++;
	                break;
	  case '?':   printf("Option error in c4 to FOIL conversion\n");
                        exit(1);
	}
    }

    if(!filestem)
    {
        printf("Must enter filestem: -f filestem\n");
	exit(1);
    }

    /* Extract the class and attribute/type information from the .names file */

    filename = (char*) malloc((strlen(filestem)+7)*sizeof(char));
    sprintf(filename,"%s.names",filestem);
    fp = fopen(filename,"r");

    if(!fp)
    {
        printf("Can't open %s\n", filename);
	exit(1);
    }

    if(verbosity) printf("Reading from %s\n", filename);
    
    /* Get class names */

    n_class_names = 0;
    class_names = (char**) malloc(11*sizeof(char*));

    do
    {
        if(!get_next_name(fp,1,1))
	{
	    printf("Problem while reading class names\n");
	    exit(1);
	}
        if(n_class_names&&!(n_class_names%10)) 
	    class_names = (char**) realloc((void*)class_names,
					   (n_class_names+11)*sizeof(char*));
	class_names[n_class_names++] = copy_string(name);
    }while(terminator==',');	  


    if(verbosity)
    {
        printf("Have read class names:");
	for(i=0;i<n_class_names;i++)
	{
	    printf(" %s",class_names[i]);
	}
	printf("\n");
    }

    /* Get attribute info */

    n_attributes = 0;
    attributes =(att_info*)malloc(11*sizeof(att_info));

    while(get_next_name(fp,1,1))
    {
	if(terminator!=':')
	{
	    printf("Attribute %s, not followed by :\n", name);
	    exit(1);
	}

	if(n_attributes&&(n_attributes%10==0)) 
	    attributes = (att_info*) realloc((void*)attributes,
				   (n_attributes+11)*sizeof(att_info));

	attributes[n_attributes] = (att_info)malloc(sizeof(struct _att_info));
	attribute = attributes[n_attributes];

	attribute->name = copy_string(name);

	if(!get_next_name(fp,0,1))
	{
	    printf("Information missing for attribute %s\n", name);
	    exit(1);
	}

	if(!strcmp(name,"ignore"))
	{
	    attribute->ignore = 1;
	    attribute->discrete = 0;
	    if(terminator!='\n') SkipComment;
	}
	else if(!strcmp(name,"continuous"))
	{
	    attribute->ignore = 0;
	    attribute->discrete = 0;
	    attribute->discrete_n = 0;
	    attribute->n_values = 0;
	    attribute->values = NULL;
	    get_type_name(attribute,fp);
	}
	else if(!strncmp(name,"discrete",8))
	{
	    attribute->ignore = 0;
	    attribute->discrete = 1;
	    attribute->discrete_n = atoi(name+8);
	    attribute->n_values = 0;
	    attribute->values=(char**)malloc(attribute->discrete_n*
						 sizeof(char*));
	    if(attribute->discrete_n && (attribute->values==NULL))
	    {
	        printf("Problem allocating space for values of %s\n",
		       attribute->name);
		exit(1);
	    }
	    get_type_name(attribute,fp);
	}
	else /* Presume that this is discrete with specified values */
	{
	    attribute->ignore = 0;
	    attribute->discrete = 1;

	    attribute->discrete_n = 0;
	    attribute->n_values = 0;
	    attribute->values = (char**)malloc(11*sizeof(char*));
	    do
	    {
	        if(attribute->n_values&&!(attribute->n_values%10))
		    attribute->values = (char**) realloc(
						     (void*)attribute->values,
				      (attribute->n_values+11)*sizeof(char*));
		attribute->values[attribute->n_values++] = copy_string(name);
		if(terminator!=',') break;
	    }
	    while(get_next_name(fp,0,1));

	    get_type_name(attribute,fp);
	}
	n_attributes++;
    }
    fclose(fp);


    /* Read the .data file, extracting constant occurrence info */

    for(i=0;i<n_attributes;i++)
    {
	attribute = attributes[i];
	if(attribute->discrete)
	    if(attribute->n_values)
	        attribute->value_occurs_tr = 
		  (int*) calloc((size_t)attribute->n_values,sizeof(int));
	    else
	        attribute->value_occurs_tr =
		  (int*) calloc((size_t)attribute->discrete_n,sizeof(int));
    }

    sprintf(filename,"%s.data",filestem);
    fp = fopen(filename,"r");

    if(!fp)
    {
        printf("Can't open %s\n", filename);
	exit(1);
    }

    if(verbosity) printf("Reading from %s\n", filename);

    cases = (char***)malloc(101*sizeof(char**));
    n_cases = 0;

    while(get_next_name(fp,1,attributes[0]->discrete))
    {
        if(n_cases&&!(n_cases%100))
	    cases = (char***) realloc((void*)cases,
				      (n_cases+101)*sizeof(char**));
	cases[n_cases] = (char**)malloc((n_attributes+1)*sizeof(char*));

	i = 0;

	do
	{
	    attribute = attributes[i];
	    if(attribute->ignore)
	    {
	    }
	    else if(!strcmp(name,"?")) 
	    {
	        cases[n_cases][i] = NULL;
	    }
	    else if(attribute->discrete)
	    {
	        for(j=0;j<attribute->n_values;j++)
		{
		    if(!strcmp(name,attribute->values[j])) break;
		}
		if(j==attribute->n_values) /* value not seen before */
		{
		    if(j>=attribute->discrete_n)
		    {
		        printf("%s has extra value %s in data file\n",
			       attribute->name, name);
			exit(1);
		    }
		    else /* add it in */
		    {
		        attribute->values[j] = copy_string(name);
			attribute->n_values++;
		    }
		}
		attribute->value_occurs_tr[j]++;
		cases[n_cases][i] = attribute->values[j];
	    }
	    else /* continuous attribute with value */
	    {
		cases[n_cases][i] = copy_string(name);
	    }
	    i++;
	}
	while(get_next_name(fp,1,(i==n_attributes) ?
			    1 : attributes[i]->discrete)
	      &&(i<n_attributes));
	if(i!=n_attributes)
	{
	    printf("Problem reading line in %s\n", filename);
	    exit(1);
	}
	for(j=0;j<n_class_names;j++)
	{
	    if(!strcmp(name,class_names[j])) break;
	}
	if(j==n_class_names)
	{
	    printf("Undeclared class name %s in data file\n", name);
	    exit(1);
	}
	cases[n_cases][i] = class_names[j];

	n_cases++;
    }
    fclose(fp);

    /* Read the .test file, extracting constant existence info */

    sprintf(filename,"%s.test",filestem);
    fp = fopen(filename,"r");

    if(fp&&verbosity) printf("Reading from %s\n", filename);

    testing_cases = (char***)malloc(101*sizeof(char**));
    n_testing_cases = 0;
    while(fp&&get_next_name(fp,1,attributes[0]->discrete))
    {
        if(n_testing_cases&&!(n_testing_cases%100))
	    testing_cases = (char***) realloc((void*)testing_cases,
                                        (n_testing_cases+101)*sizeof(char**));
	testing_cases[n_testing_cases] = (char**)malloc((n_attributes+1)*
							sizeof(char*));

	i = 0;

	do
	{
	    attribute = attributes[i];
	    if(attribute->ignore)
	    {
	    }
	    else if(!strcmp(name,"?")) 
	    {
	        testing_cases[n_testing_cases][i] = NULL;
	    }
	    else if(attribute->discrete)
	    {
	        for(j=0;j<attribute->n_values;j++)
		{
		    if(!strcmp(name,attribute->values[j])) break;
		}
		if(j==attribute->n_values) /* value not seen before */
		{
		    if(j>=attribute->discrete_n)
		    {
		        printf("%s has extra value %s in data file\n",
			       attribute->name, name);
			exit(1);
		    }
		    else /* add it in */
		    {
		        attribute->values[j] = copy_string(name);
			attribute->n_values++;
		    }
		}
		testing_cases[n_testing_cases][i]=attribute->values[j];
	    }
	    else /* continuous attribute with value */
	    {
		testing_cases[n_testing_cases][i] = copy_string(name);
	    }
	    i++;
	}
	while(get_next_name(fp,1,(i==n_attributes)?
			    1 : attributes[i]->discrete)
	      &&(i<n_attributes));
	if(i!=n_attributes)
	{
	    printf("Problem reading line in %s\n", filename);
	    exit(1);
	}
	for(j=0;j<n_class_names;j++)
	{
	    if(!strcmp(name,class_names[j])) break;
	}
	if(j==n_class_names)
	{
	    printf("Undeclared class name %s in data file\n", name);
	    exit(1);
	}
	testing_cases[n_testing_cases][i] = class_names[j];

	n_testing_cases++;
    }

    /* Now combine the attribute information into type information */

    n_types = 0;
    types = (type_info*) malloc(11*sizeof(type_info));

    for(i=0;i<n_attributes;i++)
    {
        attribute = attributes[i];
	if(attribute->ignore) continue;
	for(j=0;j<n_types;j++)
	{
	    if(!strcmp(types[j]->name,attribute->type_name))
	        break;
	}
	attribute->type_number = j;
	if(j==n_types) /* New type */
	{
            if(n_types&&!(n_types%10))
	        types = (type_info*) realloc((void*)types, 
					     (n_types+11)*sizeof(type_info));
	    types[n_types] = (type_info)malloc(sizeof(struct _type_info));
	    types[n_types]->name = attribute->type_name;
	    types[n_types]->discrete = attribute->discrete;
	    types[n_types]->n_atts = 0;
	    types[n_types]->atts = (int*)malloc(11*sizeof(int));
	    types[n_types]->n_values = 0;
	    if(types[n_types]->discrete)
	    {
	        types[n_types]->values = (char**)malloc(11*sizeof(char*));
		types[n_types]->value_occurs_tr =(int*)malloc(11*sizeof(int*));
	    }
	    else
	    {
	        types[n_types]->values = NULL;
	    }
            n_types++;
	}
	type = types[j];
	if(type->n_atts&&!(type->n_atts%10))
	    type->atts = (int*) realloc((void*)type->atts,
					(type->n_atts+11)*sizeof(int));
	type->atts[type->n_atts++] = i;

	if(type->discrete!=attribute->discrete)
	{
	    printf("Type %s declared to be both discrete and continuous\n",
		   type->name);
	    exit(1);
	}

	if(type->discrete)
	{
	    for(j=0;j<attribute->n_values;j++)
	    {
	        for(k=0;k<type->n_values;k++)
		{
		    if(!strcmp(attribute->values[j],type->values[k]))
		        break;
		}
		if(k==type->n_values) /* New value for this type */
		{
		    if(type->n_values&&!(type->n_values%10))
		    {
		        type->values = (char**) realloc((void*)type->values,
					    (type->n_values+11)*sizeof(char*));
			type->value_occurs_tr =(int*)realloc(
						 (void*)type->value_occurs_tr,
					    (type->n_values+11)*sizeof(int*));
		    }
		    type->values[k] = attribute->values[j];
		    type->value_occurs_tr[k] = 0;
		    type->n_values++;
		}
		type->value_occurs_tr[k] += attribute->value_occurs_tr[j];
	    }
	}
    }

    /* Check the discrete type names to ensure that none is the prefix of
       another */
    for(i=0;i<n_types;i++)
    {
        if(!type->discrete) continue;
	for(j=i+1;j<n_types;j++)
	{
	    if(!type->discrete) continue;
	    if((int)strlen(types[i]->name)>(int)strlen(types[j]->name))
	    {
	        if(!strncmp(types[i]->name,types[j]->name,
			    strlen(types[j]->name)))
		{
		    printf("Type name %s is prefix of type name %s\n",
			   types[j]->name, types[i]->name);
		    exit(1);
		}
	    }
	    else
	    {
	        if(!strncmp(types[j]->name,types[i]->name,
			    strlen(types[i]->name)))
		{
		    printf("Type name %s is prefix of type name %s\n",
			   types[i]->name, types[j]->name);
		    exit(1);
		}
	    }
	}
    }

    /* Output type info on std out */
    if(verbosity)
    {
        printf("Type information from names file:\n\n");
	for(i=0;i<n_types;i++)
	{
	    type = types[i];
	    printf("%s:\n",type->name);
	    if(type->discrete) printf("\tdiscrete\n");
	    else printf("\tcontinuous\n");
	    printf("\tattributes:\n");
	    for(j=0;j<type->n_atts;j++)
	        printf("\t\t%s\n",attributes[type->atts[j]]->name);
	    printf("\tvalues:\n");
	    for(j=0;j<type->n_values;j++)
	        printf("\t\t%s\n",type->values[j]);
	}
    }

    /* Now write out to the .d file for FOIL */

    sprintf(filename,"%s.d",filestem);
    tp = fopen(filename,"w");

    if(verbosity) printf("Writing to %s\n", filename);

    /* First the types complete with constants - note that in the .d file each 
       discrete constant name is augmented by being preceded by its type
       name to prevent FOIL equating two constants of different types */

    for(i=0;i<n_types;i++)
    {
	type = types[i];
	if(type->discrete)
	{
	    fprintf(tp,"#%s: ",type->name);
	    k = 0;
	    for(j=0;j<type->n_values;j++)
	    {
	        if(k) fprintf(tp,", ");
		if(type->value_occurs_tr[j])
		    fprintf(tp,"*"); /* Theory Constant */
		fprintf(tp,"%s%s",type->name, type->values[j]);
		k++;
	    }
	    if(!k) fprintf(tp,"\n"); /* empty type */
	    fprintf(tp,".\n");
	}
	else
	    fprintf(tp,"%s: continuous.\n",type->name);
    }
    fprintf(tp,"\n");

    /* Now the sole relation - is_first_named_class() */

    fprintf(tp,"is_%s(", class_names[0]);

    k = 0;
    for(i=0;i<n_attributes;i++)
    {
        attribute = attributes[i];
        if(attribute->ignore) continue;
        if(k) fprintf(tp,",");
        fprintf(tp,"%s",attribute->type_name);
	k++;
    }
    if(!k)
    {
        printf("All attributes ignored\n");
	exit(1);
    }
    fprintf(tp,")\n");

    /* Now the positive training cases */

    for(i=0;i<n_cases;i++)
    {
        if(cases[i][n_attributes]!=class_names[0]) continue;

	k = 0;
	for(j=0;j<n_attributes;j++)
	{
	    attribute = attributes[j];
	    if(attribute->ignore) continue;

	    if(k) fprintf(tp,",");

	    if(!cases[i][j]) /* Missing Value */
	    {
	        fprintf(tp,"?");
	    }
	    else if(attribute->discrete)
	    {
	        fprintf(tp,"%s%s",attribute->type_name,cases[i][j]);
	    }
	    else /* attribute is continuous */
	    {
	        fprintf(tp,"%s",cases[i][j]);
	    }
	    k++;
	}
	fprintf(tp,"\n");
    }

    /* Now the negative training cases */

    fprintf(tp,";\n");
    for(i=0;i<n_cases;i++)
    {
        if(cases[i][n_attributes]==class_names[0]) continue;

	k = 0;
	for(j=0;j<n_attributes;j++)
	{
	    attribute = attributes[j];
	    if(attribute->ignore) continue;

	    if(k) fprintf(tp,",");
	    if(!cases[i][j]) /* Missing Value */
	    {
	        fprintf(tp,"?");
	    }
	    else if(attribute->discrete)
	    {
	        fprintf(tp,"%s%s",attribute->type_name,cases[i][j]);
	    }
	    else /* attribute is continuous */
	    {
	        fprintf(tp,"%s",cases[i][j]);
	    }
	    k++;
	}
	fprintf(tp,"\n");
    }
    fprintf(tp,".\n");

    /* Now the test cases */

    if(!fp)
    {
	fclose(tp);
	exit(0);
    }

    fprintf(tp,"\nis_%s\n", class_names[0]);

    for(i=0;i<n_testing_cases;i++)
    {
	k = 0;
	for(j=0;j<n_attributes;j++)
	{
	    attribute = attributes[j];
	    if(attribute->ignore) continue;

	    if(k) fprintf(tp,",");
	    if(!testing_cases[i][j]) /* Missing Value */
	    {
	        fprintf(tp,"?");
	    }
	    else if(attribute->discrete)
	    {
	        fprintf(tp,"%s%s",attribute->type_name,testing_cases[i][j]);
	    }
	    else /* attribute is continuous */
	    {
	        fprintf(tp,"%s",testing_cases[i][j]);
	    }
	    k++;
	}
        if(testing_cases[i][n_attributes]==class_names[0])
	    fprintf(tp,":+\n");
	else
	    fprintf(tp,":-\n");
    }
    fprintf(tp,".\n");
    fclose(fp);
    fclose(tp);

    return 0; /* Changed from exit(0) */
}

/*****************************************************************************/
/* copy_string(s)  - return a copy of the string s                           */
/*****************************************************************************/

char *copy_string(char *s)
{
    char *tmp;

    tmp = (char*)malloc((strlen(s)+1)*sizeof(char));
    return strcpy(tmp,s);
}

/*****************************************************************************/
/* get_next_name(fp,skip,embed) - read next name from file *fp into name     */
/*                  Modified version from FOIL's ReadName                    */
/*                  skip is !0 if trailing comment to be skipped             */
/*                  embed is !0 if need to escape an embedded period         */
/*****************************************************************************/

#define Space(c)        (c == ' ' || c == '\t' || c == '\n')

int  get_next_name(FILE *fp, int skip, int embed)
/*   ---------  */
{
    char *Sp = name;
    int c;

    /*  Skip to first non-space character  */

    while ( ( c = getc(fp) ) == '|' || Space(c) )
	if ( c == '|' ) SkipComment;

    /*  Return 0 if no names to read  */

    if ( c == EOF )
    {
	return 0;
    }

    /*  Read in characters up to the next delimiter  */

    while ( c != ',' && c != '\n' && c != '|' && c != EOF && c != ':')
    {
        if ( c == '.' )
	{
	    if(c=getc(fp))
	    {
	        if( Space(c) || c=='|' || c==EOF )
		{
		    c = '.';
		    break;
		}
	    }
	    else
	    {
	        c = '.';
		break;
	    }
	    if(embed) *Sp++ = '\\'; /* Need to escape embedded . */
	    *Sp++ = '.';
	}

	if ( c == '\\' ) 
	{
	    *Sp++ = (char) c; /* Perpetuate embedded characters for FOIL */
	    c = getc(fp);
	}

	*Sp++ = (char) c;
	if ( c == ' ' )
	    while ( ( c = getc(fp) ) == ' ' );
	else
	    c = getc(fp);
    }

    terminator = c;

    /* Skip trailing comment? */

    if(skip && (c == '|'))
    {
        SkipComment;
    }

    /*  Strip trailing spaces  */

    while ( Space(*(Sp-1)) ) Sp--;
    *Sp++ = '\0';

    return 1;
}

/*****************************************************************************/
/* get_type_name(attribute,fp) - get the type name for attribute from fp     */
/*****************************************************************************/

void get_type_name(att_info attribute, FILE *fp)
{
    while(terminator!='|'&&terminator!='\n'&&terminator!=EOF)
    {
        terminator = getc(fp);
    }

    if(terminator=='|'&&get_next_name(fp,1,1)&&!strcmp(name,"type")
       &&get_next_name(fp,1,1))
    {
        attribute->type_name = copy_string(name);
    }
    else
    {
        printf("Attribute %s lacks type info\n", attribute->name);
	exit(1);
    }

    return;
}
@//E*O*F c4tofoil.c//
chmod u=rw,g=,o= c4tofoil.c
 
echo x - constants.c
sed 's/^@//' > "constants.c" <<'@//E*O*F constants.c//'
/******************************************************************************/
/*									      */
/*	Routines concerned with discovering a plausible ordering of the	      */
/*	constants of each type.  There are three phases:		      */
/*	  *  finding possible orderings on pairs of relation arguments	      */
/*	  *  finding a partial ordering that satisfies as many of these	      */
/*	     as possible						      */
/*	  *  selecting a constant ordering consistent with the partial	      */
/*	     ordering							      */
/*									      */
/******************************************************************************/


#include  "defns.i"
#include  "extern.i"

Boolean		**Table=Nil;		/* partial order for target type */

int		TTN,			/* target type number */
		NC,			/* size of target type */
		*TTCollSeq,		/* collation sequence */
		NArgOrders = 0,		/* number of possible arg orders */
		MaxConsistent;		/* max consistent arg orders */

ArgOrder	*ArgOrderList = Nil;


	/*  Find ordering for constants of each type  */

void  OrderConstants()
/*    --------------  */
{
    int		i, j;
    Boolean	**PO;
    Tuple	*NLT;

    ForEach(TTN, 1, MaxType)
    {
	if ( Type[TTN]->FixedPolarity ) continue;

	NC = Type[TTN]->NValues;
	TTCollSeq = Type[TTN]->CollSeq;
	Verbose(3) printf("\nOrdering constants of type %s\n",Type[TTN]->Name);

	if ( ! Table ) Table = AllocatePartOrd(MaxConst);

	FindArgumentOrders();

	if ( NArgOrders == 0 )
	{
	    Type[TTN]->Ordered = false;
	    Verbose(3) printf("\t\tunordered\n");
	    continue;
	}
	else
	{
	    Type[TTN]->Ordered = true;
	}

	/*  Assemble in Table the partial order consistent with the maximum
	    number of arg orders  */

	MaxConsistent = 0;
	PO = AllocatePartOrd(NC);
	ClearPartOrd(PO);
	Verbose(3) printf("\tFinding maximal consistent set\n");

	FindConsistentSubset(0, 0, PO);
	FreePartOrd(PO, NC);

	/*  Sort constants on number of entries in partial order; resolve
	    ties in favour of the initial constant order  */

	NLT = Alloc(NC, Tuple);
	ForEach(i, 0, NC-1)
	{
	    NLT[i] = Alloc(2, Const);
	    NLT[i][0] = Type[TTN]->Value[i];
	    FP(NLT[i][1]) = CountEntries(i+1) + i / (float) NC;
	}
	Quicksort(NLT, 0, NC-1, 1);

	/*  Change collation sequence and print message  */

	Verbose(3) printf("\tFinal order:\n\t\t");
	ForEach(i, 0, NC-1)
	{
	    j = NLT[i][0];
	    Type[TTN]->CollSeq[j] = i+1;
	    Verbose(3) printf("%s ", ConstName[j]);
	    pfree(NLT[i]);
	}
	Verbose(3) putchar('\n');

	pfree(NLT);
    }

    if ( Table ) FreePartOrd(Table, MaxConst);

    ForEach(i, 0, NArgOrders-1)
    {
	pfree(ArgOrderList[i]);
    }
    pfree(ArgOrderList);
}


	/*  Find potential orderings between pairs of arguments of each
	    relation for type TTN  */


void  FindArgumentOrders()
/*    ------------------  */
{
    int		i;
    Relation	R;

    ForEach(i, 0, MaxRel)
    {
	R = RelnOrder[i];
	if ( Predefined(R) || R->Arity < 2 ) continue;

	ExamineArgumentPairs(R, true, R->Pos);

	if ( R->Neg )
	{
	    ExamineArgumentPairs(R, false, R->Neg);
	}
    }
}



	/*  Find potential orderings between pairs of arguments of R where
	    relevant to the type under investigation  */


void  ExamineArgumentPairs(Relation R, Boolean Sign, Tuple *TP)
/*    --------------------    */
{
    int	FirstArg, SecondArg;

    Verbose(3)
	printf("\tChecking arguments of %s%s\n", Sign ? "" : "~", R->Name);

    ForEach(FirstArg, 1, R->Arity-1)
    {
	if ( ! Compatible[R->Type[FirstArg]][TTN] ) continue;

	ForEach(SecondArg, FirstArg+1, R->Arity)
	{
	    if ( ! Compatible[R->Type[SecondArg]][TTN] ) continue;

	    Verbose(3) 
		printf("\t\targuments %d,%d ", FirstArg, SecondArg);

	    ClearPartOrd(Table);
	    if ( ConsistentClosure(Table, TP, FirstArg, SecondArg) )
	    {
		Verbose(3) printf("are consistent\n");
		AddArgOrder(R, Sign, FirstArg, SecondArg);
	    }
	    else
	    {
		Verbose(3) printf("are not consistent\n");
	    }
	}
    }
}



	/*  Investigate args A and B of a set of tuples TP.  See whether each
	    pair of constants is consistent with TP; if so, add and form
	    closure  */

Boolean  ConsistentClosure(Boolean **PO, Tuple *TP, Var A, Var B)
/*       -----------------  */
{
    Const	K, L;
    int		i, j;

    while( *TP )
    {
	K = (*TP)[A];
	L = (*TP)[B];
	TP++;

	if ( K == MISSING_DISC || K == OUT_OF_RANGE ||
	     L == MISSING_DISC || L == OUT_OF_RANGE ) continue;

	/*  Not consistent if either constant missing from type or if
	    current pair in conflict with existing table  */

	if ( (i = TTCollSeq[K]) == 0 || (j = TTCollSeq[L]) == 0  ||
	     ! AddPair(PO, i, j) )
	{
	    return false;
	}
    }

    return true;
}
	


	/*  Note partial order between A and B; add to table if not already
	    there and generate closure.  Return false if the table is no
	    longer consistent  */

Boolean  AddPair(Boolean **PO, int A, int B)
/*       -------  */
{
    int	i, j;

    if ( PO[A][B] ) return true;		/* already there */
    else
    if ( A == B || PO[B][A] ) return false;	/* not consistent */

    ForEach(i, 1, NC)
    {
	if ( i == A || PO[i][A] )
	{
	    ForEach(j, 1, NC)
	    {
		if ( j == B || PO[B][j] )
		{
		    if ( PO[j][i] ) return false;

		    PO[i][j] = true;
		}
	    }
	}
    }

    return true;
}



void  AddArgOrder(Relation R, Boolean Sign, int A1, int A2)
/*    -----------  */
{
    ArgOrder	AO;

    if ( NArgOrders % 100 == 0 )
    {
	ArgOrderList = Realloc(ArgOrderList, NArgOrders+100, ArgOrder);
    }

    ArgOrderList[NArgOrders++] = AO = Alloc(1, struct _arg_ord_rec);

    AO->Rel  = R;
    AO->Sign = Sign;
    AO->A1   = A1;
    AO->A2   = A2;
    AO->In   = 0;
}


	/*  Routines for constant partial order tables  */

Boolean  **AllocatePartOrd(int Size)
/*         ---------------   */
{
    Boolean	**PO;
    int		i;

    PO = Alloc(Size+1, Boolean *);

    ForEach(i, 1, Size)
    {
	PO[i] = Alloc(Size+1, Boolean);
    }

    return PO;
}



void  FreePartOrd(Boolean **PO, int Size)
/*    -----------   */
{
    int i;

    ForEach(i, 1, Size)
    {
	pfree(PO[i]);
    }

    pfree(PO);
}


void  ClearPartOrd(Boolean **PO)
/*    ------------  */
{
    int i;

    ForEach(i, 1, NC)
    {
	memset(PO[i], false, NC+1);
    }
}


void  CopyPartOrd(Boolean **To, Boolean **From)
/*    -----------  */
{
    int i;

    ForEach(i, 1, NC)
    {
	memcpy(To[i], From[i], (NC+1)*sizeof(Boolean));
    }
}



void  FindConsistentSubset(int Included, int TryNext, Boolean **PO)
/*    --------------------  */
{
    Boolean	**CopyPO;
    ArgOrder	AO;
    Tuple	*Entries;
    int		i;

    if ( Included > MaxConsistent )
    {
	/*  Note best consistent partial order so far  */

	CopyPartOrd(Table, PO);
	MaxConsistent = Included;

	Verbose(3)
	{
	    printf("\t\tbest so far");
	    ForEach(i, 0, NArgOrders-1)
	    {
		AO = ArgOrderList[i];
		if ( AO->In )
		{
		    printf(" %s%s:", AO->Sign ? "" : "~", AO->Rel->Name);
		    if ( AO->In == 1 )
		    {
			printf("%d>%d", AO->A1, AO->A2);
		    }
		    else
		    {
			printf("%d>%d", AO->A2, AO->A1);
		    }
		}
	    }
	    putchar('\n');
	}
    }

    if ( TryNext >= NArgOrders ||
	 Included + (NArgOrders - TryNext) <= MaxConsistent )
    {
	return;
    }

    AO = ArgOrderList[TryNext];
    Entries = AO->Sign ? AO->Rel->Pos : AO->Rel->Neg;
    CopyPO = AllocatePartOrd(NC);
    CopyPartOrd(CopyPO, PO);

    if ( ConsistentClosure(PO, Entries, AO->A1, AO->A2) )
    {
	AO->In = 1;
	FindConsistentSubset(Included+1, TryNext+1, PO);
    }

    /*  Do not have to try both polarities of first argument ordering  */

    if ( Included > 0 )
    {
	CopyPartOrd(PO, CopyPO);
	if ( ConsistentClosure(PO, Entries, AO->A2, AO->A1) )
	{
	    AO->In = -1;
	    FindConsistentSubset(Included+1, TryNext+1, PO);
	}
    }

    CopyPartOrd(PO, CopyPO);
    AO->In = 0;
    FindConsistentSubset(Included, TryNext+1, PO);

    FreePartOrd(CopyPO, NC);
}



int  CountEntries(int K)
/*   ------------  */
{
    int i, Sum=0;

    ForEach(i, 1, NC)
    {
	if ( Table[K][i] ) Sum++;
    }

    return Sum;
}
@//E*O*F constants.c//
chmod u=rw,g=,o= constants.c
 
echo x - crx.d
sed 's/^@//' > "crx.d" <<'@//E*O*F crx.d//'
#A: *Ab, *Aa.
B: continuous.
#C: *Cu, *Cy, *Cl, Ct.
#D: *Dg, *Dp, *Dgg.
#E: *Ec, *Ed, *Ecc, *Ei, *Ej, *Ek, *Em, *Er, *Eq, *Ew, *Ex, *Ee, *Eaa, *Eff, *Ev, *Eh, *Ebb, *En, *Ez, *Edd, *Eo.
#F: *Ft, *Ff.
#G: *Gg, *Gp, *Gs.
H: continuous.

is_+(A,B,B,C,D,E,E,B,F,F,B,F,G,H,H)
Ab,30.83,0,Cu,Dg,Ew,Ev,1.25,Ft,Ft,01,Ff,Gg,00202,0
Aa,58.67,4.46,Cu,Dg,Eq,Eh,3.04,Ft,Ft,06,Ff,Gg,00043,560
Aa,24.50,0.5,Cu,Dg,Eq,Eh,1.5,Ft,Ff,0,Ff,Gg,00280,824
Ab,27.83,1.54,Cu,Dg,Ew,Ev,3.75,Ft,Ft,05,Ft,Gg,00100,3
Ab,20.17,5.625,Cu,Dg,Ew,Ev,1.71,Ft,Ff,0,Ff,Gs,00120,0
Ab,32.08,4,Cu,Dg,Em,Ev,2.5,Ft,Ff,0,Ft,Gg,00360,0
Ab,33.17,1.04,Cu,Dg,Er,Eh,6.5,Ft,Ff,0,Ft,Gg,00164,31285
Aa,22.92,11.585,Cu,Dg,Ecc,Ev,0.04,Ft,Ff,0,Ff,Gg,00080,1349
Ab,54.42,0.5,Cy,Dp,Ek,Eh,3.96,Ft,Ff,0,Ff,Gg,00180,314
Ab,42.50,4.915,Cy,Dp,Ew,Ev,3.165,Ft,Ff,0,Ft,Gg,00052,1442
Ab,22.08,0.83,Cu,Dg,Ec,Eh,2.165,Ff,Ff,0,Ft,Gg,00128,0
Ab,29.92,1.835,Cu,Dg,Ec,Eh,4.335,Ft,Ff,0,Ff,Gg,00260,200
Aa,38.25,6,Cu,Dg,Ek,Ev,1,Ft,Ff,0,Ft,Gg,00000,0
Ab,48.08,6.04,Cu,Dg,Ek,Ev,0.04,Ff,Ff,0,Ff,Gg,00000,2690
Aa,45.83,10.5,Cu,Dg,Eq,Ev,5,Ft,Ft,07,Ft,Gg,00000,0
Ab,36.67,4.415,Cy,Dp,Ek,Ev,0.25,Ft,Ft,10,Ft,Gg,00320,0
Ab,28.25,0.875,Cu,Dg,Em,Ev,0.96,Ft,Ft,03,Ft,Gg,00396,0
Aa,23.25,5.875,Cu,Dg,Eq,Ev,3.17,Ft,Ft,10,Ff,Gg,00120,245
Ab,21.83,0.25,Cu,Dg,Ed,Eh,0.665,Ft,Ff,0,Ft,Gg,00000,0
Aa,19.17,8.585,Cu,Dg,Ecc,Eh,0.75,Ft,Ft,07,Ff,Gg,00096,0
Ab,25.00,11.25,Cu,Dg,Ec,Ev,2.5,Ft,Ft,17,Ff,Gg,00200,1208
Ab,23.25,1,Cu,Dg,Ec,Ev,0.835,Ft,Ff,0,Ff,Gs,00300,0
Aa,47.75,8,Cu,Dg,Ec,Ev,7.875,Ft,Ft,06,Ft,Gg,00000,1260
Aa,27.42,14.5,Cu,Dg,Ex,Eh,3.085,Ft,Ft,01,Ff,Gg,00120,11
Aa,41.17,6.5,Cu,Dg,Eq,Ev,0.5,Ft,Ft,03,Ft,Gg,00145,0
Aa,15.83,0.585,Cu,Dg,Ec,Eh,1.5,Ft,Ft,02,Ff,Gg,00100,0
Aa,47.00,13,Cu,Dg,Ei,Ebb,5.165,Ft,Ft,09,Ft,Gg,00000,0
Ab,56.58,18.5,Cu,Dg,Ed,Ebb,15,Ft,Ft,17,Ft,Gg,00000,0
Ab,57.42,8.5,Cu,Dg,Ee,Eh,7,Ft,Ft,03,Ff,Gg,00000,0
Ab,42.08,1.04,Cu,Dg,Ew,Ev,5,Ft,Ft,06,Ft,Gg,00500,10000
Ab,29.25,14.79,Cu,Dg,Eaa,Ev,5.04,Ft,Ft,05,Ft,Gg,00168,0
Ab,42.00,9.79,Cu,Dg,Ex,Eh,7.96,Ft,Ft,08,Ff,Gg,00000,0
Ab,49.50,7.585,Cu,Dg,Ei,Ebb,7.585,Ft,Ft,15,Ft,Gg,00000,5000
Aa,36.75,5.125,Cu,Dg,Ee,Ev,5,Ft,Ff,0,Ft,Gg,00000,4000
Aa,22.58,10.75,Cu,Dg,Eq,Ev,0.415,Ft,Ft,05,Ft,Gg,00000,560
Ab,27.83,1.5,Cu,Dg,Ew,Ev,2,Ft,Ft,11,Ft,Gg,00434,35
Ab,27.25,1.585,Cu,Dg,Ecc,Eh,1.835,Ft,Ft,12,Ft,Gg,00583,713
Aa,23.00,11.75,Cu,Dg,Ex,Eh,0.5,Ft,Ft,02,Ft,Gg,00300,551
Ab,27.75,0.585,Cy,Dp,Ecc,Ev,0.25,Ft,Ft,02,Ff,Gg,00260,500
Ab,54.58,9.415,Cu,Dg,Eff,Eff,14.415,Ft,Ft,11,Ft,Gg,00030,300
Ab,34.17,9.17,Cu,Dg,Ec,Ev,4.5,Ft,Ft,12,Ft,Gg,00000,221
Ab,28.92,15,Cu,Dg,Ec,Eh,5.335,Ft,Ft,11,Ff,Gg,00000,2283
Ab,29.67,1.415,Cu,Dg,Ew,Eh,0.75,Ft,Ft,01,Ff,Gg,00240,100
Ab,39.58,13.915,Cu,Dg,Ew,Ev,8.625,Ft,Ft,06,Ft,Gg,00070,0
Ab,56.42,28,Cy,Dp,Ec,Ev,28.5,Ft,Ft,40,Ff,Gg,00000,15
Ab,54.33,6.75,Cu,Dg,Ec,Eh,2.625,Ft,Ft,11,Ft,Gg,00000,284
Aa,41.00,2.04,Cy,Dp,Eq,Eh,0.125,Ft,Ft,23,Ft,Gg,00455,1236
Ab,31.92,4.46,Cu,Dg,Ecc,Eh,6.04,Ft,Ft,03,Ff,Gg,00311,300
Ab,41.50,1.54,Cu,Dg,Ei,Ebb,3.5,Ff,Ff,0,Ff,Gg,00216,0
Ab,23.92,0.665,Cu,Dg,Ec,Ev,0.165,Ff,Ff,0,Ff,Gg,00100,0
Aa,25.75,0.5,Cu,Dg,Ec,Eh,0.875,Ft,Ff,0,Ft,Gg,00491,0
Ab,26.00,1,Cu,Dg,Eq,Ev,1.75,Ft,Ff,0,Ft,Gg,00280,0
Ab,37.42,2.04,Cu,Dg,Ew,Ev,0.04,Ft,Ff,0,Ft,Gg,00400,5800
Ab,34.92,2.5,Cu,Dg,Ew,Ev,0,Ft,Ff,0,Ft,Gg,00239,200
Ab,34.25,3,Cu,Dg,Ecc,Eh,7.415,Ft,Ff,0,Ft,Gg,00000,0
Ab,23.33,11.625,Cy,Dp,Ew,Ev,0.835,Ft,Ff,0,Ft,Gg,00160,300
Ab,23.17,0,Cu,Dg,Ecc,Ev,0.085,Ft,Ff,0,Ff,Gg,00000,0
Ab,44.33,0.5,Cu,Dg,Ei,Eh,5,Ft,Ff,0,Ft,Gg,00320,0
Ab,35.17,4.5,Cu,Dg,Ex,Eh,5.75,Ff,Ff,0,Ft,Gs,00711,0
Ab,43.25,3,Cu,Dg,Eq,Eh,6,Ft,Ft,11,Ff,Gg,00080,0
Ab,56.75,12.25,Cu,Dg,Em,Ev,1.25,Ft,Ft,04,Ft,Gg,00200,0
Ab,31.67,16.165,Cu,Dg,Ed,Ev,3,Ft,Ft,09,Ff,Gg,00250,730
Aa,23.42,0.79,Cy,Dp,Eq,Ev,1.5,Ft,Ft,02,Ft,Gg,00080,400
Aa,20.42,0.835,Cu,Dg,Eq,Ev,1.585,Ft,Ft,01,Ff,Gg,00000,0
Ab,26.67,4.25,Cu,Dg,Ecc,Ev,4.29,Ft,Ft,01,Ft,Gg,00120,0
Ab,34.17,1.54,Cu,Dg,Ecc,Ev,1.54,Ft,Ft,01,Ft,Gg,00520,50000
Aa,36.00,1,Cu,Dg,Ec,Ev,2,Ft,Ft,11,Ff,Gg,00000,456
Ab,25.50,0.375,Cu,Dg,Em,Ev,0.25,Ft,Ft,03,Ff,Gg,00260,15108
Ab,19.42,6.5,Cu,Dg,Ew,Eh,1.46,Ft,Ft,07,Ff,Gg,00080,2954
Ab,35.17,25.125,Cu,Dg,Ex,Eh,1.625,Ft,Ft,01,Ft,Gg,00515,500
Ab,52.50,6.5,Cu,Dg,Ek,Ev,6.29,Ft,Ft,15,Ff,Gg,00000,11202
Ab,57.83,7.04,Cu,Dg,Em,Ev,14,Ft,Ft,06,Ft,Gg,00360,1332
Aa,20.75,10.335,Cu,Dg,Ecc,Eh,0.335,Ft,Ft,01,Ft,Gg,00080,50
Ab,39.92,6.21,Cu,Dg,Eq,Ev,0.04,Ft,Ft,01,Ff,Gg,00200,300
Ab,25.67,12.5,Cu,Dg,Ecc,Ev,1.21,Ft,Ft,67,Ft,Gg,00140,258
Aa,24.75,12.5,Cu,Dg,Eaa,Ev,1.5,Ft,Ft,12,Ft,Gg,00120,567
Aa,44.17,6.665,Cu,Dg,Eq,Ev,7.375,Ft,Ft,03,Ft,Gg,00000,0
Aa,23.50,9,Cu,Dg,Eq,Ev,8.5,Ft,Ft,05,Ft,Gg,00120,0
Ab,34.92,5,Cu,Dg,Ex,Eh,7.5,Ft,Ft,06,Ft,Gg,00000,1000
Ab,47.67,2.5,Cu,Dg,Em,Ebb,2.5,Ft,Ft,12,Ft,Gg,00410,2510
Ab,22.75,11,Cu,Dg,Eq,Ev,2.5,Ft,Ft,07,Ft,Gg,00100,809
Ab,34.42,4.25,Cu,Dg,Ei,Ebb,3.25,Ft,Ft,02,Ff,Gg,00274,610
Aa,28.42,3.5,Cu,Dg,Ew,Ev,0.835,Ft,Ff,0,Ff,Gs,00280,0
Ab,67.75,5.5,Cu,Dg,Ee,Ez,13,Ft,Ft,01,Ft,Gg,00000,0
Ab,20.42,1.835,Cu,Dg,Ec,Ev,2.25,Ft,Ft,01,Ff,Gg,00100,150
Aa,47.42,8,Cu,Dg,Ee,Ebb,6.5,Ft,Ft,06,Ff,Gg,00375,51100
Ab,36.25,5,Cu,Dg,Ec,Ebb,2.5,Ft,Ft,06,Ff,Gg,00000,367
Ab,32.67,5.5,Cu,Dg,Eq,Eh,5.5,Ft,Ft,12,Ft,Gg,00408,1000
Ab,48.58,6.5,Cu,Dg,Eq,Eh,6,Ft,Ff,0,Ft,Gg,00350,0
Ab,39.92,0.54,Cy,Dp,Eaa,Ev,0.5,Ft,Ft,03,Ff,Gg,00200,1000
Ab,33.58,2.75,Cu,Dg,Em,Ev,4.25,Ft,Ft,06,Ff,Gg,00204,0
Aa,18.83,9.5,Cu,Dg,Ew,Ev,1.625,Ft,Ft,06,Ft,Gg,00040,600
Aa,26.92,13.5,Cu,Dg,Eq,Eh,5,Ft,Ft,02,Ff,Gg,00000,5000
Aa,31.25,3.75,Cu,Dg,Ecc,Eh,0.625,Ft,Ft,09,Ft,Gg,00181,0
Aa,56.50,16,Cu,Dg,Ej,Eff,0,Ft,Ft,15,Ff,Gg,00000,247
Ab,43.00,0.29,Cy,Dp,Ecc,Eh,1.75,Ft,Ft,08,Ff,Gg,00100,375
Ab,22.33,11,Cu,Dg,Ew,Ev,2,Ft,Ft,01,Ff,Gg,00080,278
Ab,27.25,1.665,Cu,Dg,Ecc,Eh,5.085,Ft,Ft,09,Ff,Gg,00399,827
Ab,32.83,2.5,Cu,Dg,Ecc,Eh,2.75,Ft,Ft,06,Ff,Gg,00160,2072
Ab,23.25,1.5,Cu,Dg,Eq,Ev,2.375,Ft,Ft,03,Ft,Gg,00000,582
Aa,40.33,7.54,Cy,Dp,Eq,Eh,8,Ft,Ft,14,Ff,Gg,00000,2300
Aa,30.50,6.5,Cu,Dg,Ec,Ebb,4,Ft,Ft,07,Ft,Gg,00000,3065
Aa,52.83,15,Cu,Dg,Ec,Ev,5.5,Ft,Ft,14,Ff,Gg,00000,2200
Aa,46.67,0.46,Cu,Dg,Ecc,Eh,0.415,Ft,Ft,11,Ft,Gg,00440,6
Aa,58.33,10,Cu,Dg,Eq,Ev,4,Ft,Ft,14,Ff,Gg,00000,1602
Ab,37.33,6.5,Cu,Dg,Em,Eh,4.25,Ft,Ft,12,Ft,Gg,00093,0
Ab,23.08,2.5,Cu,Dg,Ec,Ev,1.085,Ft,Ft,11,Ft,Gg,00060,2184
Ab,32.75,1.5,Cu,Dg,Ecc,Eh,5.5,Ft,Ft,03,Ft,Gg,00000,0
Aa,21.67,11.5,Cy,Dp,Ej,Ej,0,Ft,Ft,11,Ft,Gg,00000,0
Aa,28.50,3.04,Cy,Dp,Ex,Eh,2.54,Ft,Ft,01,Ff,Gg,00070,0
Aa,68.67,15,Cu,Dg,Ee,Ez,0,Ft,Ft,14,Ff,Gg,00000,3376
Ab,28.00,2,Cu,Dg,Ek,Eh,4.165,Ft,Ft,02,Ft,Gg,00181,0
Ab,34.08,0.08,Cy,Dp,Em,Ebb,0.04,Ft,Ft,01,Ft,Gg,00280,2000
Ab,27.67,2,Cu,Dg,Ex,Eh,1,Ft,Ft,04,Ff,Gg,00140,7544
Ab,44.00,2,Cu,Dg,Em,Ev,1.75,Ft,Ft,02,Ft,Gg,00000,15
Ab,25.08,1.71,Cu,Dg,Ex,Ev,1.665,Ft,Ft,01,Ft,Gg,00395,20
Ab,32.00,1.75,Cy,Dp,Ee,Eh,0.04,Ft,Ff,0,Ft,Gg,00393,0
Aa,60.58,16.5,Cu,Dg,Eq,Ev,11,Ft,Ff,0,Ft,Gg,00021,10561
Aa,40.83,10,Cu,Dg,Eq,Eh,1.75,Ft,Ff,0,Ff,Gg,00029,837
Ab,19.33,9.5,Cu,Dg,Eq,Ev,1,Ft,Ff,0,Ft,Gg,00060,400
Aa,32.33,0.54,Cu,Dg,Ecc,Ev,0.04,Ft,Ff,0,Ff,Gg,00440,11177
Ab,36.67,3.25,Cu,Dg,Eq,Eh,9,Ft,Ff,0,Ft,Gg,00102,639
Ab,37.50,1.125,Cy,Dp,Ed,Ev,1.5,Ff,Ff,0,Ft,Gg,00431,0
Aa,25.08,2.54,Cy,Dp,Eaa,Ev,0.25,Ft,Ff,0,Ft,Gg,00370,0
Ab,41.33,0,Cu,Dg,Ec,Ebb,15,Ft,Ff,0,Ff,Gg,00000,0
Ab,56.00,12.5,Cu,Dg,Ek,Eh,8,Ft,Ff,0,Ft,Gg,00024,2028
Aa,49.83,13.585,Cu,Dg,Ek,Eh,8.5,Ft,Ff,0,Ft,Gg,00000,0
Ab,22.67,10.5,Cu,Dg,Eq,Eh,1.335,Ft,Ff,0,Ff,Gg,00100,0
Ab,27.00,1.5,Cy,Dp,Ew,Ev,0.375,Ft,Ff,0,Ft,Gg,00260,1065
Ab,25.00,12.5,Cu,Dg,Eaa,Ev,3,Ft,Ff,0,Ft,Gs,00020,0
Aa,26.08,8.665,Cu,Dg,Eaa,Ev,1.415,Ft,Ff,0,Ff,Gg,00160,150
Aa,18.42,9.25,Cu,Dg,Eq,Ev,1.21,Ft,Ft,04,Ff,Gg,00060,540
Ab,20.17,8.17,Cu,Dg,Eaa,Ev,1.96,Ft,Ft,14,Ff,Gg,00060,158
Ab,47.67,0.29,Cu,Dg,Ec,Ebb,15,Ft,Ft,20,Ff,Gg,00000,15000
Aa,21.25,2.335,Cu,Dg,Ei,Ebb,0.5,Ft,Ft,04,Ff,Gs,00080,0
Aa,20.67,3,Cu,Dg,Eq,Ev,0.165,Ft,Ft,03,Ff,Gg,00100,6
Aa,57.08,19.5,Cu,Dg,Ec,Ev,5.5,Ft,Ft,07,Ff,Gg,00000,3000
Aa,22.42,5.665,Cu,Dg,Eq,Ev,2.585,Ft,Ft,07,Ff,Gg,00129,3257
Ab,48.75,8.5,Cu,Dg,Ec,Eh,12.5,Ft,Ft,09,Ff,Gg,00181,1655
Ab,40.00,6.5,Cu,Dg,Eaa,Ebb,3.5,Ft,Ft,01,Ff,Gg,00000,500
Ab,40.58,5,Cu,Dg,Ec,Ev,5,Ft,Ft,07,Ff,Gg,00000,3065
Aa,28.67,1.04,Cu,Dg,Ec,Ev,2.5,Ft,Ft,05,Ft,Gg,00300,1430
Aa,33.08,4.625,Cu,Dg,Eq,Eh,1.625,Ft,Ft,02,Ff,Gg,00000,0
Ab,21.33,10.5,Cu,Dg,Ec,Ev,3,Ft,Ff,0,Ft,Gg,00000,0
Ab,42.00,0.205,Cu,Dg,Ei,Eh,5.125,Ft,Ff,0,Ff,Gg,00400,0
Ab,41.75,0.96,Cu,Dg,Ex,Ev,2.5,Ft,Ff,0,Ff,Gg,00510,600
Ab,22.67,1.585,Cy,Dp,Ew,Ev,3.085,Ft,Ft,06,Ff,Gg,00080,0
Ab,34.50,4.04,Cy,Dp,Ei,Ebb,8.5,Ft,Ft,07,Ft,Gg,00195,0
Ab,28.25,5.04,Cy,Dp,Ec,Ebb,1.5,Ft,Ft,08,Ft,Gg,00144,7
Ab,33.17,3.165,Cy,Dp,Ex,Ev,3.165,Ft,Ft,03,Ft,Gg,00380,0
Ab,48.17,7.625,Cu,Dg,Ew,Eh,15.5,Ft,Ft,12,Ff,Gg,00000,790
Ab,27.58,2.04,Cy,Dp,Eaa,Ev,2,Ft,Ft,03,Ft,Gg,00370,560
Ab,22.58,10.04,Cu,Dg,Ex,Ev,0.04,Ft,Ft,09,Ff,Gg,00060,396
Aa,24.08,0.5,Cu,Dg,Eq,Eh,1.25,Ft,Ft,01,Ff,Gg,00000,678
Aa,41.33,1,Cu,Dg,Ei,Ebb,2.25,Ft,Ff,0,Ft,Gg,00000,300
Ab,24.83,2.75,Cu,Dg,Ec,Ev,2.25,Ft,Ft,06,Ff,Gg,?,600
Aa,20.75,10.25,Cu,Dg,Eq,Ev,0.71,Ft,Ft,02,Ft,Gg,00049,0
Ab,36.33,2.125,Cy,Dp,Ew,Ev,0.085,Ft,Ft,01,Ff,Gg,00050,1187
Aa,35.42,12,Cu,Dg,Eq,Eh,14,Ft,Ft,08,Ff,Gg,00000,6590
Aa,71.58,0,?,?,?,?,0,Ff,Ff,0,Ff,Gp,?,0
Ab,28.67,9.335,Cu,Dg,Eq,Eh,5.665,Ft,Ft,06,Ff,Gg,00381,168
Ab,35.17,2.5,Cu,Dg,Ek,Ev,4.5,Ft,Ft,07,Ff,Gg,00150,1270
Ab,39.50,4.25,Cu,Dg,Ec,Ebb,6.5,Ft,Ft,16,Ff,Gg,00117,1210
Ab,39.33,5.875,Cu,Dg,Ecc,Eh,10,Ft,Ft,14,Ft,Gg,00399,0
Ab,24.33,6.625,Cy,Dp,Ed,Ev,5.5,Ft,Ff,0,Ft,Gs,00100,0
Ab,60.08,14.5,Cu,Dg,Eff,Eff,18,Ft,Ft,15,Ft,Gg,00000,1000
Ab,23.08,11.5,Cu,Dg,Ei,Ev,3.5,Ft,Ft,09,Ff,Gg,00056,742
Ab,26.67,2.71,Cy,Dp,Ecc,Ev,5.25,Ft,Ft,01,Ff,Gg,00211,0
Ab,48.17,3.5,Cu,Dg,Eaa,Ev,3.5,Ft,Ff,0,Ff,Gs,00230,0
Ab,41.17,4.04,Cu,Dg,Ecc,Eh,7,Ft,Ft,08,Ff,Gg,00320,0
Ab,55.92,11.5,Cu,Dg,Eff,Eff,5,Ft,Ft,05,Ff,Gg,00000,8851
Ab,53.92,9.625,Cu,Dg,Ee,Ev,8.665,Ft,Ft,05,Ff,Gg,00000,0
Aa,18.92,9.25,Cy,Dp,Ec,Ev,1,Ft,Ft,04,Ft,Gg,00080,500
Aa,50.08,12.54,Cu,Dg,Eaa,Ev,2.29,Ft,Ft,03,Ft,Gg,00156,0
Ab,65.42,11,Cu,Dg,Ee,Ez,20,Ft,Ft,07,Ft,Gg,00022,0
Aa,17.58,9,Cu,Dg,Eaa,Ev,1.375,Ft,Ff,0,Ft,Gg,00000,0
Aa,18.83,9.54,Cu,Dg,Eaa,Ev,0.085,Ft,Ff,0,Ff,Gg,00100,0
Aa,37.75,5.5,Cu,Dg,Eq,Ev,0.125,Ft,Ff,0,Ft,Gg,00228,0
Ab,23.25,4,Cu,Dg,Ec,Ebb,0.25,Ft,Ff,0,Ft,Gg,00160,0
Ab,18.08,5.5,Cu,Dg,Ek,Ev,0.5,Ft,Ff,0,Ff,Gg,00080,0
Aa,22.50,8.46,Cy,Dp,Ex,Ev,2.46,Ff,Ff,0,Ff,Gg,00164,0
Ab,19.67,0.375,Cu,Dg,Eq,Ev,2,Ft,Ft,02,Ft,Gg,00080,0
Ab,22.08,11,Cu,Dg,Ecc,Ev,0.665,Ft,Ff,0,Ff,Gg,00100,0
Ab,25.17,3.5,Cu,Dg,Ecc,Ev,0.625,Ft,Ft,07,Ff,Gg,00000,7059
Aa,47.42,3,Cu,Dg,Ex,Ev,13.875,Ft,Ft,02,Ft,Gg,00519,1704
Ab,33.50,1.75,Cu,Dg,Ex,Eh,4.5,Ft,Ft,04,Ft,Gg,00253,857
Ab,27.67,13.75,Cu,Dg,Ew,Ev,5.75,Ft,Ff,0,Ft,Gg,00487,500
Aa,58.42,21,Cu,Dg,Ei,Ebb,10,Ft,Ft,13,Ff,Gg,00000,6700
Aa,20.67,1.835,Cu,Dg,Eq,Ev,2.085,Ft,Ft,05,Ff,Gg,00220,2503
Ab,26.17,0.25,Cu,Dg,Ei,Ebb,0,Ft,Ff,0,Ft,Gg,00000,0
Ab,21.33,7.5,Cu,Dg,Eaa,Ev,1.415,Ft,Ft,01,Ff,Gg,00080,9800
Ab,42.83,4.625,Cu,Dg,Eq,Ev,4.58,Ft,Ff,0,Ff,Gs,00000,0
Ab,38.17,10.125,Cu,Dg,Ex,Ev,2.5,Ft,Ft,06,Ff,Gg,00520,196
Ab,20.50,10,Cy,Dp,Ec,Ev,2.5,Ft,Ff,0,Ff,Gs,00040,0
Ab,48.25,25.085,Cu,Dg,Ew,Ev,1.75,Ft,Ft,03,Ff,Gg,00120,14
Ab,28.33,5,Cu,Dg,Ew,Ev,11,Ft,Ff,0,Ft,Gg,00070,0
Aa,18.75,7.5,Cu,Dg,Eq,Ev,2.71,Ft,Ft,05,Ff,Gg,?,26726
Ab,18.50,2,Cu,Dg,Ei,Ev,1.5,Ft,Ft,02,Ff,Gg,00120,300
Ab,33.17,3.04,Cy,Dp,Ec,Eh,2.04,Ft,Ft,01,Ft,Gg,00180,18027
Ab,45.00,8.5,Cu,Dg,Ecc,Eh,14,Ft,Ft,01,Ft,Gg,00088,2000
Aa,19.67,0.21,Cu,Dg,Eq,Eh,0.29,Ft,Ft,11,Ff,Gg,00080,99
?,24.50,12.75,Cu,Dg,Ec,Ebb,4.75,Ft,Ft,02,Ff,Gg,00073,444
Ab,21.83,11,Cu,Dg,Ex,Ev,0.29,Ft,Ft,06,Ff,Gg,00121,0
Ab,40.25,21.5,Cu,Dg,Ee,Ez,20,Ft,Ft,11,Ff,Gg,00000,1200
Ab,41.42,5,Cu,Dg,Eq,Eh,5,Ft,Ft,06,Ft,Gg,00470,0
Aa,17.83,11,Cu,Dg,Ex,Eh,1,Ft,Ft,11,Ff,Gg,00000,3000
Ab,23.17,11.125,Cu,Dg,Ex,Eh,0.46,Ft,Ft,01,Ff,Gg,00100,0
Ab,59.67,1.54,Cu,Dg,Eq,Ev,0.125,Ft,Ff,0,Ft,Gg,00260,0
Ab,18.00,0.165,Cu,Dg,Eq,En,0.21,Ff,Ff,0,Ff,Gg,00200,40
Ab,37.58,0,?,?,?,?,0,Ff,Ff,0,Ff,Gp,?,0
Ab,17.50,22,Cl,Dgg,Eff,Eo,0,Ff,Ff,0,Ft,Gp,00450,100000
Ab,19.17,0,Cy,Dp,Em,Ebb,0,Ff,Ff,0,Ft,Gs,00500,1
Ab,36.75,0.125,Cy,Dp,Ec,Ev,1.5,Ff,Ff,0,Ft,Gg,00232,113
Ab,21.25,1.5,Cu,Dg,Ew,Ev,1.5,Ff,Ff,0,Ff,Gg,00150,8
Aa,18.08,0.375,Cl,Dgg,Ecc,Eff,10,Ff,Ff,0,Ft,Gs,00300,0
Aa,33.67,0.375,Cu,Dg,Ecc,Ev,0.375,Ff,Ff,0,Ff,Gg,00300,44
Ab,48.58,0.205,Cy,Dp,Ek,Ev,0.25,Ft,Ft,11,Ff,Gg,00380,2732
;
Ab,32.33,7.5,Cu,Dg,Ee,Ebb,1.585,Ft,Ff,0,Ft,Gs,00420,0
Ab,34.83,4,Cu,Dg,Ed,Ebb,12.5,Ft,Ff,0,Ft,Gg,?,0
Aa,38.58,5,Cu,Dg,Ecc,Ev,13.5,Ft,Ff,0,Ft,Gg,00980,0
Ab,44.25,0.5,Cu,Dg,Em,Ev,10.75,Ft,Ff,0,Ff,Gs,00400,0
Ab,44.83,7,Cy,Dp,Ec,Ev,1.625,Ff,Ff,0,Ff,Gg,00160,2
Ab,20.67,5.29,Cu,Dg,Eq,Ev,0.375,Ft,Ft,01,Ff,Gg,00160,0
Ab,34.08,6.5,Cu,Dg,Eaa,Ev,0.125,Ft,Ff,0,Ft,Gg,00443,0
Aa,19.17,0.585,Cy,Dp,Eaa,Ev,0.585,Ft,Ff,0,Ft,Gg,00160,0
Ab,21.67,1.165,Cy,Dp,Ek,Ev,2.5,Ft,Ft,01,Ff,Gg,00180,20
Ab,21.50,9.75,Cu,Dg,Ec,Ev,0.25,Ft,Ff,0,Ff,Gg,00140,0
Ab,49.58,19,Cu,Dg,Eff,Eff,0,Ft,Ft,01,Ff,Gg,00094,0
Aa,27.67,1.5,Cu,Dg,Em,Ev,2,Ft,Ff,0,Ff,Gs,00368,0
Ab,39.83,0.5,Cu,Dg,Em,Ev,0.25,Ft,Ff,0,Ff,Gs,00288,0
Aa,?,3.5,Cu,Dg,Ed,Ev,3,Ft,Ff,0,Ft,Gg,00300,0
Ab,27.25,0.625,Cu,Dg,Eaa,Ev,0.455,Ft,Ff,0,Ft,Gg,00200,0
Ab,37.17,4,Cu,Dg,Ec,Ebb,5,Ft,Ff,0,Ft,Gs,00280,0
Ab,?,0.375,Cu,Dg,Ed,Ev,0.875,Ft,Ff,0,Ft,Gs,00928,0
Ab,25.67,2.21,Cy,Dp,Eaa,Ev,4,Ft,Ff,0,Ff,Gg,00188,0
Ab,34.00,4.5,Cu,Dg,Eaa,Ev,1,Ft,Ff,0,Ft,Gg,00240,0
Aa,49.00,1.5,Cu,Dg,Ej,Ej,0,Ft,Ff,0,Ft,Gg,00100,27
Ab,62.50,12.75,Cy,Dp,Ec,Eh,5,Ft,Ff,0,Ff,Gg,00112,0
Ab,31.42,15.5,Cu,Dg,Ec,Ev,0.5,Ft,Ff,0,Ff,Gg,00120,0
Ab,?,5,Cy,Dp,Eaa,Ev,8.5,Ft,Ff,0,Ff,Gg,00000,0
Ab,52.33,1.375,Cy,Dp,Ec,Eh,9.46,Ft,Ff,0,Ft,Gg,00200,100
Ab,28.75,1.5,Cy,Dp,Ec,Ev,1.5,Ft,Ff,0,Ft,Gg,00000,225
Aa,28.58,3.54,Cu,Dg,Ei,Ebb,0.5,Ft,Ff,0,Ft,Gg,00171,0
Ab,23.00,0.625,Cy,Dp,Eaa,Ev,0.125,Ft,Ff,0,Ff,Gg,00180,1
Ab,?,0.5,Cu,Dg,Ec,Ebb,0.835,Ft,Ff,0,Ft,Gs,00320,0
Aa,22.50,11,Cy,Dp,Eq,Ev,3,Ft,Ff,0,Ft,Gg,00268,0
Aa,28.50,1,Cu,Dg,Eq,Ev,1,Ft,Ft,02,Ft,Gg,00167,500
Ab,37.50,1.75,Cy,Dp,Ec,Ebb,0.25,Ft,Ff,0,Ft,Gg,00164,400
Ab,35.25,16.5,Cy,Dp,Ec,Ev,4,Ft,Ff,0,Ff,Gg,00080,0
Ab,18.67,5,Cu,Dg,Eq,Ev,0.375,Ft,Ft,02,Ff,Gg,00000,38
Ab,25.00,12,Cu,Dg,Ek,Ev,2.25,Ft,Ft,02,Ft,Gg,00120,5
Ab,27.83,4,Cy,Dp,Ei,Eh,5.75,Ft,Ft,02,Ft,Gg,00075,0
Ab,54.83,15.5,Cu,Dg,Ee,Ez,0,Ft,Ft,20,Ff,Gg,00152,130
Ab,28.75,1.165,Cu,Dg,Ek,Ev,0.5,Ft,Ff,0,Ff,Gs,00280,0
Aa,25.00,11,Cy,Dp,Eaa,Ev,4.5,Ft,Ff,0,Ff,Gg,00120,0
Ab,40.92,2.25,Cy,Dp,Ex,Eh,10,Ft,Ff,0,Ft,Gg,00176,0
Aa,19.75,0.75,Cu,Dg,Ec,Ev,0.795,Ft,Ft,05,Ft,Gg,00140,5
Ab,29.17,3.5,Cu,Dg,Ew,Ev,3.5,Ft,Ft,03,Ft,Gg,00329,0
Aa,24.50,1.04,Cy,Dp,Eff,Eff,0.5,Ft,Ft,03,Ff,Gg,00180,147
Ab,24.58,12.5,Cu,Dg,Ew,Ev,0.875,Ft,Ff,0,Ft,Gg,00260,0
Aa,33.75,0.75,Cu,Dg,Ek,Ebb,1,Ft,Ft,03,Ft,Gg,00212,0
Ab,20.67,1.25,Cy,Dp,Ec,Eh,1.375,Ft,Ft,03,Ft,Gg,00140,210
Aa,25.42,1.125,Cu,Dg,Eq,Ev,1.29,Ft,Ft,02,Ff,Gg,00200,0
Ab,37.75,7,Cu,Dg,Eq,Eh,11.5,Ft,Ft,07,Ft,Gg,00300,5
Ab,?,0.625,Cu,Dg,Ek,Ev,0.25,Ff,Ff,0,Ff,Gg,00380,2010
Ab,18.17,10.25,Cu,Dg,Ec,Eh,1.085,Ff,Ff,0,Ff,Gg,00320,13
Ab,20.00,11.045,Cu,Dg,Ec,Ev,2,Ff,Ff,0,Ft,Gg,00136,0
Ab,20.00,0,Cu,Dg,Ed,Ev,0.5,Ff,Ff,0,Ff,Gg,00144,0
Aa,20.75,9.54,Cu,Dg,Ei,Ev,0.04,Ff,Ff,0,Ff,Gg,00200,1000
Aa,24.50,1.75,Cy,Dp,Ec,Ev,0.165,Ff,Ff,0,Ff,Gg,00132,0
Ab,32.75,2.335,Cu,Dg,Ed,Eh,5.75,Ff,Ff,0,Ft,Gg,00292,0
Aa,52.17,0,Cy,Dp,Eff,Eff,0,Ff,Ff,0,Ff,Gg,00000,0
Aa,48.17,1.335,Cu,Dg,Ei,Eo,0.335,Ff,Ff,0,Ff,Gg,00000,120
Aa,20.42,10.5,Cy,Dp,Ex,Eh,0,Ff,Ff,0,Ft,Gg,00154,32
Ab,50.75,0.585,Cu,Dg,Eff,Eff,0,Ff,Ff,0,Ff,Gg,00145,0
Ab,17.08,0.085,Cy,Dp,Ec,Ev,0.04,Ff,Ff,0,Ff,Gg,00140,722
Ab,18.33,1.21,Cy,Dp,Ee,Edd,0,Ff,Ff,0,Ff,Gg,00100,0
Aa,32.00,6,Cu,Dg,Ed,Ev,1.25,Ff,Ff,0,Ff,Gg,00272,0
Ab,32.33,2.5,Cu,Dg,Ec,Ev,1.25,Ff,Ff,0,Ft,Gg,00280,0
Ab,18.08,6.75,Cy,Dp,Em,Ev,0.04,Ff,Ff,0,Ff,Gg,00140,0
Ab,38.25,10.125,Cy,Dp,Ek,Ev,0.125,Ff,Ff,0,Ff,Gg,00160,0
Ab,30.67,2.5,Cu,Dg,Ecc,Eh,2.25,Ff,Ff,0,Ft,Gs,00340,0
Ab,18.58,5.71,Cu,Dg,Ed,Ev,0.54,Ff,Ff,0,Ff,Gg,00120,0
Aa,19.17,5.415,Cu,Dg,Ei,Eh,0.29,Ff,Ff,0,Ff,Gg,00080,484
Aa,18.17,10,Cy,Dp,Eq,Eh,0.165,Ff,Ff,0,Ff,Gg,00340,0
Ab,24.58,13.5,Cy,Dp,Eff,Eff,0,Ff,Ff,0,Ff,Gg,?,0
Ab,16.25,0.835,Cu,Dg,Em,Ev,0.085,Ft,Ff,0,Ff,Gs,00200,0
Ab,21.17,0.875,Cy,Dp,Ec,Eh,0.25,Ff,Ff,0,Ff,Gg,00280,204
Ab,23.92,0.585,Cy,Dp,Ecc,Eh,0.125,Ff,Ff,0,Ff,Gg,00240,1
Ab,17.67,4.46,Cu,Dg,Ec,Ev,0.25,Ff,Ff,0,Ff,Gs,00080,0
Aa,16.50,1.25,Cu,Dg,Eq,Ev,0.25,Ff,Ft,01,Ff,Gg,00108,98
Ab,23.25,12.625,Cu,Dg,Ec,Ev,0.125,Ff,Ft,02,Ff,Gg,00000,5552
Ab,17.58,10,Cu,Dg,Ew,Eh,0.165,Ff,Ft,01,Ff,Gg,00120,1
Aa,?,1.5,Cu,Dg,Eff,Eff,0,Ff,Ft,02,Ft,Gg,00200,105
Ab,29.50,0.58,Cu,Dg,Ew,Ev,0.29,Ff,Ft,01,Ff,Gg,00340,2803
Ab,18.83,0.415,Cy,Dp,Ec,Ev,0.165,Ff,Ft,01,Ff,Gg,00200,1
Aa,21.75,1.75,Cy,Dp,Ej,Ej,0,Ff,Ff,0,Ff,Gg,00160,0
Ab,23.00,0.75,Cu,Dg,Em,Ev,0.5,Ff,Ff,0,Ft,Gs,00320,0
Aa,18.25,10,Cu,Dg,Ew,Ev,1,Ff,Ft,01,Ff,Gg,00120,1
Ab,25.42,0.54,Cu,Dg,Ew,Ev,0.165,Ff,Ft,01,Ff,Gg,00272,444
Ab,35.75,2.415,Cu,Dg,Ew,Ev,0.125,Ff,Ft,02,Ff,Gg,00220,1
Aa,16.08,0.335,Cu,Dg,Eff,Eff,0,Ff,Ft,01,Ff,Gg,00160,126
Aa,31.92,3.125,Cu,Dg,Eff,Eff,3.04,Ff,Ft,02,Ft,Gg,00200,4
Ab,69.17,9,Cu,Dg,Eff,Eff,4,Ff,Ft,01,Ff,Gg,00070,6
Ab,32.92,2.5,Cu,Dg,Eaa,Ev,1.75,Ff,Ft,02,Ft,Gg,00720,0
Ab,16.33,2.75,Cu,Dg,Eaa,Ev,0.665,Ff,Ft,01,Ff,Gg,00080,21
Ab,22.17,12.125,Cu,Dg,Ec,Ev,3.335,Ff,Ft,02,Ft,Gg,00180,173
Aa,57.58,2,Cu,Dg,Eff,Eff,6.5,Ff,Ft,01,Ff,Gg,00000,10
Ab,18.25,0.165,Cu,Dg,Ed,Ev,0.25,Ff,Ff,0,Ft,Gs,00280,0
Ab,23.42,1,Cu,Dg,Ec,Ev,0.5,Ff,Ff,0,Ft,Gs,00280,0
Aa,15.92,2.875,Cu,Dg,Eq,Ev,0.085,Ff,Ff,0,Ff,Gg,00120,0
Aa,24.75,13.665,Cu,Dg,Eq,Eh,1.5,Ff,Ff,0,Ff,Gg,00280,1
Ab,48.75,26.335,Cy,Dp,Eff,Eff,0,Ft,Ff,0,Ft,Gg,00000,0
Ab,23.50,2.75,Cu,Dg,Eff,Eff,4.5,Ff,Ff,0,Ff,Gg,00160,25
Ab,18.58,10.29,Cu,Dg,Eff,Eff,0.415,Ff,Ff,0,Ff,Gg,00080,0
Ab,27.75,1.29,Cu,Dg,Ek,Eh,0.25,Ff,Ff,0,Ft,Gs,00140,0
Aa,31.75,3,Cy,Dp,Ej,Ej,0,Ff,Ff,0,Ff,Gg,00160,20
Aa,24.83,4.5,Cu,Dg,Ew,Ev,1,Ff,Ff,0,Ft,Gg,00360,6
Ab,19.00,1.75,Cy,Dp,Ec,Ev,2.335,Ff,Ff,0,Ft,Gg,00112,6
Aa,16.33,0.21,Cu,Dg,Eaa,Ev,0.125,Ff,Ff,0,Ff,Gg,00200,1
Aa,18.58,10,Cu,Dg,Ed,Ev,0.415,Ff,Ff,0,Ff,Gg,00080,42
Ab,16.25,0,Cy,Dp,Eaa,Ev,0.25,Ff,Ff,0,Ff,Gg,00060,0
Ab,23.00,0.75,Cu,Dg,Em,Ev,0.5,Ft,Ff,0,Ft,Gs,00320,0
Ab,21.17,0.25,Cy,Dp,Ec,Eh,0.25,Ff,Ff,0,Ff,Gg,00280,204
Ab,33.67,1.25,Cu,Dg,Ew,Ev,1.165,Ff,Ff,0,Ff,Gg,00120,0
Aa,29.50,1.085,Cy,Dp,Ex,Ev,1,Ff,Ff,0,Ff,Gg,00280,13
Ab,30.17,1.085,Cy,Dp,Ec,Ev,0.04,Ff,Ff,0,Ff,Gg,00170,179
?,40.83,3.5,Cu,Dg,Ei,Ebb,0.5,Ff,Ff,0,Ff,Gs,01160,0
Ab,34.83,2.5,Cy,Dp,Ew,Ev,3,Ff,Ff,0,Ff,Gs,00200,0
Ab,?,4,Cy,Dp,Ei,Ev,0.085,Ff,Ff,0,Ft,Gg,00411,0
Ab,20.42,0,?,?,?,?,0,Ff,Ff,0,Ff,Gp,?,0
Aa,33.25,2.5,Cy,Dp,Ec,Ev,2.5,Ff,Ff,0,Ft,Gg,00000,2
Ab,34.08,2.5,Cu,Dg,Ec,Ev,1,Ff,Ff,0,Ff,Gg,00460,16
Aa,25.25,12.5,Cu,Dg,Ed,Ev,1,Ff,Ff,0,Ft,Gg,00180,1062
Ab,34.75,2.5,Cu,Dg,Ecc,Ebb,0.5,Ff,Ff,0,Ff,Gg,00348,0
Ab,27.67,0.75,Cu,Dg,Eq,Eh,0.165,Ff,Ff,0,Ft,Gg,00220,251
Ab,47.33,6.5,Cu,Dg,Ec,Ev,1,Ff,Ff,0,Ft,Gg,00000,228
Aa,34.83,1.25,Cy,Dp,Ei,Eh,0.5,Ff,Ff,0,Ft,Gg,00160,0
Aa,33.25,3,Cy,Dp,Eaa,Ev,2,Ff,Ff,0,Ff,Gg,00180,0
Ab,28.00,3,Cu,Dg,Ew,Ev,0.75,Ff,Ff,0,Ft,Gg,00300,67
Aa,39.08,4,Cu,Dg,Ec,Ev,3,Ff,Ff,0,Ff,Gg,00480,0
Ab,42.75,4.085,Cu,Dg,Eaa,Ev,0.04,Ff,Ff,0,Ff,Gg,00108,100
Ab,26.92,2.25,Cu,Dg,Ei,Ebb,0.5,Ff,Ff,0,Ft,Gg,00640,4000
Ab,33.75,2.75,Cu,Dg,Ei,Ebb,0,Ff,Ff,0,Ff,Gg,00180,0
Ab,38.92,1.75,Cu,Dg,Ek,Ev,0.5,Ff,Ff,0,Ft,Gg,00300,2
Ab,62.75,7,Cu,Dg,Ee,Ez,0,Ff,Ff,0,Ff,Gg,00000,12
?,32.25,1.5,Cu,Dg,Ec,Ev,0.25,Ff,Ff,0,Ft,Gg,00372,122
Ab,26.75,4.5,Cy,Dp,Ec,Ebb,2.5,Ff,Ff,0,Ff,Gg,00200,1210
Ab,63.33,0.54,Cu,Dg,Ec,Ev,0.585,Ft,Ft,03,Ft,Gg,00180,0
Ab,27.83,1.5,Cu,Dg,Ew,Ev,2.25,Ff,Ft,01,Ft,Gg,00100,3
Aa,26.17,2,Cu,Dg,Ej,Ej,0,Ff,Ff,0,Ft,Gg,00276,1
Ab,22.17,0.585,Cy,Dp,Eff,Eff,0,Ff,Ff,0,Ff,Gg,00100,0
Ab,22.50,11.5,Cy,Dp,Em,Ev,1.5,Ff,Ff,0,Ft,Gg,00000,4000
Ab,30.75,1.585,Cu,Dg,Ed,Ev,0.585,Ff,Ff,0,Ft,Gs,00000,0
Ab,36.67,2,Cu,Dg,Ei,Ev,0.25,Ff,Ff,0,Ft,Gg,00221,0
Aa,16.00,0.165,Cu,Dg,Eaa,Ev,1,Ff,Ft,02,Ft,Gg,00320,1
Ab,41.17,1.335,Cu,Dg,Ed,Ev,0.165,Ff,Ff,0,Ff,Gg,00168,0
Aa,19.50,0.165,Cu,Dg,Eq,Ev,0.04,Ff,Ff,0,Ft,Gg,00380,0
Ab,32.42,3,Cu,Dg,Ed,Ev,0.165,Ff,Ff,0,Ft,Gg,00120,0
Aa,36.75,4.71,Cu,Dg,Eff,Eff,0,Ff,Ff,0,Ff,Gg,00160,0
Aa,30.25,5.5,Cu,Dg,Ek,Ev,5.5,Ff,Ff,0,Ft,Gs,00100,0
Ab,23.08,2.5,Cu,Dg,Eff,Eff,0.085,Ff,Ff,0,Ft,Gg,00100,4208
Ab,26.83,0.54,Cu,Dg,Ek,Eff,0,Ff,Ff,0,Ff,Gg,00100,0
Ab,16.92,0.335,Cy,Dp,Ek,Ev,0.29,Ff,Ff,0,Ff,Gs,00200,0
Ab,24.42,2,Cu,Dg,Ee,Edd,0.165,Ff,Ft,02,Ff,Gg,00320,1300
Ab,42.83,1.25,Cu,Dg,Em,Ev,13.875,Ff,Ft,01,Ft,Gg,00352,112
Aa,22.75,6.165,Cu,Dg,Eaa,Ev,0.165,Ff,Ff,0,Ff,Gg,00220,1000
Ab,39.42,1.71,Cy,Dp,Em,Ev,0.165,Ff,Ff,0,Ff,Gs,00400,0
Aa,23.58,11.5,Cy,Dp,Ek,Eh,3,Ff,Ff,0,Ft,Gg,00020,16
Ab,21.42,0.75,Cy,Dp,Er,En,0.75,Ff,Ff,0,Ft,Gg,00132,2
Ab,33.00,2.5,Cy,Dp,Ew,Ev,7,Ff,Ff,0,Ft,Gg,00280,0
Ab,26.33,13,Cu,Dg,Ee,Edd,0,Ff,Ff,0,Ft,Gg,00140,1110
Aa,45.00,4.585,Cu,Dg,Ek,Eh,1,Ff,Ff,0,Ft,Gs,00240,0
Ab,26.25,1.54,Cu,Dg,Ew,Ev,0.125,Ff,Ff,0,Ff,Gg,00100,0
?,28.17,0.585,Cu,Dg,Eaa,Ev,0.04,Ff,Ff,0,Ff,Gg,00260,1004
Aa,20.83,0.5,Cy,Dp,Ee,Edd,1,Ff,Ff,0,Ff,Gg,00260,0
Ab,28.67,14.5,Cu,Dg,Ed,Ev,0.125,Ff,Ff,0,Ff,Gg,00000,286
Ab,20.67,0.835,Cy,Dp,Ec,Ev,2,Ff,Ff,0,Ft,Gs,00240,0
Ab,34.42,1.335,Cu,Dg,Ei,Ebb,0.125,Ff,Ff,0,Ft,Gg,00440,4500
Ab,33.58,0.25,Cu,Dg,Ei,Ebb,4,Ff,Ff,0,Ft,Gs,00420,0
Ab,43.17,5,Cu,Dg,Ei,Ebb,2.25,Ff,Ff,0,Ft,Gg,00141,0
Aa,22.67,7,Cu,Dg,Ec,Ev,0.165,Ff,Ff,0,Ff,Gg,00160,0
Aa,24.33,2.5,Cy,Dp,Ei,Ebb,4.5,Ff,Ff,0,Ff,Gg,00200,456
Aa,56.83,4.25,Cy,Dp,Eff,Eff,5,Ff,Ff,0,Ft,Gg,00000,4
Ab,22.08,11.46,Cu,Dg,Ek,Ev,1.585,Ff,Ff,0,Ft,Gg,00100,1212
Ab,34.00,5.5,Cy,Dp,Ec,Ev,1.5,Ff,Ff,0,Ft,Gg,00060,0
Ab,22.58,1.5,Cy,Dp,Eaa,Ev,0.54,Ff,Ff,0,Ft,Gg,00120,67
Ab,21.17,0,Cu,Dg,Ec,Ev,0.5,Ff,Ff,0,Ft,Gs,00000,0
Ab,26.67,14.585,Cu,Dg,Ei,Ebb,0,Ff,Ff,0,Ft,Gg,00178,0
Ab,22.92,0.17,Cu,Dg,Em,Ev,0.085,Ff,Ff,0,Ff,Gs,00000,0
Ab,15.17,7,Cu,Dg,Ee,Ev,1,Ff,Ff,0,Ff,Gg,00600,0
Ab,39.92,5,Cu,Dg,Ei,Ebb,0.21,Ff,Ff,0,Ff,Gg,00550,0
Ab,27.42,12.5,Cu,Dg,Eaa,Ebb,0.25,Ff,Ff,0,Ft,Gg,00720,0
Ab,24.75,0.54,Cu,Dg,Em,Ev,1,Ff,Ff,0,Ft,Gg,00120,1
Ab,41.17,1.25,Cy,Dp,Ew,Ev,0.25,Ff,Ff,0,Ff,Gg,00000,195
Aa,33.08,1.625,Cu,Dg,Ed,Ev,0.54,Ff,Ff,0,Ft,Gg,00000,0
Ab,29.83,2.04,Cy,Dp,Ex,Eh,0.04,Ff,Ff,0,Ff,Gg,00128,1
Aa,23.58,0.585,Cy,Dp,Eff,Eff,0.125,Ff,Ff,0,Ff,Gg,00120,87
Ab,26.17,12.5,Cy,Dp,Ek,Eh,1.25,Ff,Ff,0,Ft,Gg,00000,17
Ab,31.00,2.085,Cu,Dg,Ec,Ev,0.085,Ff,Ff,0,Ff,Gg,00300,0
Ab,20.75,5.085,Cy,Dp,Ej,Ev,0.29,Ff,Ff,0,Ff,Gg,00140,184
Ab,28.92,0.375,Cu,Dg,Ec,Ev,0.29,Ff,Ff,0,Ff,Gg,00220,140
Aa,51.92,6.5,Cu,Dg,Ei,Ebb,3.085,Ff,Ff,0,Ft,Gg,00073,0
Aa,22.67,0.335,Cu,Dg,Eq,Ev,0.75,Ff,Ff,0,Ff,Gs,00160,0
Ab,34.00,5.085,Cy,Dp,Ei,Ebb,1.085,Ff,Ff,0,Ft,Gg,00480,0
Aa,69.50,6,Cu,Dg,Eff,Eff,0,Ff,Ff,0,Ff,Gs,00000,0
Aa,40.33,8.125,Cy,Dp,Ek,Ev,0.165,Ff,Ft,02,Ff,Gg,?,18
Aa,19.58,0.665,Cy,Dp,Ec,Ev,1,Ff,Ft,01,Ff,Gg,02000,2
Ab,16.00,3.125,Cu,Dg,Ew,Ev,0.085,Ff,Ft,01,Ff,Gg,00000,6
Ab,17.08,0.25,Cu,Dg,Eq,Ev,0.335,Ff,Ft,04,Ff,Gg,00160,8
Ab,31.25,2.835,Cu,Dg,Eff,Eff,0,Ff,Ft,05,Ff,Gg,00176,146
Ab,25.17,3,Cu,Dg,Ec,Ev,1.25,Ff,Ft,01,Ff,Gg,00000,22
Aa,22.67,0.79,Cu,Dg,Ei,Ev,0.085,Ff,Ff,0,Ff,Gg,00144,0
Ab,40.58,1.5,Cu,Dg,Ei,Ebb,0,Ff,Ff,0,Ff,Gs,00300,0
Ab,22.25,0.46,Cu,Dg,Ek,Ev,0.125,Ff,Ff,0,Ft,Gg,00280,55
Aa,22.25,1.25,Cy,Dp,Eff,Eff,3.25,Ff,Ff,0,Ff,Gg,00280,0
Ab,22.50,0.125,Cy,Dp,Ek,Ev,0.125,Ff,Ff,0,Ff,Gg,00200,70
Ab,23.58,1.79,Cu,Dg,Ec,Ev,0.54,Ff,Ff,0,Ft,Gg,00136,1
Ab,38.42,0.705,Cu,Dg,Ec,Ev,0.375,Ff,Ft,02,Ff,Gg,00225,500
Aa,26.58,2.54,Cy,Dp,Eff,Eff,0,Ff,Ff,0,Ft,Gg,00180,60
Ab,35.00,2.5,Cu,Dg,Ei,Ev,1,Ff,Ff,0,Ft,Gg,00210,0
Ab,20.42,1.085,Cu,Dg,Eq,Ev,1.5,Ff,Ff,0,Ff,Gg,00108,7
Ab,29.42,1.25,Cu,Dg,Ew,Ev,1.75,Ff,Ff,0,Ff,Gg,00200,0
Ab,26.17,0.835,Cu,Dg,Ecc,Ev,1.165,Ff,Ff,0,Ff,Gg,00100,0
Ab,33.67,2.165,Cu,Dg,Ec,Ev,1.5,Ff,Ff,0,Ff,Gp,00120,0
Ab,24.58,1.25,Cu,Dg,Ec,Ev,0.25,Ff,Ff,0,Ff,Gg,00110,0
Aa,27.67,2.04,Cu,Dg,Ew,Ev,0.25,Ff,Ff,0,Ft,Gg,00180,50
Ab,37.50,0.835,Cu,Dg,Ee,Ev,0.04,Ff,Ff,0,Ff,Gg,00120,5
Ab,49.17,2.29,Cu,Dg,Eff,Eff,0.29,Ff,Ff,0,Ff,Gg,00200,3
Ab,33.58,0.335,Cy,Dp,Ecc,Ev,0.085,Ff,Ff,0,Ff,Gg,00180,0
Ab,51.83,3,Cy,Dp,Eff,Eff,1.5,Ff,Ff,0,Ff,Gg,00180,4
Ab,22.92,3.165,Cy,Dp,Ec,Ev,0.165,Ff,Ff,0,Ff,Gg,00160,1058
Ab,21.83,1.54,Cu,Dg,Ek,Ev,0.085,Ff,Ff,0,Ft,Gg,00356,0
Ab,25.25,1,Cu,Dg,Eaa,Ev,0.5,Ff,Ff,0,Ff,Gg,00200,0
Ab,58.58,2.71,Cu,Dg,Ec,Ev,2.415,Ff,Ff,0,Ft,Gg,00320,0
Ab,19.00,0,Cy,Dp,Eff,Eff,0,Ff,Ft,04,Ff,Gg,00045,1
Ab,19.58,0.585,Cu,Dg,Eff,Eff,0,Ff,Ft,03,Ff,Gg,00350,769
Aa,53.33,0.165,Cu,Dg,Eff,Eff,0,Ff,Ff,0,Ft,Gs,00062,27
Aa,27.17,1.25,Cu,Dg,Eff,Eff,0,Ff,Ft,01,Ff,Gg,00092,300
Ab,25.92,0.875,Cu,Dg,Ek,Ev,0.375,Ff,Ft,02,Ft,Gg,00174,3
Ab,23.08,0,Cu,Dg,Ek,Ev,1,Ff,Ft,11,Ff,Gs,00000,0
Ab,39.58,5,Cu,Dg,Eff,Eff,0,Ff,Ft,02,Ff,Gg,00017,1
Ab,30.58,2.71,Cy,Dp,Em,Ev,0.125,Ff,Ff,0,Ft,Gs,00080,0
Ab,17.25,3,Cu,Dg,Ek,Ev,0.04,Ff,Ff,0,Ft,Gg,00160,40
Aa,17.67,0,Cy,Dp,Ej,Eff,0,Ff,Ff,0,Ff,Gg,00086,0
Aa,?,11.25,Cu,Dg,Eff,Eff,0,Ff,Ff,0,Ff,Gg,?,5200
Ab,16.50,0.125,Cu,Dg,Ec,Ev,0.165,Ff,Ff,0,Ff,Gg,00132,0
Aa,27.33,1.665,Cu,Dg,Eff,Eff,0,Ff,Ff,0,Ff,Gg,00340,1
Ab,31.25,1.125,Cu,Dg,Eff,Eff,0,Ff,Ft,01,Ff,Gg,00096,19
Ab,20.00,7,Cu,Dg,Ec,Ev,0.5,Ff,Ff,0,Ff,Gg,00000,0
Ab,?,3,Cy,Dp,Ei,Ebb,7,Ff,Ff,0,Ff,Gg,00000,1
Ab,39.50,1.625,Cu,Dg,Ec,Ev,1.5,Ff,Ff,0,Ff,Gg,00000,316
Ab,36.50,4.25,Cu,Dg,Eq,Ev,3.5,Ff,Ff,0,Ff,Gg,00454,50
?,29.75,0.665,Cu,Dg,Ew,Ev,0.25,Ff,Ff,0,Ft,Gg,00300,0
Ab,52.42,1.5,Cu,Dg,Ed,Ev,3.75,Ff,Ff,0,Ft,Gg,00000,350
Ab,36.17,18.125,Cu,Dg,Ew,Ev,0.085,Ff,Ff,0,Ff,Gg,00320,3552
Ab,34.58,0,?,?,?,?,0,Ff,Ff,0,Ff,Gp,?,0
Ab,29.67,0.75,Cy,Dp,Ec,Ev,0.04,Ff,Ff,0,Ff,Gg,00240,0
Ab,36.17,5.5,Cu,Dg,Ei,Ebb,5,Ff,Ff,0,Ff,Gg,00210,687
Ab,25.67,0.29,Cy,Dp,Ec,Ev,1.5,Ff,Ff,0,Ft,Gg,00160,0
Aa,24.50,2.415,Cy,Dp,Ec,Ev,0,Ff,Ff,0,Ff,Gg,00120,0
Ab,24.08,0.875,Cu,Dg,Em,Ev,0.085,Ff,Ft,04,Ff,Gg,00254,1950
Ab,21.92,0.5,Cu,Dg,Ec,Ev,0.125,Ff,Ff,0,Ff,Gg,00360,0
Aa,36.58,0.29,Cu,Dg,Eff,Eff,0,Ff,Ft,10,Ff,Gg,00200,18
Aa,23.00,1.835,Cu,Dg,Ej,Ej,0,Ff,Ft,01,Ff,Gg,00200,53
Aa,27.58,3,Cu,Dg,Em,Ev,2.79,Ff,Ft,01,Ft,Gg,00280,10
Ab,31.08,3.085,Cu,Dg,Ec,Ev,2.5,Ff,Ft,02,Ft,Gg,00160,41
Aa,30.42,1.375,Cu,Dg,Ew,Eh,0.04,Ff,Ft,03,Ff,Gg,00000,33
Ab,22.08,2.335,Cu,Dg,Ek,Ev,0.75,Ff,Ff,0,Ff,Gg,00180,0
Ab,16.33,4.085,Cu,Dg,Ei,Eh,0.415,Ff,Ff,0,Ft,Gg,00120,0
Aa,21.92,11.665,Cu,Dg,Ek,Eh,0.085,Ff,Ff,0,Ff,Gg,00320,5
Ab,21.08,4.125,Cy,Dp,Ei,Eh,0.04,Ff,Ff,0,Ff,Gg,00140,100
Ab,17.42,6.5,Cu,Dg,Ei,Ev,0.125,Ff,Ff,0,Ff,Gg,00060,100
Ab,19.17,4,Cy,Dp,Ei,Ev,1,Ff,Ff,0,Ft,Gg,00360,1000
Ab,20.67,0.415,Cu,Dg,Ec,Ev,0.125,Ff,Ff,0,Ff,Gg,00000,44
Ab,26.75,2,Cu,Dg,Ed,Ev,0.75,Ff,Ff,0,Ft,Gg,00080,0
Ab,23.58,0.835,Cu,Dg,Ei,Eh,0.085,Ff,Ff,0,Ft,Gg,00220,5
Ab,39.17,2.5,Cy,Dp,Ei,Eh,10,Ff,Ff,0,Ft,Gs,00200,0
Ab,22.75,11.5,Cu,Dg,Ei,Ev,0.415,Ff,Ff,0,Ff,Gg,00000,0
?,26.50,2.71,Cy,Dp,?,?,0.085,Ff,Ff,0,Ff,Gs,00080,0
Aa,16.92,0.5,Cu,Dg,Ei,Ev,0.165,Ff,Ft,06,Ft,Gg,00240,35
Ab,23.50,3.165,Cy,Dp,Ek,Ev,0.415,Ff,Ft,01,Ft,Gg,00280,80
Aa,17.33,9.5,Cu,Dg,Eaa,Ev,1.75,Ff,Ft,10,Ft,Gg,00000,10
Ab,23.75,0.415,Cy,Dp,Ec,Ev,0.04,Ff,Ft,02,Ff,Gg,00128,6
Ab,34.67,1.08,Cu,Dg,Em,Ev,1.165,Ff,Ff,0,Ff,Gs,00028,0
Ab,74.83,19,Cy,Dp,Eff,Eff,0.04,Ff,Ft,02,Ff,Gg,00000,351
Ab,28.17,0.125,Cy,Dp,Ek,Ev,0.085,Ff,Ff,0,Ff,Gg,00216,2100
Ab,24.50,13.335,Cy,Dp,Eaa,Ev,0.04,Ff,Ff,0,Ft,Gg,00120,475
Ab,18.83,3.54,Cy,Dp,Eff,Eff,0,Ff,Ff,0,Ft,Gg,00180,1
?,45.33,1,Cu,Dg,Eq,Ev,0.125,Ff,Ff,0,Ft,Gg,00263,0
@.

is_+
Aa,47.25,0.75,Cu,Dg,Eq,Eh,2.75,Ft,Ft,01,Ff,Gg,00333,892:+
Ab,24.17,0.875,Cu,Dg,Eq,Ev,4.625,Ft,Ft,02,Ft,Gg,00520,2000:+
Ab,39.25,9.5,Cu,Dg,Em,Ev,6.5,Ft,Ft,14,Ff,Gg,00240,4607:+
Aa,20.50,11.835,Cu,Dg,Ec,Eh,6,Ft,Ff,0,Ff,Gg,00340,0:+
Aa,18.83,4.415,Cy,Dp,Ec,Eh,3,Ft,Ff,0,Ff,Gg,00240,0:+
Ab,19.17,9.5,Cu,Dg,Ew,Ev,1.5,Ft,Ff,0,Ff,Gg,00120,2206:+
Aa,25.00,0.875,Cu,Dg,Ex,Eh,1.04,Ft,Ff,0,Ft,Gg,00160,5860:+
Ab,20.17,9.25,Cu,Dg,Ec,Ev,1.665,Ft,Ft,03,Ft,Gg,00040,28:+
Ab,25.75,0.5,Cu,Dg,Ec,Ev,1.46,Ft,Ft,05,Ft,Gg,00312,0:+
Ab,20.42,7,Cu,Dg,Ec,Ev,1.625,Ft,Ft,03,Ff,Gg,00200,1391:+
Ab,?,4,Cu,Dg,Ex,Ev,5,Ft,Ft,03,Ft,Gg,00290,2279:+
Ab,39.00,5,Cu,Dg,Ecc,Ev,3.5,Ft,Ft,10,Ft,Gg,00000,0:+
Aa,64.08,0.165,Cu,Dg,Eff,Eff,0,Ft,Ft,01,Ff,Gg,00232,100:+
Ab,28.25,5.125,Cu,Dg,Ex,Ev,4.75,Ft,Ft,02,Ff,Gg,00420,7:+
Aa,28.75,3.75,Cu,Dg,Ec,Ev,1.085,Ft,Ft,01,Ft,Gg,00371,0:+
Ab,31.33,19.5,Cu,Dg,Ec,Ev,7,Ft,Ft,16,Ff,Gg,00000,5000:+
Aa,18.92,9,Cu,Dg,Eaa,Ev,0.75,Ft,Ft,02,Ff,Gg,00088,591:+
Aa,24.75,3,Cu,Dg,Eq,Eh,1.835,Ft,Ft,19,Ff,Gg,00000,500:+
Aa,30.67,12,Cu,Dg,Ec,Ev,2,Ft,Ft,01,Ff,Gg,00220,19:+
Ab,21.00,4.79,Cy,Dp,Ew,Ev,2.25,Ft,Ft,01,Ft,Gg,00080,300:+
Ab,13.75,4,Cy,Dp,Ew,Ev,1.75,Ft,Ft,02,Ft,Gg,00120,1000:+
Aa,46.00,4,Cu,Dg,Ej,Ej,0,Ft,Ff,0,Ff,Gg,00100,960:+
Aa,44.33,0,Cu,Dg,Ec,Ev,2.5,Ft,Ff,0,Ff,Gg,00000,0:+
Ab,20.25,9.96,Cu,Dg,Ee,Edd,0,Ft,Ff,0,Ff,Gg,00000,0:+
Ab,22.67,2.54,Cy,Dp,Ec,Eh,2.585,Ft,Ff,0,Ff,Gg,00000,0:+
Ab,?,10.5,Cu,Dg,Ex,Ev,6.5,Ft,Ff,0,Ff,Gg,00000,0:+
Aa,60.92,5,Cu,Dg,Eaa,Ev,4,Ft,Ft,04,Ff,Gg,00000,99:+
Ab,16.08,0.75,Cu,Dg,Ec,Ev,1.75,Ft,Ft,05,Ft,Gg,00352,690:+
Aa,28.17,0.375,Cu,Dg,Eq,Ev,0.585,Ft,Ft,04,Ff,Gg,00080,0:+
Ab,39.17,1.71,Cu,Dg,Ex,Ev,0.125,Ft,Ft,05,Ft,Gg,00480,0:+
?,20.42,7.5,Cu,Dg,Ek,Ev,1.5,Ft,Ft,01,Ff,Gg,00160,234:+
Aa,30.00,5.29,Cu,Dg,Ee,Edd,2.25,Ft,Ft,05,Ft,Gg,00099,500:+
Ab,22.83,3,Cu,Dg,Em,Ev,1.29,Ft,Ft,01,Ff,Gg,00260,800:+
Aa,22.50,8.5,Cu,Dg,Eq,Ev,1.75,Ft,Ft,10,Ff,Gg,00080,990:-
Aa,28.58,1.665,Cu,Dg,Eq,Ev,2.415,Ft,Ff,0,Ft,Gg,00440,0:-
Ab,45.17,1.5,Cu,Dg,Ec,Ev,2.5,Ft,Ff,0,Ft,Gg,00140,0:-
Ab,41.58,1.75,Cu,Dg,Ek,Ev,0.21,Ft,Ff,0,Ff,Gg,00160,0:-
Aa,57.08,0.335,Cu,Dg,Ei,Ebb,1,Ft,Ff,0,Ft,Gg,00252,2197:-
Aa,55.75,7.08,Cu,Dg,Ek,Eh,6.75,Ft,Ft,03,Ft,Gg,00100,50:-
Ab,43.25,25.21,Cu,Dg,Eq,Eh,0.21,Ft,Ft,01,Ff,Gg,00760,90:-
Aa,25.33,2.085,Cu,Dg,Ec,Eh,2.75,Ft,Ff,0,Ft,Gg,00360,1:-
Aa,24.58,0.67,Cu,Dg,Eaa,Eh,1.75,Ft,Ff,0,Ff,Gg,00400,0:-
Ab,43.17,2.25,Cu,Dg,Ei,Ebb,0.75,Ft,Ff,0,Ff,Gg,00560,0:-
Ab,40.92,0.835,Cu,Dg,Eff,Eff,0,Ft,Ff,0,Ff,Gg,00130,1:-
Ab,31.83,2.5,Cu,Dg,Eaa,Ev,7.5,Ft,Ff,0,Ft,Gg,00523,0:-
Aa,33.92,1.585,Cy,Dp,Eff,Eff,0,Ft,Ff,0,Ff,Gg,00320,0:-
Aa,24.92,1.25,Cu,Dg,Eff,Eff,0,Ft,Ff,0,Ff,Gg,00080,0:-
Ab,35.25,3.165,Cu,Dg,Ex,Eh,3.75,Ft,Ff,0,Ft,Gg,00680,0:-
Ab,34.25,1.75,Cu,Dg,Ew,Ebb,0.25,Ft,Ff,0,Ft,Gg,00163,0:-
Ab,80.25,5.5,Cu,Dg,?,?,0.54,Ft,Ff,0,Ff,Gg,00000,340:-
Ab,19.42,1.5,Cy,Dp,Ecc,Ev,2,Ft,Ff,0,Ft,Gg,00100,20:-
Ab,42.75,3,Cu,Dg,Ei,Ebb,1,Ft,Ff,0,Ff,Gg,00000,200:-
Ab,19.67,10,Cy,Dp,Ek,Eh,0.835,Ft,Ff,0,Ft,Gg,00140,0:-
Ab,36.33,3.79,Cu,Dg,Ew,Ev,1.165,Ft,Ff,0,Ft,Gg,00200,0:-
Ab,30.08,1.04,Cy,Dp,Ei,Ebb,0.5,Ft,Ft,10,Ft,Gg,00132,28:-
Ab,44.25,11,Cy,Dp,Ed,Ev,1.5,Ft,Ff,0,Ff,Gs,00000,0:-
Ab,23.58,0.46,Cy,Dp,Ew,Ev,2.625,Ft,Ft,06,Ft,Gg,00208,347:-
Ab,23.92,1.5,Cu,Dg,Ed,Eh,1.875,Ft,Ft,06,Ff,Gg,00200,327:+
Ab,33.17,1,Cu,Dg,Ex,Ev,0.75,Ft,Ft,07,Ft,Gg,00340,4071:+
Ab,48.33,12,Cu,Dg,Em,Ev,16,Ft,Ff,0,Ff,Gs,00110,0:+
Ab,76.75,22.29,Cu,Dg,Ee,Ez,12.75,Ft,Ft,01,Ft,Gg,00000,109:+
Ab,51.33,10,Cu,Dg,Ei,Ebb,0,Ft,Ft,11,Ff,Gg,00000,1249:+
Ab,34.75,15,Cu,Dg,Er,En,5.375,Ft,Ft,09,Ft,Gg,00000,134:+
Ab,38.58,3.335,Cu,Dg,Ew,Ev,4,Ft,Ft,14,Ff,Gg,00383,1344:+
Aa,22.42,11.25,Cy,Dp,Ex,Eh,0.75,Ft,Ft,04,Ff,Gg,00000,321:+
Ab,41.92,0.42,Cu,Dg,Ec,Eh,0.21,Ft,Ft,06,Ff,Gg,00220,948:+
Ab,29.58,4.5,Cu,Dg,Ew,Ev,7.5,Ft,Ft,02,Ft,Gg,00330,0:+
Aa,32.17,1.46,Cu,Dg,Ew,Ev,1.085,Ft,Ft,16,Ff,Gg,00120,2079:+
Ab,51.42,0.04,Cu,Dg,Ex,Eh,0.04,Ft,Ff,0,Ff,Gg,00000,3000:+
Aa,22.83,2.29,Cu,Dg,Eq,Eh,2.29,Ft,Ft,07,Ft,Gg,00140,2384:+
Aa,25.00,12.33,Cu,Dg,Ecc,Eh,3.5,Ft,Ft,06,Ff,Gg,00400,458:+
Ab,26.75,1.125,Cu,Dg,Ex,Eh,1.25,Ft,Ff,0,Ff,Gg,00000,5298:+
Ab,23.33,1.5,Cu,Dg,Ec,Eh,1.415,Ft,Ff,0,Ff,Gg,00422,200:+
Ab,24.42,12.335,Cu,Dg,Eq,Eh,1.585,Ft,Ff,0,Ft,Gg,00120,0:+
Ab,42.17,5.04,Cu,Dg,Eq,Eh,12.75,Ft,Ff,0,Ft,Gg,00092,0:+
Aa,20.83,3,Cu,Dg,Eaa,Ev,0.04,Ft,Ff,0,Ff,Gg,00100,0:+
Ab,23.08,11.5,Cu,Dg,Ew,Eh,2.125,Ft,Ft,11,Ft,Gg,00290,284:+
Aa,25.17,2.875,Cu,Dg,Ex,Eh,0.875,Ft,Ff,0,Ff,Gg,00360,0:+
Ab,43.08,0.375,Cy,Dp,Ec,Ev,0.375,Ft,Ft,08,Ft,Gg,00300,162:+
Aa,35.75,0.915,Cu,Dg,Eaa,Ev,0.75,Ft,Ft,04,Ff,Gg,00000,1583:+
Ab,59.50,2.75,Cu,Dg,Ew,Ev,1.75,Ft,Ft,05,Ft,Gg,00060,58:+
Ab,21.00,3,Cy,Dp,Ed,Ev,1.085,Ft,Ft,08,Ft,Gg,00160,1:+
Ab,21.92,0.54,Cy,Dp,Ex,Ev,0.04,Ft,Ft,01,Ft,Gg,00840,59:+
Aa,65.17,14,Cu,Dg,Eff,Eff,0,Ft,Ft,11,Ft,Gg,00000,1400:+
Aa,20.33,10,Cu,Dg,Ec,Eh,1,Ft,Ft,04,Ff,Gg,00050,1465:+
Ab,32.25,0.165,Cy,Dp,Ec,Eh,3.25,Ft,Ft,01,Ft,Gg,00432,8000:+
Ab,30.17,0.5,Cu,Dg,Ec,Ev,1.75,Ft,Ft,11,Ff,Gg,00032,540:+
Ab,25.17,6,Cu,Dg,Ec,Ev,1,Ft,Ft,03,Ff,Gg,00000,0:+
Ab,39.17,1.625,Cu,Dg,Ec,Ev,1.5,Ft,Ft,10,Ff,Gg,00186,4700:+
Ab,39.08,6,Cu,Dg,Em,Ev,1.29,Ft,Ft,05,Ft,Gg,00108,1097:+
Ab,31.67,0.83,Cu,Dg,Ex,Ev,1.335,Ft,Ft,08,Ft,Gg,00303,3290:+
Ab,41.00,0.04,Cu,Dg,Ee,Ev,0.04,Ff,Ft,01,Ff,Gs,00560,0:+
Ab,48.50,4.25,Cu,Dg,Em,Ev,0.125,Ft,Ff,0,Ft,Gg,00225,0:+
Ab,32.67,9,Cy,Dp,Ew,Eh,5.25,Ft,Ff,0,Ft,Gg,00154,0:+
Aa,28.08,15,Cy,Dp,Ee,Ez,0,Ft,Ff,0,Ff,Gg,00000,13212:+
Ab,73.42,17.75,Cu,Dg,Eff,Eff,0,Ft,Ff,0,Ft,Gg,00000,0:+
Ab,64.08,20,Cu,Dg,Ex,Eh,17.5,Ft,Ft,09,Ft,Gg,00000,1000:+
Ab,51.58,15,Cu,Dg,Ec,Ev,8.5,Ft,Ft,09,Ff,Gg,00000,0:+
Ab,26.67,1.75,Cy,Dp,Ec,Ev,1,Ft,Ft,05,Ft,Gg,00160,5777:+
Ab,25.33,0.58,Cu,Dg,Ec,Ev,0.29,Ft,Ft,07,Ft,Gg,00096,5124:+
Ab,30.17,6.5,Cu,Dg,Ecc,Ev,3.125,Ft,Ft,08,Ff,Gg,00330,1200:+
Ab,27.00,0.75,Cu,Dg,Ec,Eh,4.25,Ft,Ft,03,Ft,Gg,00312,150:+
Ab,23.17,0,?,?,?,?,0,Ff,Ff,0,Ff,Gp,?,0:+
Ab,34.17,5.25,Cu,Dg,Ew,Ev,0.085,Ff,Ff,0,Ft,Gg,00290,6:+
Ab,38.67,0.21,Cu,Dg,Ek,Ev,0.085,Ft,Ff,0,Ft,Gg,00280,0:+
Ab,25.75,0.75,Cu,Dg,Ec,Ebb,0.25,Ft,Ff,0,Ff,Gg,00349,23:+
Aa,46.08,3,Cu,Dg,Ec,Ev,2.375,Ft,Ft,08,Ft,Gg,00396,4159:+
Aa,21.50,6,Cu,Dg,Eaa,Ev,2.5,Ft,Ft,03,Ff,Gg,00080,918:+
?,20.08,0.125,Cu,Dg,Eq,Ev,1,Ff,Ft,01,Ff,Gg,00240,768:+
Ab,20.50,2.415,Cu,Dg,Ec,Ev,2,Ft,Ft,11,Ft,Gg,00200,3000:+
Aa,29.50,0.46,Cu,Dg,Ek,Ev,0.54,Ft,Ft,04,Ff,Gg,00380,500:+
?,42.25,1.75,Cy,Dp,?,?,0,Ff,Ff,0,Ft,Gg,00150,1:-
Ab,29.83,1.25,Cy,Dp,Ek,Ev,0.25,Ff,Ff,0,Ff,Gg,00224,0:-
Ab,20.08,0.25,Cu,Dg,Eq,Ev,0.125,Ff,Ff,0,Ff,Gg,00200,0:-
Ab,23.42,0.585,Cu,Dg,Ec,Eh,0.085,Ft,Ff,0,Ff,Gg,00180,0:-
Aa,29.58,1.75,Cy,Dp,Ek,Ev,1.25,Ff,Ff,0,Ft,Gg,00280,0:-
Ab,16.17,0.04,Cu,Dg,Ec,Ev,0.04,Ff,Ff,0,Ff,Gg,00000,0:+
Ab,32.33,3.5,Cu,Dg,Ek,Ev,0.5,Ff,Ff,0,Ft,Gg,00232,0:-
Ab,?,0.04,Cy,Dp,Ed,Ev,4.25,Ff,Ff,0,Ft,Gg,00460,0:-
Ab,47.83,4.165,Cu,Dg,Ex,Ebb,0.085,Ff,Ff,0,Ft,Gg,00520,0:-
Ab,20.00,1.25,Cy,Dp,Ek,Ev,0.125,Ff,Ff,0,Ff,Gg,00140,4:-
Ab,27.58,3.25,Cy,Dp,Eq,Eh,5.085,Ff,Ft,02,Ft,Gg,00369,1:-
Ab,22.00,0.79,Cu,Dg,Ew,Ev,0.29,Ff,Ft,01,Ff,Gg,00420,283:-
Ab,19.33,10.915,Cu,Dg,Ec,Ebb,0.585,Ff,Ft,02,Ft,Gg,00200,7:-
Aa,38.33,4.415,Cu,Dg,Ec,Ev,0.125,Ff,Ff,0,Ff,Gg,00160,0:-
Ab,29.42,1.25,Cu,Dg,Ec,Eh,0.25,Ff,Ft,02,Ft,Gg,00400,108:-
Ab,22.67,0.75,Cu,Dg,Ei,Ev,1.585,Ff,Ft,01,Ft,Gg,00400,9:-
Ab,32.25,14,Cy,Dp,Eff,Eff,0,Ff,Ft,02,Ff,Gg,00160,1:-
Ab,29.58,4.75,Cu,Dg,Em,Ev,2,Ff,Ft,01,Ft,Gg,00460,68:-
Ab,18.42,10.415,Cy,Dp,Eaa,Ev,0.125,Ft,Ff,0,Ff,Gg,00120,375:-
Ab,22.17,2.25,Cu,Dg,Ei,Ev,0.125,Ff,Ff,0,Ff,Gg,00160,10:-
Ab,22.67,0.165,Cu,Dg,Ec,Ej,2.25,Ff,Ff,0,Ft,Gs,00000,0:+
Aa,25.58,0,?,?,?,?,0,Ff,Ff,0,Ff,Gp,?,0:+
Ab,18.83,0,Cu,Dg,Eq,Ev,0.665,Ff,Ff,0,Ff,Gg,00160,1:-
Ab,21.58,0.79,Cy,Dp,Ecc,Ev,0.665,Ff,Ff,0,Ff,Gg,00160,0:-
Ab,23.75,12,Cu,Dg,Ec,Ev,2.085,Ff,Ff,0,Ff,Gs,00080,0:-
Ab,22.00,7.835,Cy,Dp,Ei,Ebb,0.165,Ff,Ff,0,Ft,Gg,?,0:-
Ab,36.08,2.54,Cu,Dg,Eff,Eff,0,Ff,Ff,0,Ff,Gg,00000,1000:-
Ab,29.25,13,Cu,Dg,Ed,Eh,0.5,Ff,Ff,0,Ff,Gg,00228,0:-
Aa,19.58,0.665,Cu,Dg,Ew,Ev,1.665,Ff,Ff,0,Ff,Gg,00220,5:-
Aa,22.92,1.25,Cu,Dg,Eq,Ev,0.25,Ff,Ff,0,Ft,Gg,00120,809:-
Aa,27.25,0.29,Cu,Dg,Em,Eh,0.125,Ff,Ft,01,Ft,Gg,00272,108:-
Aa,38.75,1.5,Cu,Dg,Eff,Eff,0,Ff,Ff,0,Ff,Gg,00076,0:-
Ab,32.42,2.165,Cy,Dp,Ek,Eff,0,Ff,Ff,0,Ff,Gg,00120,0:-
Aa,23.75,0.71,Cu,Dg,Ew,Ev,0.25,Ff,Ft,01,Ft,Gg,00240,4:-
Ab,18.17,2.46,Cu,Dg,Ec,En,0.96,Ff,Ft,02,Ft,Gg,00160,587:-
Ab,40.92,0.5,Cy,Dp,Em,Ev,0.5,Ff,Ff,0,Ft,Gg,00130,0:-
Ab,19.50,9.585,Cu,Dg,Eaa,Ev,0.79,Ff,Ff,0,Ff,Gg,00080,350:-
Ab,28.58,3.625,Cu,Dg,Eaa,Ev,0.25,Ff,Ff,0,Ft,Gg,00100,0:-
Ab,35.58,0.75,Cu,Dg,Ek,Ev,1.5,Ff,Ff,0,Ft,Gg,00231,0:-
Ab,34.17,2.75,Cu,Dg,Ei,Ebb,2.5,Ff,Ff,0,Ft,Gg,00232,200:-
?,33.17,2.25,Cy,Dp,Ecc,Ev,3.5,Ff,Ff,0,Ft,Gg,00200,141:-
Ab,31.58,0.75,Cy,Dp,Eaa,Ev,3.5,Ff,Ff,0,Ft,Gg,00320,0:-
Aa,52.50,7,Cu,Dg,Eaa,Eh,3,Ff,Ff,0,Ff,Gg,00000,0:-
Ab,36.17,0.42,Cy,Dp,Ew,Ev,0.29,Ff,Ff,0,Ft,Gg,00309,2:-
Ab,37.33,2.665,Cu,Dg,Ecc,Ev,0.165,Ff,Ff,0,Ft,Gg,00000,501:-
Aa,20.83,8.5,Cu,Dg,Ec,Ev,0.165,Ff,Ff,0,Ff,Gg,00000,351:-
Ab,24.08,9,Cu,Dg,Eaa,Ev,0.25,Ff,Ff,0,Ft,Gg,00000,0:-
Ab,25.58,0.335,Cu,Dg,Ek,Eh,3.5,Ff,Ff,0,Ft,Gg,00340,0:-
Aa,35.17,3.75,Cu,Dg,Eff,Eff,0,Ff,Ft,06,Ff,Gg,00000,200:-
Ab,48.08,3.75,Cu,Dg,Ei,Ebb,1,Ff,Ff,0,Ff,Gg,00100,2:-
Aa,15.83,7.625,Cu,Dg,Eq,Ev,0.125,Ff,Ft,01,Ft,Gg,00000,160:-
Aa,22.50,0.415,Cu,Dg,Ei,Ev,0.335,Ff,Ff,0,Ft,Gs,00144,0:-
Ab,21.50,11.5,Cu,Dg,Ei,Ev,0.5,Ft,Ff,0,Ft,Gg,00100,68:-
Aa,23.58,0.83,Cu,Dg,Eq,Ev,0.415,Ff,Ft,01,Ft,Gg,00200,11:-
Aa,21.08,5,Cy,Dp,Eff,Eff,0,Ff,Ff,0,Ff,Gg,00000,0:-
Ab,25.67,3.25,Cu,Dg,Ec,Eh,2.29,Ff,Ft,01,Ft,Gg,00416,21:-
Aa,38.92,1.665,Cu,Dg,Eaa,Ev,0.25,Ff,Ff,0,Ff,Gg,00000,390:-
Aa,15.75,0.375,Cu,Dg,Ec,Ev,1,Ff,Ff,0,Ff,Gg,00120,18:-
Aa,28.58,3.75,Cu,Dg,Ec,Ev,0.25,Ff,Ft,01,Ft,Gg,00040,154:-
Ab,22.25,9,Cu,Dg,Eaa,Ev,0.085,Ff,Ff,0,Ff,Gg,00000,0:-
Ab,29.83,3.5,Cu,Dg,Ec,Ev,0.165,Ff,Ff,0,Ff,Gg,00216,0:-
Aa,23.50,1.5,Cu,Dg,Ew,Ev,0.875,Ff,Ff,0,Ft,Gg,00160,0:-
Ab,32.08,4,Cy,Dp,Ecc,Ev,1.5,Ff,Ff,0,Ft,Gg,00120,0:-
Ab,31.08,1.5,Cy,Dp,Ew,Ev,0.04,Ff,Ff,0,Ff,Gs,00160,0:-
Ab,31.83,0.04,Cy,Dp,Em,Ev,0.04,Ff,Ff,0,Ff,Gg,00000,0:-
Aa,21.75,11.75,Cu,Dg,Ec,Ev,0.25,Ff,Ff,0,Ft,Gg,00180,0:-
Aa,17.92,0.54,Cu,Dg,Ec,Ev,1.75,Ff,Ft,01,Ft,Gg,00080,5:-
Ab,30.33,0.5,Cu,Dg,Ed,Eh,0.085,Ff,Ff,0,Ft,Gs,00252,0:-
Ab,51.83,2.04,Cy,Dp,Eff,Eff,1.5,Ff,Ff,0,Ff,Gg,00120,1:-
Ab,47.17,5.835,Cu,Dg,Ew,Ev,5.5,Ff,Ff,0,Ff,Gg,00465,150:-
Ab,25.83,12.835,Cu,Dg,Ecc,Ev,0.5,Ff,Ff,0,Ff,Gg,00000,2:-
Aa,50.25,0.835,Cu,Dg,Eaa,Ev,0.5,Ff,Ff,0,Ft,Gg,00240,117:-
?,29.50,2,Cy,Dp,Ee,Eh,2,Ff,Ff,0,Ff,Gg,00256,17:-
Aa,37.33,2.5,Cu,Dg,Ei,Eh,0.21,Ff,Ff,0,Ff,Gg,00260,246:-
Aa,41.58,1.04,Cu,Dg,Eaa,Ev,0.665,Ff,Ff,0,Ff,Gg,00240,237:-
Aa,30.58,10.665,Cu,Dg,Eq,Eh,0.085,Ff,Ft,12,Ft,Gg,00129,3:-
Ab,19.42,7.25,Cu,Dg,Em,Ev,0.04,Ff,Ft,01,Ff,Gg,00100,1:-
Aa,17.92,10.21,Cu,Dg,Eff,Eff,0,Ff,Ff,0,Ff,Gg,00000,50:-
Aa,20.08,1.25,Cu,Dg,Ec,Ev,0,Ff,Ff,0,Ff,Gg,00000,0:-
Ab,19.50,0.29,Cu,Dg,Ek,Ev,0.29,Ff,Ff,0,Ff,Gg,00280,364:-
Ab,27.83,1,Cy,Dp,Ed,Eh,3,Ff,Ff,0,Ff,Gg,00176,537:-
Ab,17.08,3.29,Cu,Dg,Ei,Ev,0.335,Ff,Ff,0,Ft,Gg,00140,2:-
Ab,36.42,0.75,Cy,Dp,Ed,Ev,0.585,Ff,Ff,0,Ff,Gg,00240,3:-
Ab,40.58,3.29,Cu,Dg,Em,Ev,3.5,Ff,Ff,0,Ft,Gs,00400,0:-
Ab,21.08,10.085,Cy,Dp,Ee,Eh,1.25,Ff,Ff,0,Ff,Gg,00260,0:-
Aa,22.67,0.75,Cu,Dg,Ec,Ev,2,Ff,Ft,02,Ft,Gg,00200,394:-
Aa,25.25,13.5,Cy,Dp,Eff,Eff,2,Ff,Ft,01,Ft,Gg,00200,1:-
Ab,17.92,0.205,Cu,Dg,Eaa,Ev,0.04,Ff,Ff,0,Ff,Gg,00280,750:-
Ab,35.00,3.375,Cu,Dg,Ec,Eh,8.29,Ff,Ff,0,Ft,Gg,00000,0:-
@.
@//E*O*F crx.d//
chmod u=rw,g=,o= crx.d
 
echo x - crx.data
sed 's/^@//' > "crx.data" <<'@//E*O*F crx.data//'
b,30.83,0,u,g,w,v,1.25,t,t,01,f,g,00202,0,+
a,58.67,4.46,u,g,q,h,3.04,t,t,06,f,g,00043,560,+
a,24.50,0.5,u,g,q,h,1.5,t,f,0,f,g,00280,824,+
b,27.83,1.54,u,g,w,v,3.75,t,t,05,t,g,00100,3,+
b,20.17,5.625,u,g,w,v,1.71,t,f,0,f,s,00120,0,+
b,32.08,4,u,g,m,v,2.5,t,f,0,t,g,00360,0,+
b,33.17,1.04,u,g,r,h,6.5,t,f,0,t,g,00164,31285,+
a,22.92,11.585,u,g,cc,v,0.04,t,f,0,f,g,00080,1349,+
b,54.42,0.5,y,p,k,h,3.96,t,f,0,f,g,00180,314,+
b,42.50,4.915,y,p,w,v,3.165,t,f,0,t,g,00052,1442,+
b,22.08,0.83,u,g,c,h,2.165,f,f,0,t,g,00128,0,+
b,29.92,1.835,u,g,c,h,4.335,t,f,0,f,g,00260,200,+
a,38.25,6,u,g,k,v,1,t,f,0,t,g,00000,0,+
b,48.08,6.04,u,g,k,v,0.04,f,f,0,f,g,00000,2690,+
a,45.83,10.5,u,g,q,v,5,t,t,07,t,g,00000,0,+
b,36.67,4.415,y,p,k,v,0.25,t,t,10,t,g,00320,0,+
b,28.25,0.875,u,g,m,v,0.96,t,t,03,t,g,00396,0,+
a,23.25,5.875,u,g,q,v,3.17,t,t,10,f,g,00120,245,+
b,21.83,0.25,u,g,d,h,0.665,t,f,0,t,g,00000,0,+
a,19.17,8.585,u,g,cc,h,0.75,t,t,07,f,g,00096,0,+
b,25.00,11.25,u,g,c,v,2.5,t,t,17,f,g,00200,1208,+
b,23.25,1,u,g,c,v,0.835,t,f,0,f,s,00300,0,+
a,47.75,8,u,g,c,v,7.875,t,t,06,t,g,00000,1260,+
a,27.42,14.5,u,g,x,h,3.085,t,t,01,f,g,00120,11,+
a,41.17,6.5,u,g,q,v,0.5,t,t,03,t,g,00145,0,+
a,15.83,0.585,u,g,c,h,1.5,t,t,02,f,g,00100,0,+
a,47.00,13,u,g,i,bb,5.165,t,t,09,t,g,00000,0,+
b,56.58,18.5,u,g,d,bb,15,t,t,17,t,g,00000,0,+
b,57.42,8.5,u,g,e,h,7,t,t,03,f,g,00000,0,+
b,42.08,1.04,u,g,w,v,5,t,t,06,t,g,00500,10000,+
b,29.25,14.79,u,g,aa,v,5.04,t,t,05,t,g,00168,0,+
b,42.00,9.79,u,g,x,h,7.96,t,t,08,f,g,00000,0,+
b,49.50,7.585,u,g,i,bb,7.585,t,t,15,t,g,00000,5000,+
a,36.75,5.125,u,g,e,v,5,t,f,0,t,g,00000,4000,+
a,22.58,10.75,u,g,q,v,0.415,t,t,05,t,g,00000,560,+
b,27.83,1.5,u,g,w,v,2,t,t,11,t,g,00434,35,+
b,27.25,1.585,u,g,cc,h,1.835,t,t,12,t,g,00583,713,+
a,23.00,11.75,u,g,x,h,0.5,t,t,02,t,g,00300,551,+
b,27.75,0.585,y,p,cc,v,0.25,t,t,02,f,g,00260,500,+
b,54.58,9.415,u,g,ff,ff,14.415,t,t,11,t,g,00030,300,+
b,34.17,9.17,u,g,c,v,4.5,t,t,12,t,g,00000,221,+
b,28.92,15,u,g,c,h,5.335,t,t,11,f,g,00000,2283,+
b,29.67,1.415,u,g,w,h,0.75,t,t,01,f,g,00240,100,+
b,39.58,13.915,u,g,w,v,8.625,t,t,06,t,g,00070,0,+
b,56.42,28,y,p,c,v,28.5,t,t,40,f,g,00000,15,+
b,54.33,6.75,u,g,c,h,2.625,t,t,11,t,g,00000,284,+
a,41.00,2.04,y,p,q,h,0.125,t,t,23,t,g,00455,1236,+
b,31.92,4.46,u,g,cc,h,6.04,t,t,03,f,g,00311,300,+
b,41.50,1.54,u,g,i,bb,3.5,f,f,0,f,g,00216,0,+
b,23.92,0.665,u,g,c,v,0.165,f,f,0,f,g,00100,0,+
a,25.75,0.5,u,g,c,h,0.875,t,f,0,t,g,00491,0,+
b,26.00,1,u,g,q,v,1.75,t,f,0,t,g,00280,0,+
b,37.42,2.04,u,g,w,v,0.04,t,f,0,t,g,00400,5800,+
b,34.92,2.5,u,g,w,v,0,t,f,0,t,g,00239,200,+
b,34.25,3,u,g,cc,h,7.415,t,f,0,t,g,00000,0,+
b,23.33,11.625,y,p,w,v,0.835,t,f,0,t,g,00160,300,+
b,23.17,0,u,g,cc,v,0.085,t,f,0,f,g,00000,0,+
b,44.33,0.5,u,g,i,h,5,t,f,0,t,g,00320,0,+
b,35.17,4.5,u,g,x,h,5.75,f,f,0,t,s,00711,0,+
b,43.25,3,u,g,q,h,6,t,t,11,f,g,00080,0,+
b,56.75,12.25,u,g,m,v,1.25,t,t,04,t,g,00200,0,+
b,31.67,16.165,u,g,d,v,3,t,t,09,f,g,00250,730,+
a,23.42,0.79,y,p,q,v,1.5,t,t,02,t,g,00080,400,+
a,20.42,0.835,u,g,q,v,1.585,t,t,01,f,g,00000,0,+
b,26.67,4.25,u,g,cc,v,4.29,t,t,01,t,g,00120,0,+
b,34.17,1.54,u,g,cc,v,1.54,t,t,01,t,g,00520,50000,+
a,36.00,1,u,g,c,v,2,t,t,11,f,g,00000,456,+
b,25.50,0.375,u,g,m,v,0.25,t,t,03,f,g,00260,15108,+
b,19.42,6.5,u,g,w,h,1.46,t,t,07,f,g,00080,2954,+
b,35.17,25.125,u,g,x,h,1.625,t,t,01,t,g,00515,500,+
b,32.33,7.5,u,g,e,bb,1.585,t,f,0,t,s,00420,0,-
b,34.83,4,u,g,d,bb,12.5,t,f,0,t,g,?,0,-
a,38.58,5,u,g,cc,v,13.5,t,f,0,t,g,00980,0,-
b,44.25,0.5,u,g,m,v,10.75,t,f,0,f,s,00400,0,-
b,44.83,7,y,p,c,v,1.625,f,f,0,f,g,00160,2,-
b,20.67,5.29,u,g,q,v,0.375,t,t,01,f,g,00160,0,-
b,34.08,6.5,u,g,aa,v,0.125,t,f,0,t,g,00443,0,-
a,19.17,0.585,y,p,aa,v,0.585,t,f,0,t,g,00160,0,-
b,21.67,1.165,y,p,k,v,2.5,t,t,01,f,g,00180,20,-
b,21.50,9.75,u,g,c,v,0.25,t,f,0,f,g,00140,0,-
b,49.58,19,u,g,ff,ff,0,t,t,01,f,g,00094,0,-
a,27.67,1.5,u,g,m,v,2,t,f,0,f,s,00368,0,-
b,39.83,0.5,u,g,m,v,0.25,t,f,0,f,s,00288,0,-
a,?,3.5,u,g,d,v,3,t,f,0,t,g,00300,0,-
b,27.25,0.625,u,g,aa,v,0.455,t,f,0,t,g,00200,0,-
b,37.17,4,u,g,c,bb,5,t,f,0,t,s,00280,0,-
b,?,0.375,u,g,d,v,0.875,t,f,0,t,s,00928,0,-
b,25.67,2.21,y,p,aa,v,4,t,f,0,f,g,00188,0,-
b,34.00,4.5,u,g,aa,v,1,t,f,0,t,g,00240,0,-
a,49.00,1.5,u,g,j,j,0,t,f,0,t,g,00100,27,-
b,62.50,12.75,y,p,c,h,5,t,f,0,f,g,00112,0,-
b,31.42,15.5,u,g,c,v,0.5,t,f,0,f,g,00120,0,-
b,?,5,y,p,aa,v,8.5,t,f,0,f,g,00000,0,-
b,52.33,1.375,y,p,c,h,9.46,t,f,0,t,g,00200,100,-
b,28.75,1.5,y,p,c,v,1.5,t,f,0,t,g,00000,225,-
a,28.58,3.54,u,g,i,bb,0.5,t,f,0,t,g,00171,0,-
b,23.00,0.625,y,p,aa,v,0.125,t,f,0,f,g,00180,1,-
b,?,0.5,u,g,c,bb,0.835,t,f,0,t,s,00320,0,-
a,22.50,11,y,p,q,v,3,t,f,0,t,g,00268,0,-
a,28.50,1,u,g,q,v,1,t,t,02,t,g,00167,500,-
b,37.50,1.75,y,p,c,bb,0.25,t,f,0,t,g,00164,400,-
b,35.25,16.5,y,p,c,v,4,t,f,0,f,g,00080,0,-
b,18.67,5,u,g,q,v,0.375,t,t,02,f,g,00000,38,-
b,25.00,12,u,g,k,v,2.25,t,t,02,t,g,00120,5,-
b,27.83,4,y,p,i,h,5.75,t,t,02,t,g,00075,0,-
b,54.83,15.5,u,g,e,z,0,t,t,20,f,g,00152,130,-
b,28.75,1.165,u,g,k,v,0.5,t,f,0,f,s,00280,0,-
a,25.00,11,y,p,aa,v,4.5,t,f,0,f,g,00120,0,-
b,40.92,2.25,y,p,x,h,10,t,f,0,t,g,00176,0,-
a,19.75,0.75,u,g,c,v,0.795,t,t,05,t,g,00140,5,-
b,29.17,3.5,u,g,w,v,3.5,t,t,03,t,g,00329,0,-
a,24.50,1.04,y,p,ff,ff,0.5,t,t,03,f,g,00180,147,-
b,24.58,12.5,u,g,w,v,0.875,t,f,0,t,g,00260,0,-
a,33.75,0.75,u,g,k,bb,1,t,t,03,t,g,00212,0,-
b,20.67,1.25,y,p,c,h,1.375,t,t,03,t,g,00140,210,-
a,25.42,1.125,u,g,q,v,1.29,t,t,02,f,g,00200,0,-
b,37.75,7,u,g,q,h,11.5,t,t,07,t,g,00300,5,-
b,52.50,6.5,u,g,k,v,6.29,t,t,15,f,g,00000,11202,+
b,57.83,7.04,u,g,m,v,14,t,t,06,t,g,00360,1332,+
a,20.75,10.335,u,g,cc,h,0.335,t,t,01,t,g,00080,50,+
b,39.92,6.21,u,g,q,v,0.04,t,t,01,f,g,00200,300,+
b,25.67,12.5,u,g,cc,v,1.21,t,t,67,t,g,00140,258,+
a,24.75,12.5,u,g,aa,v,1.5,t,t,12,t,g,00120,567,+
a,44.17,6.665,u,g,q,v,7.375,t,t,03,t,g,00000,0,+
a,23.50,9,u,g,q,v,8.5,t,t,05,t,g,00120,0,+
b,34.92,5,u,g,x,h,7.5,t,t,06,t,g,00000,1000,+
b,47.67,2.5,u,g,m,bb,2.5,t,t,12,t,g,00410,2510,+
b,22.75,11,u,g,q,v,2.5,t,t,07,t,g,00100,809,+
b,34.42,4.25,u,g,i,bb,3.25,t,t,02,f,g,00274,610,+
a,28.42,3.5,u,g,w,v,0.835,t,f,0,f,s,00280,0,+
b,67.75,5.5,u,g,e,z,13,t,t,01,t,g,00000,0,+
b,20.42,1.835,u,g,c,v,2.25,t,t,01,f,g,00100,150,+
a,47.42,8,u,g,e,bb,6.5,t,t,06,f,g,00375,51100,+
b,36.25,5,u,g,c,bb,2.5,t,t,06,f,g,00000,367,+
b,32.67,5.5,u,g,q,h,5.5,t,t,12,t,g,00408,1000,+
b,48.58,6.5,u,g,q,h,6,t,f,0,t,g,00350,0,+
b,39.92,0.54,y,p,aa,v,0.5,t,t,03,f,g,00200,1000,+
b,33.58,2.75,u,g,m,v,4.25,t,t,06,f,g,00204,0,+
a,18.83,9.5,u,g,w,v,1.625,t,t,06,t,g,00040,600,+
a,26.92,13.5,u,g,q,h,5,t,t,02,f,g,00000,5000,+
a,31.25,3.75,u,g,cc,h,0.625,t,t,09,t,g,00181,0,+
a,56.50,16,u,g,j,ff,0,t,t,15,f,g,00000,247,+
b,43.00,0.29,y,p,cc,h,1.75,t,t,08,f,g,00100,375,+
b,22.33,11,u,g,w,v,2,t,t,01,f,g,00080,278,+
b,27.25,1.665,u,g,cc,h,5.085,t,t,09,f,g,00399,827,+
b,32.83,2.5,u,g,cc,h,2.75,t,t,06,f,g,00160,2072,+
b,23.25,1.5,u,g,q,v,2.375,t,t,03,t,g,00000,582,+
a,40.33,7.54,y,p,q,h,8,t,t,14,f,g,00000,2300,+
a,30.50,6.5,u,g,c,bb,4,t,t,07,t,g,00000,3065,+
a,52.83,15,u,g,c,v,5.5,t,t,14,f,g,00000,2200,+
a,46.67,0.46,u,g,cc,h,0.415,t,t,11,t,g,00440,6,+
a,58.33,10,u,g,q,v,4,t,t,14,f,g,00000,1602,+
b,37.33,6.5,u,g,m,h,4.25,t,t,12,t,g,00093,0,+
b,23.08,2.5,u,g,c,v,1.085,t,t,11,t,g,00060,2184,+
b,32.75,1.5,u,g,cc,h,5.5,t,t,03,t,g,00000,0,+
a,21.67,11.5,y,p,j,j,0,t,t,11,t,g,00000,0,+
a,28.50,3.04,y,p,x,h,2.54,t,t,01,f,g,00070,0,+
a,68.67,15,u,g,e,z,0,t,t,14,f,g,00000,3376,+
b,28.00,2,u,g,k,h,4.165,t,t,02,t,g,00181,0,+
b,34.08,0.08,y,p,m,bb,0.04,t,t,01,t,g,00280,2000,+
b,27.67,2,u,g,x,h,1,t,t,04,f,g,00140,7544,+
b,44.00,2,u,g,m,v,1.75,t,t,02,t,g,00000,15,+
b,25.08,1.71,u,g,x,v,1.665,t,t,01,t,g,00395,20,+
b,32.00,1.75,y,p,e,h,0.04,t,f,0,t,g,00393,0,+
a,60.58,16.5,u,g,q,v,11,t,f,0,t,g,00021,10561,+
a,40.83,10,u,g,q,h,1.75,t,f,0,f,g,00029,837,+
b,19.33,9.5,u,g,q,v,1,t,f,0,t,g,00060,400,+
a,32.33,0.54,u,g,cc,v,0.04,t,f,0,f,g,00440,11177,+
b,36.67,3.25,u,g,q,h,9,t,f,0,t,g,00102,639,+
b,37.50,1.125,y,p,d,v,1.5,f,f,0,t,g,00431,0,+
a,25.08,2.54,y,p,aa,v,0.25,t,f,0,t,g,00370,0,+
b,41.33,0,u,g,c,bb,15,t,f,0,f,g,00000,0,+
b,56.00,12.5,u,g,k,h,8,t,f,0,t,g,00024,2028,+
a,49.83,13.585,u,g,k,h,8.5,t,f,0,t,g,00000,0,+
b,22.67,10.5,u,g,q,h,1.335,t,f,0,f,g,00100,0,+
b,27.00,1.5,y,p,w,v,0.375,t,f,0,t,g,00260,1065,+
b,25.00,12.5,u,g,aa,v,3,t,f,0,t,s,00020,0,+
a,26.08,8.665,u,g,aa,v,1.415,t,f,0,f,g,00160,150,+
a,18.42,9.25,u,g,q,v,1.21,t,t,04,f,g,00060,540,+
b,20.17,8.17,u,g,aa,v,1.96,t,t,14,f,g,00060,158,+
b,47.67,0.29,u,g,c,bb,15,t,t,20,f,g,00000,15000,+
a,21.25,2.335,u,g,i,bb,0.5,t,t,04,f,s,00080,0,+
a,20.67,3,u,g,q,v,0.165,t,t,03,f,g,00100,6,+
a,57.08,19.5,u,g,c,v,5.5,t,t,07,f,g,00000,3000,+
a,22.42,5.665,u,g,q,v,2.585,t,t,07,f,g,00129,3257,+
b,48.75,8.5,u,g,c,h,12.5,t,t,09,f,g,00181,1655,+
b,40.00,6.5,u,g,aa,bb,3.5,t,t,01,f,g,00000,500,+
b,40.58,5,u,g,c,v,5,t,t,07,f,g,00000,3065,+
a,28.67,1.04,u,g,c,v,2.5,t,t,05,t,g,00300,1430,+
a,33.08,4.625,u,g,q,h,1.625,t,t,02,f,g,00000,0,+
b,21.33,10.5,u,g,c,v,3,t,f,0,t,g,00000,0,+
b,42.00,0.205,u,g,i,h,5.125,t,f,0,f,g,00400,0,+
b,41.75,0.96,u,g,x,v,2.5,t,f,0,f,g,00510,600,+
b,22.67,1.585,y,p,w,v,3.085,t,t,06,f,g,00080,0,+
b,34.50,4.04,y,p,i,bb,8.5,t,t,07,t,g,00195,0,+
b,28.25,5.04,y,p,c,bb,1.5,t,t,08,t,g,00144,7,+
b,33.17,3.165,y,p,x,v,3.165,t,t,03,t,g,00380,0,+
b,48.17,7.625,u,g,w,h,15.5,t,t,12,f,g,00000,790,+
b,27.58,2.04,y,p,aa,v,2,t,t,03,t,g,00370,560,+
b,22.58,10.04,u,g,x,v,0.04,t,t,09,f,g,00060,396,+
a,24.08,0.5,u,g,q,h,1.25,t,t,01,f,g,00000,678,+
a,41.33,1,u,g,i,bb,2.25,t,f,0,t,g,00000,300,+
b,24.83,2.75,u,g,c,v,2.25,t,t,06,f,g,?,600,+
a,20.75,10.25,u,g,q,v,0.71,t,t,02,t,g,00049,0,+
b,36.33,2.125,y,p,w,v,0.085,t,t,01,f,g,00050,1187,+
a,35.42,12,u,g,q,h,14,t,t,08,f,g,00000,6590,+
a,71.58,0,?,?,?,?,0,f,f,0,f,p,?,0,+
b,28.67,9.335,u,g,q,h,5.665,t,t,06,f,g,00381,168,+
b,35.17,2.5,u,g,k,v,4.5,t,t,07,f,g,00150,1270,+
b,39.50,4.25,u,g,c,bb,6.5,t,t,16,f,g,00117,1210,+
b,39.33,5.875,u,g,cc,h,10,t,t,14,t,g,00399,0,+
b,24.33,6.625,y,p,d,v,5.5,t,f,0,t,s,00100,0,+
b,60.08,14.5,u,g,ff,ff,18,t,t,15,t,g,00000,1000,+
b,23.08,11.5,u,g,i,v,3.5,t,t,09,f,g,00056,742,+
b,26.67,2.71,y,p,cc,v,5.25,t,t,01,f,g,00211,0,+
b,48.17,3.5,u,g,aa,v,3.5,t,f,0,f,s,00230,0,+
b,41.17,4.04,u,g,cc,h,7,t,t,08,f,g,00320,0,+
b,55.92,11.5,u,g,ff,ff,5,t,t,05,f,g,00000,8851,+
b,53.92,9.625,u,g,e,v,8.665,t,t,05,f,g,00000,0,+
a,18.92,9.25,y,p,c,v,1,t,t,04,t,g,00080,500,+
a,50.08,12.54,u,g,aa,v,2.29,t,t,03,t,g,00156,0,+
b,65.42,11,u,g,e,z,20,t,t,07,t,g,00022,0,+
a,17.58,9,u,g,aa,v,1.375,t,f,0,t,g,00000,0,+
a,18.83,9.54,u,g,aa,v,0.085,t,f,0,f,g,00100,0,+
a,37.75,5.5,u,g,q,v,0.125,t,f,0,t,g,00228,0,+
b,23.25,4,u,g,c,bb,0.25,t,f,0,t,g,00160,0,+
b,18.08,5.5,u,g,k,v,0.5,t,f,0,f,g,00080,0,+
a,22.50,8.46,y,p,x,v,2.46,f,f,0,f,g,00164,0,+
b,19.67,0.375,u,g,q,v,2,t,t,02,t,g,00080,0,+
b,22.08,11,u,g,cc,v,0.665,t,f,0,f,g,00100,0,+
b,25.17,3.5,u,g,cc,v,0.625,t,t,07,f,g,00000,7059,+
a,47.42,3,u,g,x,v,13.875,t,t,02,t,g,00519,1704,+
b,33.50,1.75,u,g,x,h,4.5,t,t,04,t,g,00253,857,+
b,27.67,13.75,u,g,w,v,5.75,t,f,0,t,g,00487,500,+
a,58.42,21,u,g,i,bb,10,t,t,13,f,g,00000,6700,+
a,20.67,1.835,u,g,q,v,2.085,t,t,05,f,g,00220,2503,+
b,26.17,0.25,u,g,i,bb,0,t,f,0,t,g,00000,0,+
b,21.33,7.5,u,g,aa,v,1.415,t,t,01,f,g,00080,9800,+
b,42.83,4.625,u,g,q,v,4.58,t,f,0,f,s,00000,0,+
b,38.17,10.125,u,g,x,v,2.5,t,t,06,f,g,00520,196,+
b,20.50,10,y,p,c,v,2.5,t,f,0,f,s,00040,0,+
b,48.25,25.085,u,g,w,v,1.75,t,t,03,f,g,00120,14,+
b,28.33,5,u,g,w,v,11,t,f,0,t,g,00070,0,+
a,18.75,7.5,u,g,q,v,2.71,t,t,05,f,g,?,26726,+
b,18.50,2,u,g,i,v,1.5,t,t,02,f,g,00120,300,+
b,33.17,3.04,y,p,c,h,2.04,t,t,01,t,g,00180,18027,+
b,45.00,8.5,u,g,cc,h,14,t,t,01,t,g,00088,2000,+
a,19.67,0.21,u,g,q,h,0.29,t,t,11,f,g,00080,99,+
?,24.50,12.75,u,g,c,bb,4.75,t,t,02,f,g,00073,444,+
b,21.83,11,u,g,x,v,0.29,t,t,06,f,g,00121,0,+
b,40.25,21.5,u,g,e,z,20,t,t,11,f,g,00000,1200,+
b,41.42,5,u,g,q,h,5,t,t,06,t,g,00470,0,+
a,17.83,11,u,g,x,h,1,t,t,11,f,g,00000,3000,+
b,23.17,11.125,u,g,x,h,0.46,t,t,01,f,g,00100,0,+
b,?,0.625,u,g,k,v,0.25,f,f,0,f,g,00380,2010,-
b,18.17,10.25,u,g,c,h,1.085,f,f,0,f,g,00320,13,-
b,20.00,11.045,u,g,c,v,2,f,f,0,t,g,00136,0,-
b,20.00,0,u,g,d,v,0.5,f,f,0,f,g,00144,0,-
a,20.75,9.54,u,g,i,v,0.04,f,f,0,f,g,00200,1000,-
a,24.50,1.75,y,p,c,v,0.165,f,f,0,f,g,00132,0,-
b,32.75,2.335,u,g,d,h,5.75,f,f,0,t,g,00292,0,-
a,52.17,0,y,p,ff,ff,0,f,f,0,f,g,00000,0,-
a,48.17,1.335,u,g,i,o,0.335,f,f,0,f,g,00000,120,-
a,20.42,10.5,y,p,x,h,0,f,f,0,t,g,00154,32,-
b,50.75,0.585,u,g,ff,ff,0,f,f,0,f,g,00145,0,-
b,17.08,0.085,y,p,c,v,0.04,f,f,0,f,g,00140,722,-
b,18.33,1.21,y,p,e,dd,0,f,f,0,f,g,00100,0,-
a,32.00,6,u,g,d,v,1.25,f,f,0,f,g,00272,0,-
b,59.67,1.54,u,g,q,v,0.125,t,f,0,t,g,00260,0,+
b,18.00,0.165,u,g,q,n,0.21,f,f,0,f,g,00200,40,+
b,37.58,0,?,?,?,?,0,f,f,0,f,p,?,0,+
b,32.33,2.5,u,g,c,v,1.25,f,f,0,t,g,00280,0,-
b,18.08,6.75,y,p,m,v,0.04,f,f,0,f,g,00140,0,-
b,38.25,10.125,y,p,k,v,0.125,f,f,0,f,g,00160,0,-
b,30.67,2.5,u,g,cc,h,2.25,f,f,0,t,s,00340,0,-
b,18.58,5.71,u,g,d,v,0.54,f,f,0,f,g,00120,0,-
a,19.17,5.415,u,g,i,h,0.29,f,f,0,f,g,00080,484,-
a,18.17,10,y,p,q,h,0.165,f,f,0,f,g,00340,0,-
b,24.58,13.5,y,p,ff,ff,0,f,f,0,f,g,?,0,-
b,16.25,0.835,u,g,m,v,0.085,t,f,0,f,s,00200,0,-
b,21.17,0.875,y,p,c,h,0.25,f,f,0,f,g,00280,204,-
b,23.92,0.585,y,p,cc,h,0.125,f,f,0,f,g,00240,1,-
b,17.67,4.46,u,g,c,v,0.25,f,f,0,f,s,00080,0,-
a,16.50,1.25,u,g,q,v,0.25,f,t,01,f,g,00108,98,-
b,23.25,12.625,u,g,c,v,0.125,f,t,02,f,g,00000,5552,-
b,17.58,10,u,g,w,h,0.165,f,t,01,f,g,00120,1,-
a,?,1.5,u,g,ff,ff,0,f,t,02,t,g,00200,105,-
b,29.50,0.58,u,g,w,v,0.29,f,t,01,f,g,00340,2803,-
b,18.83,0.415,y,p,c,v,0.165,f,t,01,f,g,00200,1,-
a,21.75,1.75,y,p,j,j,0,f,f,0,f,g,00160,0,-
b,23.00,0.75,u,g,m,v,0.5,f,f,0,t,s,00320,0,-
a,18.25,10,u,g,w,v,1,f,t,01,f,g,00120,1,-
b,25.42,0.54,u,g,w,v,0.165,f,t,01,f,g,00272,444,-
b,35.75,2.415,u,g,w,v,0.125,f,t,02,f,g,00220,1,-
a,16.08,0.335,u,g,ff,ff,0,f,t,01,f,g,00160,126,-
a,31.92,3.125,u,g,ff,ff,3.04,f,t,02,t,g,00200,4,-
b,69.17,9,u,g,ff,ff,4,f,t,01,f,g,00070,6,-
b,32.92,2.5,u,g,aa,v,1.75,f,t,02,t,g,00720,0,-
b,16.33,2.75,u,g,aa,v,0.665,f,t,01,f,g,00080,21,-
b,22.17,12.125,u,g,c,v,3.335,f,t,02,t,g,00180,173,-
a,57.58,2,u,g,ff,ff,6.5,f,t,01,f,g,00000,10,-
b,18.25,0.165,u,g,d,v,0.25,f,f,0,t,s,00280,0,-
b,23.42,1,u,g,c,v,0.5,f,f,0,t,s,00280,0,-
a,15.92,2.875,u,g,q,v,0.085,f,f,0,f,g,00120,0,-
a,24.75,13.665,u,g,q,h,1.5,f,f,0,f,g,00280,1,-
b,48.75,26.335,y,p,ff,ff,0,t,f,0,t,g,00000,0,-
b,23.50,2.75,u,g,ff,ff,4.5,f,f,0,f,g,00160,25,-
b,18.58,10.29,u,g,ff,ff,0.415,f,f,0,f,g,00080,0,-
b,27.75,1.29,u,g,k,h,0.25,f,f,0,t,s,00140,0,-
a,31.75,3,y,p,j,j,0,f,f,0,f,g,00160,20,-
a,24.83,4.5,u,g,w,v,1,f,f,0,t,g,00360,6,-
b,19.00,1.75,y,p,c,v,2.335,f,f,0,t,g,00112,6,-
a,16.33,0.21,u,g,aa,v,0.125,f,f,0,f,g,00200,1,-
a,18.58,10,u,g,d,v,0.415,f,f,0,f,g,00080,42,-
b,16.25,0,y,p,aa,v,0.25,f,f,0,f,g,00060,0,-
b,23.00,0.75,u,g,m,v,0.5,t,f,0,t,s,00320,0,-
b,21.17,0.25,y,p,c,h,0.25,f,f,0,f,g,00280,204,-
b,17.50,22,l,gg,ff,o,0,f,f,0,t,p,00450,100000,+
b,19.17,0,y,p,m,bb,0,f,f,0,t,s,00500,1,+
b,36.75,0.125,y,p,c,v,1.5,f,f,0,t,g,00232,113,+
b,21.25,1.5,u,g,w,v,1.5,f,f,0,f,g,00150,8,+
a,18.08,0.375,l,gg,cc,ff,10,f,f,0,t,s,00300,0,+
a,33.67,0.375,u,g,cc,v,0.375,f,f,0,f,g,00300,44,+
b,48.58,0.205,y,p,k,v,0.25,t,t,11,f,g,00380,2732,+
b,33.67,1.25,u,g,w,v,1.165,f,f,0,f,g,00120,0,-
a,29.50,1.085,y,p,x,v,1,f,f,0,f,g,00280,13,-
b,30.17,1.085,y,p,c,v,0.04,f,f,0,f,g,00170,179,-
?,40.83,3.5,u,g,i,bb,0.5,f,f,0,f,s,01160,0,-
b,34.83,2.5,y,p,w,v,3,f,f,0,f,s,00200,0,-
b,?,4,y,p,i,v,0.085,f,f,0,t,g,00411,0,-
b,20.42,0,?,?,?,?,0,f,f,0,f,p,?,0,-
a,33.25,2.5,y,p,c,v,2.5,f,f,0,t,g,00000,2,-
b,34.08,2.5,u,g,c,v,1,f,f,0,f,g,00460,16,-
a,25.25,12.5,u,g,d,v,1,f,f,0,t,g,00180,1062,-
b,34.75,2.5,u,g,cc,bb,0.5,f,f,0,f,g,00348,0,-
b,27.67,0.75,u,g,q,h,0.165,f,f,0,t,g,00220,251,-
b,47.33,6.5,u,g,c,v,1,f,f,0,t,g,00000,228,-
a,34.83,1.25,y,p,i,h,0.5,f,f,0,t,g,00160,0,-
a,33.25,3,y,p,aa,v,2,f,f,0,f,g,00180,0,-
b,28.00,3,u,g,w,v,0.75,f,f,0,t,g,00300,67,-
a,39.08,4,u,g,c,v,3,f,f,0,f,g,00480,0,-
b,42.75,4.085,u,g,aa,v,0.04,f,f,0,f,g,00108,100,-
b,26.92,2.25,u,g,i,bb,0.5,f,f,0,t,g,00640,4000,-
b,33.75,2.75,u,g,i,bb,0,f,f,0,f,g,00180,0,-
b,38.92,1.75,u,g,k,v,0.5,f,f,0,t,g,00300,2,-
b,62.75,7,u,g,e,z,0,f,f,0,f,g,00000,12,-
?,32.25,1.5,u,g,c,v,0.25,f,f,0,t,g,00372,122,-
b,26.75,4.5,y,p,c,bb,2.5,f,f,0,f,g,00200,1210,-
b,63.33,0.54,u,g,c,v,0.585,t,t,03,t,g,00180,0,-
b,27.83,1.5,u,g,w,v,2.25,f,t,01,t,g,00100,3,-
a,26.17,2,u,g,j,j,0,f,f,0,t,g,00276,1,-
b,22.17,0.585,y,p,ff,ff,0,f,f,0,f,g,00100,0,-
b,22.50,11.5,y,p,m,v,1.5,f,f,0,t,g,00000,4000,-
b,30.75,1.585,u,g,d,v,0.585,f,f,0,t,s,00000,0,-
b,36.67,2,u,g,i,v,0.25,f,f,0,t,g,00221,0,-
a,16.00,0.165,u,g,aa,v,1,f,t,02,t,g,00320,1,-
b,41.17,1.335,u,g,d,v,0.165,f,f,0,f,g,00168,0,-
a,19.50,0.165,u,g,q,v,0.04,f,f,0,t,g,00380,0,-
b,32.42,3,u,g,d,v,0.165,f,f,0,t,g,00120,0,-
a,36.75,4.71,u,g,ff,ff,0,f,f,0,f,g,00160,0,-
a,30.25,5.5,u,g,k,v,5.5,f,f,0,t,s,00100,0,-
b,23.08,2.5,u,g,ff,ff,0.085,f,f,0,t,g,00100,4208,-
b,26.83,0.54,u,g,k,ff,0,f,f,0,f,g,00100,0,-
b,16.92,0.335,y,p,k,v,0.29,f,f,0,f,s,00200,0,-
b,24.42,2,u,g,e,dd,0.165,f,t,02,f,g,00320,1300,-
b,42.83,1.25,u,g,m,v,13.875,f,t,01,t,g,00352,112,-
a,22.75,6.165,u,g,aa,v,0.165,f,f,0,f,g,00220,1000,-
b,39.42,1.71,y,p,m,v,0.165,f,f,0,f,s,00400,0,-
a,23.58,11.5,y,p,k,h,3,f,f,0,t,g,00020,16,-
b,21.42,0.75,y,p,r,n,0.75,f,f,0,t,g,00132,2,-
b,33.00,2.5,y,p,w,v,7,f,f,0,t,g,00280,0,-
b,26.33,13,u,g,e,dd,0,f,f,0,t,g,00140,1110,-
a,45.00,4.585,u,g,k,h,1,f,f,0,t,s,00240,0,-
b,26.25,1.54,u,g,w,v,0.125,f,f,0,f,g,00100,0,-
?,28.17,0.585,u,g,aa,v,0.04,f,f,0,f,g,00260,1004,-
a,20.83,0.5,y,p,e,dd,1,f,f,0,f,g,00260,0,-
b,28.67,14.5,u,g,d,v,0.125,f,f,0,f,g,00000,286,-
b,20.67,0.835,y,p,c,v,2,f,f,0,t,s,00240,0,-
b,34.42,1.335,u,g,i,bb,0.125,f,f,0,t,g,00440,4500,-
b,33.58,0.25,u,g,i,bb,4,f,f,0,t,s,00420,0,-
b,43.17,5,u,g,i,bb,2.25,f,f,0,t,g,00141,0,-
a,22.67,7,u,g,c,v,0.165,f,f,0,f,g,00160,0,-
a,24.33,2.5,y,p,i,bb,4.5,f,f,0,f,g,00200,456,-
a,56.83,4.25,y,p,ff,ff,5,f,f,0,t,g,00000,4,-
b,22.08,11.46,u,g,k,v,1.585,f,f,0,t,g,00100,1212,-
b,34.00,5.5,y,p,c,v,1.5,f,f,0,t,g,00060,0,-
b,22.58,1.5,y,p,aa,v,0.54,f,f,0,t,g,00120,67,-
b,21.17,0,u,g,c,v,0.5,f,f,0,t,s,00000,0,-
b,26.67,14.585,u,g,i,bb,0,f,f,0,t,g,00178,0,-
b,22.92,0.17,u,g,m,v,0.085,f,f,0,f,s,00000,0,-
b,15.17,7,u,g,e,v,1,f,f,0,f,g,00600,0,-
b,39.92,5,u,g,i,bb,0.21,f,f,0,f,g,00550,0,-
b,27.42,12.5,u,g,aa,bb,0.25,f,f,0,t,g,00720,0,-
b,24.75,0.54,u,g,m,v,1,f,f,0,t,g,00120,1,-
b,41.17,1.25,y,p,w,v,0.25,f,f,0,f,g,00000,195,-
a,33.08,1.625,u,g,d,v,0.54,f,f,0,t,g,00000,0,-
b,29.83,2.04,y,p,x,h,0.04,f,f,0,f,g,00128,1,-
a,23.58,0.585,y,p,ff,ff,0.125,f,f,0,f,g,00120,87,-
b,26.17,12.5,y,p,k,h,1.25,f,f,0,t,g,00000,17,-
b,31.00,2.085,u,g,c,v,0.085,f,f,0,f,g,00300,0,-
b,20.75,5.085,y,p,j,v,0.29,f,f,0,f,g,00140,184,-
b,28.92,0.375,u,g,c,v,0.29,f,f,0,f,g,00220,140,-
a,51.92,6.5,u,g,i,bb,3.085,f,f,0,t,g,00073,0,-
a,22.67,0.335,u,g,q,v,0.75,f,f,0,f,s,00160,0,-
b,34.00,5.085,y,p,i,bb,1.085,f,f,0,t,g,00480,0,-
a,69.50,6,u,g,ff,ff,0,f,f,0,f,s,00000,0,-
a,40.33,8.125,y,p,k,v,0.165,f,t,02,f,g,?,18,-
a,19.58,0.665,y,p,c,v,1,f,t,01,f,g,02000,2,-
b,16.00,3.125,u,g,w,v,0.085,f,t,01,f,g,00000,6,-
b,17.08,0.25,u,g,q,v,0.335,f,t,04,f,g,00160,8,-
b,31.25,2.835,u,g,ff,ff,0,f,t,05,f,g,00176,146,-
b,25.17,3,u,g,c,v,1.25,f,t,01,f,g,00000,22,-
a,22.67,0.79,u,g,i,v,0.085,f,f,0,f,g,00144,0,-
b,40.58,1.5,u,g,i,bb,0,f,f,0,f,s,00300,0,-
b,22.25,0.46,u,g,k,v,0.125,f,f,0,t,g,00280,55,-
a,22.25,1.25,y,p,ff,ff,3.25,f,f,0,f,g,00280,0,-
b,22.50,0.125,y,p,k,v,0.125,f,f,0,f,g,00200,70,-
b,23.58,1.79,u,g,c,v,0.54,f,f,0,t,g,00136,1,-
b,38.42,0.705,u,g,c,v,0.375,f,t,02,f,g,00225,500,-
a,26.58,2.54,y,p,ff,ff,0,f,f,0,t,g,00180,60,-
b,35.00,2.5,u,g,i,v,1,f,f,0,t,g,00210,0,-
b,20.42,1.085,u,g,q,v,1.5,f,f,0,f,g,00108,7,-
b,29.42,1.25,u,g,w,v,1.75,f,f,0,f,g,00200,0,-
b,26.17,0.835,u,g,cc,v,1.165,f,f,0,f,g,00100,0,-
b,33.67,2.165,u,g,c,v,1.5,f,f,0,f,p,00120,0,-
b,24.58,1.25,u,g,c,v,0.25,f,f,0,f,g,00110,0,-
a,27.67,2.04,u,g,w,v,0.25,f,f,0,t,g,00180,50,-
b,37.50,0.835,u,g,e,v,0.04,f,f,0,f,g,00120,5,-
b,49.17,2.29,u,g,ff,ff,0.29,f,f,0,f,g,00200,3,-
b,33.58,0.335,y,p,cc,v,0.085,f,f,0,f,g,00180,0,-
b,51.83,3,y,p,ff,ff,1.5,f,f,0,f,g,00180,4,-
b,22.92,3.165,y,p,c,v,0.165,f,f,0,f,g,00160,1058,-
b,21.83,1.54,u,g,k,v,0.085,f,f,0,t,g,00356,0,-
b,25.25,1,u,g,aa,v,0.5,f,f,0,f,g,00200,0,-
b,58.58,2.71,u,g,c,v,2.415,f,f,0,t,g,00320,0,-
b,19.00,0,y,p,ff,ff,0,f,t,04,f,g,00045,1,-
b,19.58,0.585,u,g,ff,ff,0,f,t,03,f,g,00350,769,-
a,53.33,0.165,u,g,ff,ff,0,f,f,0,t,s,00062,27,-
a,27.17,1.25,u,g,ff,ff,0,f,t,01,f,g,00092,300,-
b,25.92,0.875,u,g,k,v,0.375,f,t,02,t,g,00174,3,-
b,23.08,0,u,g,k,v,1,f,t,11,f,s,00000,0,-
b,39.58,5,u,g,ff,ff,0,f,t,02,f,g,00017,1,-
b,30.58,2.71,y,p,m,v,0.125,f,f,0,t,s,00080,0,-
b,17.25,3,u,g,k,v,0.04,f,f,0,t,g,00160,40,-
a,17.67,0,y,p,j,ff,0,f,f,0,f,g,00086,0,-
a,?,11.25,u,g,ff,ff,0,f,f,0,f,g,?,5200,-
b,16.50,0.125,u,g,c,v,0.165,f,f,0,f,g,00132,0,-
a,27.33,1.665,u,g,ff,ff,0,f,f,0,f,g,00340,1,-
b,31.25,1.125,u,g,ff,ff,0,f,t,01,f,g,00096,19,-
b,20.00,7,u,g,c,v,0.5,f,f,0,f,g,00000,0,-
b,?,3,y,p,i,bb,7,f,f,0,f,g,00000,1,-
b,39.50,1.625,u,g,c,v,1.5,f,f,0,f,g,00000,316,-
b,36.50,4.25,u,g,q,v,3.5,f,f,0,f,g,00454,50,-
?,29.75,0.665,u,g,w,v,0.25,f,f,0,t,g,00300,0,-
b,52.42,1.5,u,g,d,v,3.75,f,f,0,t,g,00000,350,-
b,36.17,18.125,u,g,w,v,0.085,f,f,0,f,g,00320,3552,-
b,34.58,0,?,?,?,?,0,f,f,0,f,p,?,0,-
b,29.67,0.75,y,p,c,v,0.04,f,f,0,f,g,00240,0,-
b,36.17,5.5,u,g,i,bb,5,f,f,0,f,g,00210,687,-
b,25.67,0.29,y,p,c,v,1.5,f,f,0,t,g,00160,0,-
a,24.50,2.415,y,p,c,v,0,f,f,0,f,g,00120,0,-
b,24.08,0.875,u,g,m,v,0.085,f,t,04,f,g,00254,1950,-
b,21.92,0.5,u,g,c,v,0.125,f,f,0,f,g,00360,0,-
a,36.58,0.29,u,g,ff,ff,0,f,t,10,f,g,00200,18,-
a,23.00,1.835,u,g,j,j,0,f,t,01,f,g,00200,53,-
a,27.58,3,u,g,m,v,2.79,f,t,01,t,g,00280,10,-
b,31.08,3.085,u,g,c,v,2.5,f,t,02,t,g,00160,41,-
a,30.42,1.375,u,g,w,h,0.04,f,t,03,f,g,00000,33,-
b,22.08,2.335,u,g,k,v,0.75,f,f,0,f,g,00180,0,-
b,16.33,4.085,u,g,i,h,0.415,f,f,0,t,g,00120,0,-
a,21.92,11.665,u,g,k,h,0.085,f,f,0,f,g,00320,5,-
b,21.08,4.125,y,p,i,h,0.04,f,f,0,f,g,00140,100,-
b,17.42,6.5,u,g,i,v,0.125,f,f,0,f,g,00060,100,-
b,19.17,4,y,p,i,v,1,f,f,0,t,g,00360,1000,-
b,20.67,0.415,u,g,c,v,0.125,f,f,0,f,g,00000,44,-
b,26.75,2,u,g,d,v,0.75,f,f,0,t,g,00080,0,-
b,23.58,0.835,u,g,i,h,0.085,f,f,0,t,g,00220,5,-
b,39.17,2.5,y,p,i,h,10,f,f,0,t,s,00200,0,-
b,22.75,11.5,u,g,i,v,0.415,f,f,0,f,g,00000,0,-
?,26.50,2.71,y,p,?,?,0.085,f,f,0,f,s,00080,0,-
a,16.92,0.5,u,g,i,v,0.165,f,t,06,t,g,00240,35,-
b,23.50,3.165,y,p,k,v,0.415,f,t,01,t,g,00280,80,-
a,17.33,9.5,u,g,aa,v,1.75,f,t,10,t,g,00000,10,-
b,23.75,0.415,y,p,c,v,0.04,f,t,02,f,g,00128,6,-
b,34.67,1.08,u,g,m,v,1.165,f,f,0,f,s,00028,0,-
b,74.83,19,y,p,ff,ff,0.04,f,t,02,f,g,00000,351,-
b,28.17,0.125,y,p,k,v,0.085,f,f,0,f,g,00216,2100,-
b,24.50,13.335,y,p,aa,v,0.04,f,f,0,t,g,00120,475,-
b,18.83,3.54,y,p,ff,ff,0,f,f,0,t,g,00180,1,-
?,45.33,1,u,g,q,v,0.125,f,f,0,t,g,00263,0,-
@//E*O*F crx.data//
chmod u=rw,g=,o= crx.data
 
echo x - crx.names
sed 's/^@//' > "crx.names" <<'@//E*O*F crx.names//'
|  This file concerns credit card applications.  All attribute names
|  and values have been changed to meaningless symbols to protect
|  confidentiality of the data.
|  
|  Title:
|  	Credit Approval
|  
|  Sources:
|  	(confidential)
|  	Submitted by quinlan@cs.su.oz.au
|  
|  Past Usage:
|  	See Quinlan,
|	* "Simplifying decision trees", Int J Man-Machine Studies 27,
|	   Dec 1987, pp. 221-234.
|       * "C4.5: Programs for Machine Learning", Morgan Kaufmann, Oct 1992
|  
|  Relevant Information:
|  	This dataset is interesting because there is a good mix of
|  	attributes -- continuous, discrete with small numbers of
|  	values, and discrete with larger numbers of values.  There
|  	are also a few missing values.
|  
|  Instances:
|  	690
|  
|  Attributes:
|  	15
|  
|  Missing Attribute Values:
|  	37 cases (5%) have one or more missing values.  The missing
|  	values from particular attributes are:
|  		A1:  12
|  		A2:  12
|  		A4:   6
|  		A5:   6
|  		A6:   9
|  		A7:   9
|  		A14: 13
|  
|  Class Distribution:
|  	+: 307 (44.5%)
|  	-: 383 (55.5%)


+, -.	| classes

A1:	b, a. |type: A
A2:	continuous. |type: B
A3:	continuous. |type: B
A4:	u, y, l, t. |type: C
A5:	g, p, gg. |type: D
A6:	c, d, cc, i, j, k, m, r, q, w, x, e, aa, ff. |type: E
A7:	v, h, bb, j, n, z, dd, ff, o. |type: E
A8:	continuous. |type: B
A9:	t, f. |type: F
A10:	t, f. |type: F
A11:	continuous. |type: B
A12:	t, f. |type: F
A13:	g, p, s. |type: G
A14:	continuous. |type: H
A15:	continuous. |type: H
@//E*O*F crx.names//
chmod u=rw,g=w,o=w crx.names
 
echo x - crx.test
sed 's/^@//' > "crx.test" <<'@//E*O*F crx.test//'
a,47.25,0.75,u,g,q,h,2.75,t,t,01,f,g,00333,892,+
b,24.17,0.875,u,g,q,v,4.625,t,t,02,t,g,00520,2000,+
b,39.25,9.5,u,g,m,v,6.5,t,t,14,f,g,00240,4607,+
a,20.50,11.835,u,g,c,h,6,t,f,0,f,g,00340,0,+
a,18.83,4.415,y,p,c,h,3,t,f,0,f,g,00240,0,+
b,19.17,9.5,u,g,w,v,1.5,t,f,0,f,g,00120,2206,+
a,25.00,0.875,u,g,x,h,1.04,t,f,0,t,g,00160,5860,+
b,20.17,9.25,u,g,c,v,1.665,t,t,03,t,g,00040,28,+
b,25.75,0.5,u,g,c,v,1.46,t,t,05,t,g,00312,0,+
b,20.42,7,u,g,c,v,1.625,t,t,03,f,g,00200,1391,+
b,?,4,u,g,x,v,5,t,t,03,t,g,00290,2279,+
b,39.00,5,u,g,cc,v,3.5,t,t,10,t,g,00000,0,+
a,64.08,0.165,u,g,ff,ff,0,t,t,01,f,g,00232,100,+
b,28.25,5.125,u,g,x,v,4.75,t,t,02,f,g,00420,7,+
a,28.75,3.75,u,g,c,v,1.085,t,t,01,t,g,00371,0,+
b,31.33,19.5,u,g,c,v,7,t,t,16,f,g,00000,5000,+
a,18.92,9,u,g,aa,v,0.75,t,t,02,f,g,00088,591,+
a,24.75,3,u,g,q,h,1.835,t,t,19,f,g,00000,500,+
a,30.67,12,u,g,c,v,2,t,t,01,f,g,00220,19,+
b,21.00,4.79,y,p,w,v,2.25,t,t,01,t,g,00080,300,+
b,13.75,4,y,p,w,v,1.75,t,t,02,t,g,00120,1000,+
a,46.00,4,u,g,j,j,0,t,f,0,f,g,00100,960,+
a,44.33,0,u,g,c,v,2.5,t,f,0,f,g,00000,0,+
b,20.25,9.96,u,g,e,dd,0,t,f,0,f,g,00000,0,+
b,22.67,2.54,y,p,c,h,2.585,t,f,0,f,g,00000,0,+
b,?,10.5,u,g,x,v,6.5,t,f,0,f,g,00000,0,+
a,60.92,5,u,g,aa,v,4,t,t,04,f,g,00000,99,+
b,16.08,0.75,u,g,c,v,1.75,t,t,05,t,g,00352,690,+
a,28.17,0.375,u,g,q,v,0.585,t,t,04,f,g,00080,0,+
b,39.17,1.71,u,g,x,v,0.125,t,t,05,t,g,00480,0,+
?,20.42,7.5,u,g,k,v,1.5,t,t,01,f,g,00160,234,+
a,30.00,5.29,u,g,e,dd,2.25,t,t,05,t,g,00099,500,+
b,22.83,3,u,g,m,v,1.29,t,t,01,f,g,00260,800,+
a,22.50,8.5,u,g,q,v,1.75,t,t,10,f,g,00080,990,-
a,28.58,1.665,u,g,q,v,2.415,t,f,0,t,g,00440,0,-
b,45.17,1.5,u,g,c,v,2.5,t,f,0,t,g,00140,0,-
b,41.58,1.75,u,g,k,v,0.21,t,f,0,f,g,00160,0,-
a,57.08,0.335,u,g,i,bb,1,t,f,0,t,g,00252,2197,-
a,55.75,7.08,u,g,k,h,6.75,t,t,03,t,g,00100,50,-
b,43.25,25.21,u,g,q,h,0.21,t,t,01,f,g,00760,90,-
a,25.33,2.085,u,g,c,h,2.75,t,f,0,t,g,00360,1,-
a,24.58,0.67,u,g,aa,h,1.75,t,f,0,f,g,00400,0,-
b,43.17,2.25,u,g,i,bb,0.75,t,f,0,f,g,00560,0,-
b,40.92,0.835,u,g,ff,ff,0,t,f,0,f,g,00130,1,-
b,31.83,2.5,u,g,aa,v,7.5,t,f,0,t,g,00523,0,-
a,33.92,1.585,y,p,ff,ff,0,t,f,0,f,g,00320,0,-
a,24.92,1.25,u,g,ff,ff,0,t,f,0,f,g,00080,0,-
b,35.25,3.165,u,g,x,h,3.75,t,f,0,t,g,00680,0,-
b,34.25,1.75,u,g,w,bb,0.25,t,f,0,t,g,00163,0,-
b,80.25,5.5,u,g,?,?,0.54,t,f,0,f,g,00000,340,-
b,19.42,1.5,y,p,cc,v,2,t,f,0,t,g,00100,20,-
b,42.75,3,u,g,i,bb,1,t,f,0,f,g,00000,200,-
b,19.67,10,y,p,k,h,0.835,t,f,0,t,g,00140,0,-
b,36.33,3.79,u,g,w,v,1.165,t,f,0,t,g,00200,0,-
b,30.08,1.04,y,p,i,bb,0.5,t,t,10,t,g,00132,28,-
b,44.25,11,y,p,d,v,1.5,t,f,0,f,s,00000,0,-
b,23.58,0.46,y,p,w,v,2.625,t,t,06,t,g,00208,347,-
b,23.92,1.5,u,g,d,h,1.875,t,t,06,f,g,00200,327,+
b,33.17,1,u,g,x,v,0.75,t,t,07,t,g,00340,4071,+
b,48.33,12,u,g,m,v,16,t,f,0,f,s,00110,0,+
b,76.75,22.29,u,g,e,z,12.75,t,t,01,t,g,00000,109,+
b,51.33,10,u,g,i,bb,0,t,t,11,f,g,00000,1249,+
b,34.75,15,u,g,r,n,5.375,t,t,09,t,g,00000,134,+
b,38.58,3.335,u,g,w,v,4,t,t,14,f,g,00383,1344,+
a,22.42,11.25,y,p,x,h,0.75,t,t,04,f,g,00000,321,+
b,41.92,0.42,u,g,c,h,0.21,t,t,06,f,g,00220,948,+
b,29.58,4.5,u,g,w,v,7.5,t,t,02,t,g,00330,0,+
a,32.17,1.46,u,g,w,v,1.085,t,t,16,f,g,00120,2079,+
b,51.42,0.04,u,g,x,h,0.04,t,f,0,f,g,00000,3000,+
a,22.83,2.29,u,g,q,h,2.29,t,t,07,t,g,00140,2384,+
a,25.00,12.33,u,g,cc,h,3.5,t,t,06,f,g,00400,458,+
b,26.75,1.125,u,g,x,h,1.25,t,f,0,f,g,00000,5298,+
b,23.33,1.5,u,g,c,h,1.415,t,f,0,f,g,00422,200,+
b,24.42,12.335,u,g,q,h,1.585,t,f,0,t,g,00120,0,+
b,42.17,5.04,u,g,q,h,12.75,t,f,0,t,g,00092,0,+
a,20.83,3,u,g,aa,v,0.04,t,f,0,f,g,00100,0,+
b,23.08,11.5,u,g,w,h,2.125,t,t,11,t,g,00290,284,+
a,25.17,2.875,u,g,x,h,0.875,t,f,0,f,g,00360,0,+
b,43.08,0.375,y,p,c,v,0.375,t,t,08,t,g,00300,162,+
a,35.75,0.915,u,g,aa,v,0.75,t,t,04,f,g,00000,1583,+
b,59.50,2.75,u,g,w,v,1.75,t,t,05,t,g,00060,58,+
b,21.00,3,y,p,d,v,1.085,t,t,08,t,g,00160,1,+
b,21.92,0.54,y,p,x,v,0.04,t,t,01,t,g,00840,59,+
a,65.17,14,u,g,ff,ff,0,t,t,11,t,g,00000,1400,+
a,20.33,10,u,g,c,h,1,t,t,04,f,g,00050,1465,+
b,32.25,0.165,y,p,c,h,3.25,t,t,01,t,g,00432,8000,+
b,30.17,0.5,u,g,c,v,1.75,t,t,11,f,g,00032,540,+
b,25.17,6,u,g,c,v,1,t,t,03,f,g,00000,0,+
b,39.17,1.625,u,g,c,v,1.5,t,t,10,f,g,00186,4700,+
b,39.08,6,u,g,m,v,1.29,t,t,05,t,g,00108,1097,+
b,31.67,0.83,u,g,x,v,1.335,t,t,08,t,g,00303,3290,+
b,41.00,0.04,u,g,e,v,0.04,f,t,01,f,s,00560,0,+
b,48.50,4.25,u,g,m,v,0.125,t,f,0,t,g,00225,0,+
b,32.67,9,y,p,w,h,5.25,t,f,0,t,g,00154,0,+
a,28.08,15,y,p,e,z,0,t,f,0,f,g,00000,13212,+
b,73.42,17.75,u,g,ff,ff,0,t,f,0,t,g,00000,0,+
b,64.08,20,u,g,x,h,17.5,t,t,09,t,g,00000,1000,+
b,51.58,15,u,g,c,v,8.5,t,t,09,f,g,00000,0,+
b,26.67,1.75,y,p,c,v,1,t,t,05,t,g,00160,5777,+
b,25.33,0.58,u,g,c,v,0.29,t,t,07,t,g,00096,5124,+
b,30.17,6.5,u,g,cc,v,3.125,t,t,08,f,g,00330,1200,+
b,27.00,0.75,u,g,c,h,4.25,t,t,03,t,g,00312,150,+
b,23.17,0,?,?,?,?,0,f,f,0,f,p,?,0,+
b,34.17,5.25,u,g,w,v,0.085,f,f,0,t,g,00290,6,+
b,38.67,0.21,u,g,k,v,0.085,t,f,0,t,g,00280,0,+
b,25.75,0.75,u,g,c,bb,0.25,t,f,0,f,g,00349,23,+
a,46.08,3,u,g,c,v,2.375,t,t,08,t,g,00396,4159,+
a,21.50,6,u,g,aa,v,2.5,t,t,03,f,g,00080,918,+
?,20.08,0.125,u,g,q,v,1,f,t,01,f,g,00240,768,+
b,20.50,2.415,u,g,c,v,2,t,t,11,t,g,00200,3000,+
a,29.50,0.46,u,g,k,v,0.54,t,t,04,f,g,00380,500,+
?,42.25,1.75,y,p,?,?,0,f,f,0,t,g,00150,1,-
b,29.83,1.25,y,p,k,v,0.25,f,f,0,f,g,00224,0,-
b,20.08,0.25,u,g,q,v,0.125,f,f,0,f,g,00200,0,-
b,23.42,0.585,u,g,c,h,0.085,t,f,0,f,g,00180,0,-
a,29.58,1.75,y,p,k,v,1.25,f,f,0,t,g,00280,0,-
b,16.17,0.04,u,g,c,v,0.04,f,f,0,f,g,00000,0,+
b,32.33,3.5,u,g,k,v,0.5,f,f,0,t,g,00232,0,-
b,?,0.04,y,p,d,v,4.25,f,f,0,t,g,00460,0,-
b,47.83,4.165,u,g,x,bb,0.085,f,f,0,t,g,00520,0,-
b,20.00,1.25,y,p,k,v,0.125,f,f,0,f,g,00140,4,-
b,27.58,3.25,y,p,q,h,5.085,f,t,02,t,g,00369,1,-
b,22.00,0.79,u,g,w,v,0.29,f,t,01,f,g,00420,283,-
b,19.33,10.915,u,g,c,bb,0.585,f,t,02,t,g,00200,7,-
a,38.33,4.415,u,g,c,v,0.125,f,f,0,f,g,00160,0,-
b,29.42,1.25,u,g,c,h,0.25,f,t,02,t,g,00400,108,-
b,22.67,0.75,u,g,i,v,1.585,f,t,01,t,g,00400,9,-
b,32.25,14,y,p,ff,ff,0,f,t,02,f,g,00160,1,-
b,29.58,4.75,u,g,m,v,2,f,t,01,t,g,00460,68,-
b,18.42,10.415,y,p,aa,v,0.125,t,f,0,f,g,00120,375,-
b,22.17,2.25,u,g,i,v,0.125,f,f,0,f,g,00160,10,-
b,22.67,0.165,u,g,c,j,2.25,f,f,0,t,s,00000,0,+
a,25.58,0,?,?,?,?,0,f,f,0,f,p,?,0,+
b,18.83,0,u,g,q,v,0.665,f,f,0,f,g,00160,1,-
b,21.58,0.79,y,p,cc,v,0.665,f,f,0,f,g,00160,0,-
b,23.75,12,u,g,c,v,2.085,f,f,0,f,s,00080,0,-
b,22.00,7.835,y,p,i,bb,0.165,f,f,0,t,g,?,0,-
b,36.08,2.54,u,g,ff,ff,0,f,f,0,f,g,00000,1000,-
b,29.25,13,u,g,d,h,0.5,f,f,0,f,g,00228,0,-
a,19.58,0.665,u,g,w,v,1.665,f,f,0,f,g,00220,5,-
a,22.92,1.25,u,g,q,v,0.25,f,f,0,t,g,00120,809,-
a,27.25,0.29,u,g,m,h,0.125,f,t,01,t,g,00272,108,-
a,38.75,1.5,u,g,ff,ff,0,f,f,0,f,g,00076,0,-
b,32.42,2.165,y,p,k,ff,0,f,f,0,f,g,00120,0,-
a,23.75,0.71,u,g,w,v,0.25,f,t,01,t,g,00240,4,-
b,18.17,2.46,u,g,c,n,0.96,f,t,02,t,g,00160,587,-
b,40.92,0.5,y,p,m,v,0.5,f,f,0,t,g,00130,0,-
b,19.50,9.585,u,g,aa,v,0.79,f,f,0,f,g,00080,350,-
b,28.58,3.625,u,g,aa,v,0.25,f,f,0,t,g,00100,0,-
b,35.58,0.75,u,g,k,v,1.5,f,f,0,t,g,00231,0,-
b,34.17,2.75,u,g,i,bb,2.5,f,f,0,t,g,00232,200,-
?,33.17,2.25,y,p,cc,v,3.5,f,f,0,t,g,00200,141,-
b,31.58,0.75,y,p,aa,v,3.5,f,f,0,t,g,00320,0,-
a,52.50,7,u,g,aa,h,3,f,f,0,f,g,00000,0,-
b,36.17,0.42,y,p,w,v,0.29,f,f,0,t,g,00309,2,-
b,37.33,2.665,u,g,cc,v,0.165,f,f,0,t,g,00000,501,-
a,20.83,8.5,u,g,c,v,0.165,f,f,0,f,g,00000,351,-
b,24.08,9,u,g,aa,v,0.25,f,f,0,t,g,00000,0,-
b,25.58,0.335,u,g,k,h,3.5,f,f,0,t,g,00340,0,-
a,35.17,3.75,u,g,ff,ff,0,f,t,06,f,g,00000,200,-
b,48.08,3.75,u,g,i,bb,1,f,f,0,f,g,00100,2,-
a,15.83,7.625,u,g,q,v,0.125,f,t,01,t,g,00000,160,-
a,22.50,0.415,u,g,i,v,0.335,f,f,0,t,s,00144,0,-
b,21.50,11.5,u,g,i,v,0.5,t,f,0,t,g,00100,68,-
a,23.58,0.83,u,g,q,v,0.415,f,t,01,t,g,00200,11,-
a,21.08,5,y,p,ff,ff,0,f,f,0,f,g,00000,0,-
b,25.67,3.25,u,g,c,h,2.29,f,t,01,t,g,00416,21,-
a,38.92,1.665,u,g,aa,v,0.25,f,f,0,f,g,00000,390,-
a,15.75,0.375,u,g,c,v,1,f,f,0,f,g,00120,18,-
a,28.58,3.75,u,g,c,v,0.25,f,t,01,t,g,00040,154,-
b,22.25,9,u,g,aa,v,0.085,f,f,0,f,g,00000,0,-
b,29.83,3.5,u,g,c,v,0.165,f,f,0,f,g,00216,0,-
a,23.50,1.5,u,g,w,v,0.875,f,f,0,t,g,00160,0,-
b,32.08,4,y,p,cc,v,1.5,f,f,0,t,g,00120,0,-
b,31.08,1.5,y,p,w,v,0.04,f,f,0,f,s,00160,0,-
b,31.83,0.04,y,p,m,v,0.04,f,f,0,f,g,00000,0,-
a,21.75,11.75,u,g,c,v,0.25,f,f,0,t,g,00180,0,-
a,17.92,0.54,u,g,c,v,1.75,f,t,01,t,g,00080,5,-
b,30.33,0.5,u,g,d,h,0.085,f,f,0,t,s,00252,0,-
b,51.83,2.04,y,p,ff,ff,1.5,f,f,0,f,g,00120,1,-
b,47.17,5.835,u,g,w,v,5.5,f,f,0,f,g,00465,150,-
b,25.83,12.835,u,g,cc,v,0.5,f,f,0,f,g,00000,2,-
a,50.25,0.835,u,g,aa,v,0.5,f,f,0,t,g,00240,117,-
?,29.50,2,y,p,e,h,2,f,f,0,f,g,00256,17,-
a,37.33,2.5,u,g,i,h,0.21,f,f,0,f,g,00260,246,-
a,41.58,1.04,u,g,aa,v,0.665,f,f,0,f,g,00240,237,-
a,30.58,10.665,u,g,q,h,0.085,f,t,12,t,g,00129,3,-
b,19.42,7.25,u,g,m,v,0.04,f,t,01,f,g,00100,1,-
a,17.92,10.21,u,g,ff,ff,0,f,f,0,f,g,00000,50,-
a,20.08,1.25,u,g,c,v,0,f,f,0,f,g,00000,0,-
b,19.50,0.29,u,g,k,v,0.29,f,f,0,f,g,00280,364,-
b,27.83,1,y,p,d,h,3,f,f,0,f,g,00176,537,-
b,17.08,3.29,u,g,i,v,0.335,f,f,0,t,g,00140,2,-
b,36.42,0.75,y,p,d,v,0.585,f,f,0,f,g,00240,3,-
b,40.58,3.29,u,g,m,v,3.5,f,f,0,t,s,00400,0,-
b,21.08,10.085,y,p,e,h,1.25,f,f,0,f,g,00260,0,-
a,22.67,0.75,u,g,c,v,2,f,t,02,t,g,00200,394,-
a,25.25,13.5,y,p,ff,ff,2,f,t,01,t,g,00200,1,-
b,17.92,0.205,u,g,aa,v,0.04,f,f,0,f,g,00280,750,-
b,35.00,3.375,u,g,c,h,8.29,f,f,0,t,g,00000,0,-
@//E*O*F crx.test//
chmod u=rw,g=,o= crx.test
 
echo x - defns.i
sed 's/^@//' > "defns.i" <<'@//E*O*F defns.i//'
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <sys/types.h>


/******************************************************************************/
/*									      */
/*	Type definitions, including synonyms for structure pointers	      */
/*									      */
/******************************************************************************/


typedef unsigned char Var;

typedef char	Boolean,
		Ordering;	/* valid instances are <,=,>,# */


				/* A tuple is stored as an array of int / fp.

				   * T[0] = tuple number
						+ POSMARK (pos tuples)
				   * T[i] = constant number, or fp value

				   NB: If continuous (fp) values are used,
				       type Const must be the same size as
				       float --if this is not the case, change
				       Const to long.

				   Relation tuple sets are indexed by 3D array.

				   * I[i][j][k] = no. of kth tuple with T[j] = i

				   The last entry is followed by FINISH  */


typedef int			Const,
				*Tuple;

typedef int			***Index;

typedef struct _rel_rec		*Relation;

typedef struct _type_rec	*TypeInfo;

typedef struct _state_rec	State;

typedef struct _lit_rec		*Literal,
				**Clause;

typedef struct _arg_ord_rec	*ArgOrder;

typedef struct _poss_lit_rec	*PossibleLiteral;

typedef struct _backup_rec	*Alternative;

typedef struct _var_rec		*VarInfo;


/******************************************************************************/
/*									      */
/*	Structure definitions						      */
/*									      */
/******************************************************************************/

	/* State */

	/*  A state represents information about the search for a new
	    clause, including the tuples that satisfy the clause and
	    various counts for the clause and the tuples  */

struct _state_rec
{
	int		MaxVar,		/* highest variable */
			NPos,		/* number of pos tuples */
			NTot,		/* number of all tuples */
			NOrigPos,	/* original pos tuples covered */
			NOrigTot;	/* original tuples covered */
	Tuple		*Tuples;	/* training set */
	float		BaseInfo;	/* information per pos tuple */
};

	/* Literal */

struct _lit_rec
{
	char		Sign;		/* 0=negated, 1=pos, 2=determinate */
	Relation	Rel;
	Var		*Args;
	int		WeakLits;	/* value up to this literal */
	Ordering	*ArgOrders,	/* recursive lits: =, <, >, # */
			*SaveArgOrders;	/* copy during pruning */
	float		Bits;		/* encoding length */
};

	/* Relation */

	/* Note:

	   Relations are represented by the (positive) tuples they contain;
	   if the closed world assumption is not in force, negative tuples
	   known not to be in the relation can be given explicitly.

	   A key specifies a sensible way that a relation can be accessed
	   by noting which arguments must have bound values.  There can
	   be any number of keys; if there are none, all possible ways
	   of accessing the relation are ok. */
	   
struct _rel_rec
{
	char		*Name;
	int		Arity,		/* number of arguments */
			NKeys,		/* number of keys (0=all ok) */
			*Key,		/* keys, each packed in an int */
			*Type;		/* types of arguments */
	TypeInfo	*TypeRef;	/* redundant pointers to types */
	Tuple		*Pos,		/* positive tuples */
			*Neg;		/* negative tuples or Nil (CWA) */
	Index		PosIndex,	/* index for positive tuples */
			NegIndex;	/* ditto for explicit negative tuples */
	int		PosDuplicates,	/* number of duplicate pos tuples*/
			NTrialArgs,	/* number of args to try (gain) */
			NTried;		/* number of them evaluated */
	Clause		*Def;		/* definition is array of clauses */
	Boolean		BinSym,		/* true for binary symmetric relns */
			PossibleTarget,
			**PosOrder,	/* argument order info for R() */
			**NegOrder,	/*    "       "    "    " ~R() */
			*ArgNotEq;	/* args that cannot be the same var
					   (indexed by ArgPair) */
	float		Bits;		/* current encoding cost */
};

	/* Type */

struct _type_rec
{	char		*Name;		/* type name */
	Boolean		Continuous,	/* continuous (non-discrete) */
			Ordered,	/* ordered discrete type */
			FixedPolarity;
	int		NValues,	/* number of discrete constants */
			NTheoryConsts;  /* number of theory constants */
	Const		*Value,		/* constants */
			*TheoryConst;	/* theory constants */
	int		*CollSeq;	/* CollSeq[k] = x if (global) constant
					   k is x'th const of this type */
};


	/* Possible argument order -- used in discovering constant orders */

struct _arg_ord_rec
{
	Relation	Rel;		/* relation */
	Boolean		Sign;		/* sign */
	int		A1, A2,		/* A1 < A2 or A1 > A2 */
			In;		/* 0, -1 (reverse) or +1 */
};


	/* Structures used in backing up search */

struct _poss_lit_rec
{
	Relation	Rel;
	Boolean		Sign;
	Var		*Args;
	float		Gain,
			Bits;
	int		WeakLits,
			NewSize,
			TotCov,
			PosCov;
};

struct _backup_rec
{
	float		Value;
	Clause		UpToHere;
};


	/* Variables */

struct _var_rec
{
	char		*Name;
	int		Type,
			Depth;
	TypeInfo	TypeRef;
}; 


#define  FP(X)			(*((float *)(&X)))

	/*  The first four relations are predefined comparisons with
	    aliased names defined here  */

#define  EQVAR			Reln[0]		/* var = var */
#define  EQCONST		Reln[1]		/* var = theory const */
#define  GTVAR			Reln[2]		/* var > var */
#define  GTCONST		Reln[3]		/* var > threshold */

#define  Predefined(R)		(R==EQVAR||R==EQCONST||R==GTVAR||R==GTCONST)
#define  HasConst(R)		(R==EQCONST||R==GTCONST)

#define  Verbose(x)		if (VERBOSITY >= x)

#define  LN2	 		0.693147
#define  Log2(x)		(log((float) x)/LN2)
#define  Log2e			1.44269
#define  Log2sqrt2Pi		1.32575
#define  LogComb(n,r)		(Log2Fact(n) - Log2Fact(r) - Log2Fact((n)-(r)))
#define  Except(n,e)		((n) ? (1.1*(Log2(n) + LogComb(n, e))) : 0.0)
#define  Encode(n)		Except(AllTuples, n)

#define  Nil			0
#define  false			0 
#define  true			1 
#define  Max(a,b)		( (a)>(b) ? a : b ) 
#define  Min(a,b)		( (a)<(b) ? a : b ) 

#define  ForEach(V,First,Last)	for(V=First;V<=Last;V++) 

#define  Mask			 077777777
#define  PosMark		0100000000	/* Max tuples = 16.7M */
#define  Positive(T)		((T)[0]&PosMark)

#define  TrueBit		02
#define  FalseBit		01
#define  SetFlag(A,B)		Flags[A] |= B
#define  TestFlag(A,B)		(Flags[A] & B)
#define  ClearFlags		memset(Flags,0,StartDef.NTot)

#define  BestLitGain		(NPossible ? Possible[1]->Gain : 0.0)

#define  MonitorWeakLits(W)	if (W) NWeakLits++; else NWeakLits=0

#define  Plural(n)		((n) != 1 ? "s" : "")
#define  ReadToEOLN		while ( getchar() != '\n' )

#define  Alloc(N,T)		(T *) pmalloc((N)*sizeof(T))
#define  AllocZero(N,T)		(T *) pcalloc(N, sizeof(T))
#define  Realloc(V,N,T)		V = (T *) prealloc(V, (N)*sizeof(T))

#define  MissingValue(R,A,X)	(MissingVals && MissingVal(R,A,X))
#define  ungetchar(A)		ungetc(A, stdin)

#define	 ArgPair(A2,A1)		(((A2-1)*(A2-2))/2 + A1-1)

	/*  The following are used to pack and unpack parameters into
	    argument lists.  AV must be the address of an int or float  */

#define  SaveParam(A,AV)	memcpy(A,AV,sizeof(Const))
#define  GetParam(A,AV)		memcpy(AV,A,sizeof(Const))



/******************************************************************************/
/*									      */
/*	Various constants						      */
/*									      */
/******************************************************************************/


#define  FINISH	   10000000	/* large constant used as a terminator */

#define	 UNBOUND    0357357	/* odd marker used in interpret.c, join.c */

#define  MISSING_DISC     1	/* missing value "?" is the first constant */

#define  MISSING_FP 0.03125	/* arbitrary number used as the floating
				   point equivalent of MISSING_DISC - if
				   it clashes with a genuine data value, just
				   change this */

#define	 OUT_OF_RANGE	  2	/* denotes constant outside closed world */



/******************************************************************************/
/*									      */
/*	Synopsis of functions						      */
/*									      */
/******************************************************************************/


	/* main.c */

void	  main(int Argc, char *Argv[]);

	/* utility.c */

void	  *pmalloc(unsigned arg);
void	  *prealloc(void * arg1, unsigned arg2);
void	  *pcalloc(unsigned arg1, unsigned arg2);
void	  pfree(void *arg);
float	  CPUTime();

	  /* input.c */

Boolean	  ReadType();
void	  ReadTypes();
Tuple	  ReadTuple(Relation R);
Tuple	  *ReadTuples(Relation R, Boolean Pos);
Relation  ReadRelation();
void	  ReadRelations();
int	  FindType(char *N);
char	  *CopyString(char *s);
void	  Error();
void	  DuplicateTuplesCheck(Relation R);
int	  CountDuplicates(Tuple *T, int N, int Left, int Right);
Boolean	  SymmetryCheck(Relation R);
char	  ReadName(char *s);
Const	  FindConstant(char *N, Boolean MustBeThere);
int	  Number(Tuple *T);
void	  CheckTypeCompatibility();
Boolean	  CommonValue(int N1, Const *V1, int N2, Const *V2);
Index	  MakeIndex(Tuple *T, int N, Relation R);
void	  UnequalArgsCheck(Relation R);
Boolean	  NeverEqual(Tuple *T, Var F, Var S);

	  /* output.c */

void	  PrintTuple(Tuple C, int N, TypeInfo *TypeRef, Boolean ShowPosNeg);
void	  PrintTuples(Tuple *TT, int N);
void	  PrintSpecialLiteral(Relation R, Boolean 